초스피드로 답변을 다는 사람이 있어, 오늘은 답변 스킵

그리고 그사람 덕분에 등록도 못해본 답변..

 

 

-- 질문

 

현재 혼자서 pdf를 보면서 mvc를 공부하고 있는데요

보면서 이해가 안가는 것이 있네요..

RequestDispatcher view = request.getRequestDispatcher("view/notice/noticeDetailView.jsp");
request.setAttribute("n", notice);
view.forward(request, response);

pdf에 RequestDispatcher 는 사용자의 원래요청을 다른 서블릿이나 JSP에 전달한다라고 적혀있는데..
사실 무슨 소리인지 잘 모르겠습니다..;

저 3줄 코딩해석좀 부탁드립니다..

 

 

-- 먼저 달린 답변

 

RequestDispatcher 이란 클래스는 현재 request에 담긴 정보를 저장하고 있다가

그 다음 페이지 그 다음 페이지에도 해당 정보를 볼수있게 계속 저장하는 기능입니다.

A.jsp 에 담겨있는 param 이라는 이름의 파라미터를
B.jsp에서도 C.jsp에서도 받아 볼수 있다는 말입니다.
물론 그 중간에 가공을 하지 않는다면 말이지요.

request - response 의 단계에서 forward와 sendRedirect 방식이 있는데
forward에서는 A.jsp -> Servlet -> B.jsp 로 넘어감에 따라 A.jsp가 가지고 있는 파라미터
정보를 가지고 B.jsp로 넘겨주는 반면에
sendRedirect 방식에선 모든 파라미터 정보를 제외하고 단순 페이지 호출만 하는 차이가 있습니다.

하지만 RequestDispatcher 없이 forward를 하게 되면 A.jsp -> Servlet -> B.jsp까지는
파라미터 정보가 넘어가지만 그 다음 단계에서 A.jsp의 파라미터를 별도로 저장하지 않는다면
소실되게 되어있습니다.

RequestDispatcher를 선언하고 request 에 "n" 이라는 이름의 Attribute를 저장 후 forward 시킨다.
로 3줄에 대한 해석이 되겠네요.

한마디로 파라미터 정보 유지를 위해 RequestDispatcher를 사용한다 라고 보시면 됩니다.

 

 

-- 등록도 못해 본 내 답변

 

음.. 예를 들어서


A.jsp 가 있다고 가정했을 때

A.jsp 에서 사용자가 a = "나는 ", b = "천재다!!"  라는 값을 담아서 submit 을 날렸습니다.

이제 그 a = "나는 " 과 b = "천재다!!" 의 값을 서버에서 처리해서 B.jsp로 처리된 결과값을 던져 결과를 보여준다고 가정합니다.


1. sendRedirect 는..

 

A.jsp 가 서버를 호출하면서 a, b 의 값을 넘깁니다.

서버는 a, b 의 값을 받았음을 A.jsp 에 알려줍니다.

다시 A.jsp 는 서버에 B.jsp 를 호출을 요청합니다.

서버는 그때서야 B.jsp 를 호출하게 됩니다.



2. RequestDispatcher 는..


A.jsp 가 서버를 호출하면서 값을 넘깁니다.

서버는 A.jsp에 별다른 내용을 알리지 않고 a, b 의 값을 처리해서,

B.jsp 를 호출하면서 바로 넘겨버립니다.



3. 소스 설명..

 

aaa(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


 

// 말그대로 view 라는 객체를 생성해서 어떤 중간과정을 거쳐 forward 할 페이지를 요청합니다.

RequestDispatcher view = request.getRequestDispatcher("view/notice/noticeDetailView.jsp");

 

모델 m = new 모델();  // 모델 호출(객체 생성)  --> 위에서 먼저 import 해줘야 함. 


// 여기는 그 어떤 중간과정 입니다.
String a1 = request.getParameter("a");
String b1 = request.getParameter("b");

 

m.setValue(a1, b1); // 값만 넘기거나..

 

String ab = a1 + b1; // 어떤 가공을 하거니...

m.setValue(ab);

 

// "ab"(객체)에 위의 m(값)을 담습니다.

request.setAttribute("ab", m);

// 이건 포워드 할 페이지를 부르는 일종의 공식같은 겁니다.
// 그냥 쓰세요.
view.forward(request, response);



아래는 자바지기 사이트로 위의  RequestDispatcher 에 대한 설명이 링크된 페이지 입니다.

http://www.javajigi.net/pages/viewpage.action?pageId=77


이해가 어려우시면 참조해 주세요.



그럼 도움이 되셨기를..