본문 바로가기

프로그래밍/JSP 프로그래밍

JSP 프로그래밍_RequestDispatcher

RequestDispatcher란 ? 

동적 웹 페이지를 만들기 위한 기술이다. 
MVC 패턴을 이용해서 Servlet과 JSP파일을 함께 이용해 JSP와 Servlet 사이에 request, response를 전달하는 기능을 제공한다.

 

- forward() 메서드 사용 방식 ( Servlet  → jsp 파일 )

: forward() 메서드 방식은 서버 내부에서만 작동하며, 클라이언트는 정확한 JSP의 주소를 알지 못하며 보안적으로 좀 더 나은 방식이다. 

 

- include() 메서드 사용 방식 ( jsp 파일 → Servlet)

: include() 메서드 방식은 다른 Servlet 또는 JSP에서 처리한 결과를 현재 Servlet 또는 JSP의 출력에 포함시킨다. 클라이언트는 전달 받은 Servlet 또는 JSP 주소를 알지 못하며, 요청 주소는 여전히 기존에 Servlet 또는 JSP의 주소가 유지된다.

 

 

forward() 방식 ( Servlet → jsp 파일 )

Servlet 파일

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
package com.tenco;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    public MyServlet() {
        super();
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //데이터 설정
        String message = "안녕 JSP";
        
        request.setAttribute("msg", message);
        RequestDispatcher dispatcher = request.getRequestDispatcher("result.jsp");
        
        //request, response 그대로 던져 버리기
        dispatcher.forward(request, response);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
 
}
cs

jsp 파일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ 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>
    <h1>여기는 result.jsp 파일입니다.</h1>
    <div>
        <%
            //request 그대로 전달 받음 ! response !
            String message = (String)request.getAttribute("msg");
            out.println(message);
        %>
        <p>넘겨받은 데이터 : <%=message %> </p>
    </div>
</body>
</html>
cs

결과 화면

 

 

include() 방식 ( jsp 파일 → Servlet )

jsp 파일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ 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>
    <h1>여기는 result2.jsp파일이야</h1>
 
    <%
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/plain"); //평문
    String msg = (String) request.getAttribute("msg2"+ "<<<";
    out.println(msg);
    %>
 
    <p><%=msg%></p>
</body>
</html>
cs

Servlet

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
package com.tenco;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/MyServlet2")
public class MyServlet2 extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    public MyServlet2() {
        super();
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String message = "안녕 include() 방식";
        request.setAttribute("msg2", message);
        
        //RequestDispatcher를 이용하여 JSP를 포함시킴
        RequestDispatcher dispatcher = request.getRequestDispatcher("result2.jsp");
        dispatcher.include(request, response);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
 
}
cs

결과 화면