연습예제
각 요청(getAge.do, getAbs.do, getInfo.do)에 대한 서비스 메서드가 구현되어 있으며,
해당 서비스 메서드가 호출되어 비즈니스 로직을 수행합니다.
결과는 ActionForward 객체를 통해 JSP 페이지로 이동하거나 출력됩니다.
▶ index.jsp
html 전달
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="contextPath" value="<%=request.getContextPath()%>" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
</head>
<body>
<div>
<form method="get" action= "${contextPath}/getAge.do">
<label for="year">태어난년도</label>
<select name="year">
<c:forEach var= "y" begin="1970" end="2023" step="1">
<option>${y}</option>
</c:forEach>
</select>
<button type="submit">몇 살인지 알려주세요</button>
</form>
</div>
<hr>
<div>
<form method="get" action="${contextPath}/getAbs.do">
<label for="n">숫자입력</label>
<input type="text" name="n" id="n">
<button type="submit">절대값요청하기</button>
</form>
</div>
<hr>
<div>
<form method="post" action="${contextPath}/getInfo.do">
<div>
<label for="name">이름</label>
<input type="text" name="name" id="name">
</div>
<div>
<label for="age">나이</label>
<input type="text" name="age" id="age">
</div>
<div>
<label>성별</label>
<input type="radio" name="gender" id="man" value="man"><label for="man">남자</label>
<input type="radio" name="gender" id="woman" value="woman"><label for="woman">여자</label>
<input type="radio" name="gender" id="none" value="none" checked><label for="none">선택안함</label>
</div>
<div>
<label>취미</label>
<input type="checkbox" name="hobbies" id="baskitball" value="야구"><label for="baskitball">야구</label>
<input type="checkbox" name="hobbies" id="travel" value="여행"><label for="travel">여행</label>
<input type="checkbox" name="hobbies" id="game" value="게임"><label for="game">게임</label>
</div>
<div>
<button type="submit">정보전송하기</button>
</div>
</form>
</div>
</body>
</html>
|
cs |
▶ age.jsp
age.jsp: 사용자의 나이를 출력하는 JSP 페이지입니다.
${age}는 서블릿에서 HttpServletRequest를 통해 설정된 age 속성 값을 출력합니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div>현재 나이는 ${age}살입니다.</div>
</body>
</html>
|
cs |
▶ info.jsp
info.jsp: 사용자의 정보를 출력하는 JSP 페이지입니다.
${vo.name}, ${vo.age}, ${vo.gender}, ${vo.hobbies}는 UserVo 객체의 필드 값을 출력합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div>
<ul>
<li>${vo.name}</li>
<li>${vo.age}</li>
<li>${vo.gender}</li>
<li>
<c:forEach var="hobby" items="${vo.hobbies}">
${hobby}
</c:forEach>
</li>
</ul>
</div>
</body>
</html>
|
cs |
▶ UserVo
사용자 정보를 저장하는 Java Bean 클래스입니다.
name, age, gender, hobbies 필드를 가지고 있습니다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package Vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class UserVo {
private String name;
private int age;
private String gender;
private String[] hobbies;
}
|
cs |
▶ MvcService 인터페이스 :
각각의 요청에 대한 서비스 메서드를 정의합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package service;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import common.ActionForward;
public interface MvcService {
public ActionForward getAge(HttpServletRequest request);
public void getAbs(HttpServletRequest request, HttpServletResponse response) throws IOException;
public ActionForward getInfo(HttpServletRequest request);
}
|
cs |
▶ MvcServiceImpl 클래스 :
MvcService 인터페이스를 구현하는 클래스로, 각각의 메서드에서 비즈니스 로직을 처리합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
package service;
import java.io.IOException;
import java.io.PrintWriter;
import java.time.LocalDate;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import Vo.UserVo;
import common.ActionForward;
public class MvcServiceImpl implements MvcService {
@Override
public ActionForward getAge(HttpServletRequest request) {
String year = request.getParameter("year");
int iYear = Integer.parseInt(year);
int nowYear = LocalDate.now().getYear();
request.setAttribute("age", nowYear - iYear);
return new ActionForward("views/age.jsp", false);
}
@Override
public void getAbs(HttpServletRequest request, HttpServletResponse response) throws IOException {
int n = Integer.parseInt(request.getParameter("n"));
PrintWriter out = response.getWriter();
out.println("<script>");
out.println("alert('" + (n >= 0 ? n : -n) + "')");
out.println("location.href='" + request.getContextPath() + "'");
out.println("</script>");
out.flush();
out.close();
}
@Override
public ActionForward getInfo(HttpServletRequest request) {
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String gender = request.getParameter("gender");
String[] hobbies = request.getParameterValues("hobbies");
UserVo vo = new UserVo();
vo.setName(name);
vo.setAge(age);
vo.setGender(gender);
vo.setHobbies(hobbies);
request.setAttribute("vo", vo);
return new ActionForward("views/info.jsp", false);
}
}
|
cs |
서블릿 (MvcController) :
doGet 메서드: 웹 요청을 처리하는 서블릿입니다.
요청의 URI를 분석하여 적절한 서비스 메서드를 호출하고, 그 결과에 따라 다른 페이지로 이동하거나 결과를 출력합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
package ctrl;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import common.ActionForward;
import service.MvcService;
import service.MvcServiceImpl;
/**
* Servlet implementation class MvcController
*/
@WebServlet("*.do")
public class MvcController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MvcController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 요청 인코딩 + 응답 타입과 인코딩
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
// 요청 확인
String requestURI = request.getRequestURI();
String contextPath = request.getContextPath();
String urlMapping = requestURI.substring(contextPath.length());
// 서비스 객체 생성
MvcService mvcService = new MvcServiceImpl();
// ActionForward 객체 생성 (서비스의 실행 결과를 저장할 객체)
ActionForward af = null;
// 요청에 따른 서비스 선택과 실행
switch(urlMapping) {
case "/getAge.do" :
af = mvcService.getAge(request);
break;
case "/getAbs.do" :
mvcService.getAbs(request, response);
break;
case "/getInfo.do":
af = mvcService.getInfo(request);
break;
}
// 이동
if(af != null) {
if(af.isRedirect()) {
response.sendRedirect(af.getPath());
} else {
request.getRequestDispatcher(af.getPath()).forward(request, response);
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
|
cs |
ActionForward :
서비스 메서드가 반환하는 결과를 저장하는 클래스입니다.
path는 이동할 JSP 페이지의 경로를, redirect는 리다이렉트 여부를 나타냅니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package common;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class ActionForward {
private String path;
private boolean redirect;
}
|
cs |
'코딩기록 저장소 🐕 > JSP' 카테고리의 다른 글
게시물 CRUD,DBCP (0) | 2023.09.20 |
---|---|
DBCP (0) | 2023.09.19 |
mvc pattern (0) | 2023.09.18 |
jsp session 로그인 장바구니 cookie (0) | 2023.09.18 |
JSP jstl (0) | 2023.09.15 |