response 객체는 내장객체로 선언되어 있으므로 jsp에서 스크립트릿으로 바로 response.sendRedirect 메소드를 호출한다.
인자로는 리다이렉트할 url을 전달한다.
redirect01.jsp url로 접속하면 redricet02.jsp url로 이동하게 된다.
리다이렉트 시에는 클라이언트가 request를 두번 보내게 된다.
servlet1이 처리한 내용을 가지고 servlet2가 추가로 처리하려면 servlet1과 servlet2가 모두 접근 가능한 것이 필요하다.
그 역할을 해주는 것이 HttpServletRequest 객체이다.
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int diceValue = (int)Math.random()*6+1;
//setAttriute로 request 객체에 값을 저장한다. dice라는 이름으로 diceValue 값을 저장
request.setAttribute("dice",diceValue);
//import javax.servlet.RequestDispatcher
//getRequest이 인자로 어디로 포워딩할지 정한다. 주소는 /로 시작하고 같은 웹 어플리케이션 내에서만 포워딩할 수 있다.
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/next");
requestDispatcher.forward(request,response);
}
Servlet1의 service 메소드다.
request 객체에 setAttribute 메소드를 이용해서 dice 라는 이름으로 diceValue 값을 저장했다.
RequestDispatcher를 사용하기 위해 javax.servlet.RequestDispatcher를 import 해줬다.
RequestDispatcher를 이용해서 request와 response 객체를 포워딩해준다.
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head></head>");
out.println("<body>");
//Servlet1에서 저장한 값을 getAttrivute 메소드로 얻어온다.
int dice = (Integer)request.getAttribute("dice");
out.println("dice : "+dice);
out.println("</body></html>");
}
Servlet2의 service 메소드다.
getAttribute 메소드를 이용해서 Servlet1에서 저장한 값을 찾는다.
실행해보면 Servlet2로 포워딩했지만 url은 그대로 Servlet1이다.