MVC 란?
- JSP와 Servlet을 모두 사용하여 프레젠테이션 로직(View)과 비즈니스 로직(Controller)을 분리한다.
- View(보여지는 부분)는 HTML이 중심이 되는 JSP를 사용
- Controller(다른 자바 클래스에 데이터를 넘겨주는 부분)는 Java 코드가 중심이 되는 Servlet을 사용
비즈니스 로직 처리, DB에 접근 등의 요청을 처리한다. - Model은 Java Beans로, DTO와 DAO를 통해 Mysql과 같은 Data Storage에 접근
- 구체적인 MVC 패턴은 MVC-Architecture 참고
- JSP만을 이용하는 모델 / JSP와 Servlet을 모두 이용하는 모델 (MVC Architecture)
- 출처
MVC 모델을 이용해 forward(위임) 동작 해보기
[Servlet]
1
2
3
4
5
6
7
8
9
10
11
12
|
@WebServlet("/el01")
public class El01Servlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("myName", "김구라");
String path="/el/test01.jsp";
RequestDispatcher rd=req.getRequestDispatcher(path);
rd.forward(req, resp);
}
}
|
cs |
6행 : request객체에 setAttribute() 메소드로 key값과 value값을 담는다. "myName"이라는 key값으로 "김구라"라는 string type의 value 값이 담겨 있다.
8행 : forward(위임)할 경로를 path 변수에 담는다.
9행 : forward() 메소드를 사용하기 위해 RequestDispatcher 객체를 만든다.
10행 : RequestDispatcher 객체를 사용해 forward 메소드를 호출한다. forward 메소드로 클라이언트의 요청에 대한 응답을 위임할때는 반드시 request객체와, response 객체를 인자로 넣어야한다. 그래야 어떤 내용을 응답할지 출력해줄 수 있기 때문이다.
[JSP]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<%@ 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>
<h3>EL 테스트 중...</h3>
<%
//request에 "myName"이라는 키값으로 담긴 string type 읽어오기
String myName=(String)request.getAttribute("myName");
%>
<p>myName: <strong><%=myName %></strong></p>
<p>myName: <strong>${requestScope.myName }</strong></p>
</body>
</html>
|
cs |
11행~15행 : Markup 언어와 Java 언어로 request 객체에 "myName" 이라는 key값으로 담겨있는 value 값 출력
17행 : EL(expression language)로 requestScope(request영역)에 있는 "myName" 이라는 key값으로 담겨있는 value 값 출력.
MVC 모델을 이용해 redirect(재요청) 동작 해보기
- redirect란 ? 클릭!
[Servlet]
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@WebServlet("/el03")
public class El03Servlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//세션 영역에 String type 담기
HttpSession session=req.getSession();
session.setAttribute("myNick", "호빵맨");
//jsp 페이지로 리다이렉트 이동하기
String cPath=req.getContextPath();
resp.sendRedirect(cPath+"/el/test03.jsp");
}
}
|
cs |
6-7행 : session 영역에 "myNick" key값에 String type의 "호빵맨" value 값 담기
jsp에서는 session 객체가 기본으로 제공되지만 servlet에서는 제공되지 않는다. 따라서 request 객체를 통해 session 객체를 생성해 주어야한다.
9-10행 : 클라이언트의 요청에 대한 응답을 JSP 페이지로 redirect(재요청) 하기.
redirect 시에는 반드시 ContextPath를 작성해주어야한다.
[JSP]
1
2
3
4
5
6
7
8
9
10
11
|
@WebServlet("/el03")
<body>
<h3>EL 테스트 중...</h3>
<%
String myNick=(String)session.getAttribute("myNick");
%>
<p> 세선에 저장된 별명 : <strong><%=myNick %></strong></p>
<%-- 위의 작업을 EL을 이용하면 아래와 같다 --%>
<p> 세션에 저장된 별명 : <strong>${sessionScope.myNick }</strong></p>
</body>
|
cs |
4-7행 : Markup 언어와 Java 언어로 request 객체에 "myNick" 이라는 key값으로 담겨있는 value 값 출력
10행 : EL(expression language)로 requestScope(request영역)에 있는 "myNick" 이라는 key값으로 담겨있는 value 값 출력.
MVC 모델을 이용해 DTO 에 담겨 있는 내용 출력해보기
[Servlet]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@WebServlet("/el02")
public class El02Servlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
UsersDto dto=new UsersDto();
dto.setId("kimgura");
dto.setEmail("aaa@naver.com");
//request 영역에 dto 담기
req.setAttribute("dto", dto);
//jsp 페이지로 forward 이동
RequestDispatcher rd=req.getRequestDispatcher("/el/test02.jsp");
rd.forward(req, resp);
}
}
|
cs |
5-7행 : DTO 객체를 생성해서 ID와 Email 담기
9행 : request 객체에 "dto"라는 key값으로 value는 dto 객체를 담기
11-12행 : RequestDispatcher 객체를 생성하고, forward()메소드 req에 응답할 내용을 담아 "/el/test02.jsp" 로 응답 위임하기
[JSP]
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
|
<body>
<h3>EL 테스트 중...</h3>
<%
UsersDto dto=(UsersDto)request.getAttribute("dto");
%>
<p>
아이디 : <strong><%=dto.getId() %></strong>
이메일 : <strong><%=dto.getEmail() %></strong>
</p>
<%-- 위의 코드를 EL을 이용하면 아래와 같다 --%>
<p>
아이디: <strong>${requestScope.dto.id }</strong> 이메일: <strong>${requestScope.dto.email }</strong> </p> <%-- requestScope KeyWord 생략 가능 --%>
<%-- 'dto.필드명' 으로 작성하면 알아서 getter 메소드를 불러와서 출력해 준다. --%>
<p>
아이디: <strong>${dto.id }</strong>
이메일: <strong>${dto.email }</strong>
</p>
<%-- el을 사용하면 출력할 데이터가 없는 경우(null 값)은 찍지 않고 비워 놓는다. --%>
<p>
아이디: <strong>${requestScope.dto.id }</strong>
이메일: <strong>${requestScope.dto.email }</strong>
등록일: <strong>${requestScope.dto.regdate }</strong>
</p>
</body>
|
cs |
3-9행 : Markup 언어와 Java 언어로 request 객체에 "dto" 라는 key값으로 담겨있는 value 값인 dto 객체의 참조값을 갖고와서 출력
10-16행 : requestScope에 담겨 있는 dto객체 필드에 있는 id값과 email값을 출력
17-22행 : EL을 이용해서 출력 이때, requestScope KeyWord 생략해도 JSP페이지에서 알아서 출력해준다.
24-28행 : dto 객체에 담지 않은 '등록일'을 출력 해보면 data가 없는 경우, null 값은 찍지 않고 비워놓는다.
'Servlet&JSP' 카테고리의 다른 글
[JSP/JSTL] JSTL(core) 활용 하기 : for문/확장 for문 (0) | 2020.01.22 |
---|---|
[JSP/JSTL] JSTL 개요 / JSTL 불러오기 (0) | 2020.01.21 |
[JSP] EL(Expression Language) - 산술, 비교, 논리, empty 연산 (0) | 2020.01.21 |
[비동기 통신] AJAX 통신 / Form 유효성 검증 (0) | 2020.01.13 |
Filter(필터) (0) | 2020.01.10 |