본문 바로가기

JSP/기본다지기

JSP 5일차 필기 (Dispatcher)

Redirect 방식으로 페이지를 이동시키는 것이 아닌 Forward 방식으로 페이지를 넘어가는 방법.


Dispatcher를 이용하는 방법이다.


Redirect 방식과의 차이점.


1. 브라우저 상단 url은 그대로이다. (Dispatcher가 요청을 가로채서 변동시켰기 때문)


2. request 객체와 response 객체가 유지된다.

   그 이유는 dispatcher.forward에 그대로 담아서 넘기기 때문이다.


Dispatcher를 사용하는 이유


parameter를 post타입으로 전달하기 위해서 Dispatcher를 사용한다.

Dispatcher를 사용하여 값을 넘기면, 값을 Object 타입으로 전달 가능하다. 

post방식은 header정보로 파라미터를 넘기지만, get방식은 url을 통해 값을 넘긴다.

url으로 값을 넘기면 byte 타입으로 변형해서 넘기는데, 이 때 사용되는 인코딩이 "8859_1"여서, 문자열의 인코딩을 변형해야한다. (이 때문에 한글 깨짐이 발생한다.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//클라이언트가 요청한 url
RequestDispatcher dispatcher = request.getRequestDispatcher("./L01LoginForm.jsp");
dispatcher.forward(request, response);
%>
</body>
</html>
cs


L02LoginControl.java (이전 프로젝트의 L02LoginControl.java와 비교하며 공부해보기)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@WebServlet("/LoginCtrl")
public class L02LoginController extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=UTF-8");
        String id = request.getParameter("id");
        String pwd = request.getParameter("pwd");
        String db_id = "jsp";
        String db_pwd = "admin1234";
        if(id!=null && pwd!=null){
            if(id.equals(db_id)&&pwd.equals(db_pwd)){
                request.setAttribute("login"1);//Object Type으로 넘어감
                RequestDispatcher dispatcher = request.getRequestDispatcher("./L03LoginResult.jsp");
                dispatcher.forward(request, response);
                //login = 1->true, 0->false
            }else{
                response.sendRedirect("./L01LoginForm.jsp?msg=Access Denied.");
            }
        }
    }
}
 
cs


값이 Object Type으로 넘어가기 때문에, 받을 때도 Object Type으로 받아야한다.

1
Object login = request.getAttribute("login");
cs


'JSP > 기본다지기' 카테고리의 다른 글

JSP 6일차 필기 (Template)  (0) 2016.10.25
JSP 5일차 필기 (Template)  (0) 2016.10.24
JSP 4일차 필기 (Redirect)  (0) 2016.10.21
JSP 4일차 필기 (간단한 Login 양식)  (0) 2016.10.21
JSP 4일차 필기 (전역변수, 메소드)  (0) 2016.10.21