[Java] Redirect, Forward

forward

  • 특정 서블릿에 대한 요청을 다른 서블릿이나 JSP로 넘겨준다. (파라미터도 같이 넘겨줄 수 있다.)
  • URL주소는 처음 요청할 때의 값이 바뀌지 않으며, 서버 내부에서만 접근이 가능하다.
    (Request 객체와 Response객체를 공유해서 사용한다.)

  • 이동되는 페이지로 값을 넘기려면 Request객체의 setAttribute() 메서드로 데이터를 세팅하여 보내고 받는 쪽에서는 Request객체의 getAttribute()메서드로 데이터를 읽어온다.
  • 형식) request.setAttribute("키 값", 데이터);
  • 형식) request.getAttribute("키 값");
  • 이동할 URL주소는 Context Path이후의 경로를 기술한다.
    예를들어 원래 주소가 /servletTest/myurl.do 라고 하면 '/myurl.do'

서블릿 ResponseTest01 에서 setAttribute를 통해 tel 데이터를 이동할 페이지로 보냄

request.setAttribute("tel", "010-1234-5678");

이동할주소

RequestDispatcher rd = request.getRequestDispatcher("/responseFowardTest.do");

rd.forward(request, response);

서블릿 ResponseFowardTest 에서 파라미터로 넘어온 데이터를 받기

String userName = request.getParameter("username");

setAttribute()로 세팅한 데이터 받기
getAttribute는 항상 형변환을 해줘야한다

String tel = (String) request.getAttribute("tel");

클라이언트가 a.do를 요청 - > 서버의 a.do서블릿으로 요청신호가갈때 request, response 생성됨 - > b.do로 forward될때 request, response객체도 같이감-> 처리된 결과가 다시 클라이언트로 가는데 url주소는 처음 요청한 a.do주소로, b.do로 바뀌지않음.

Redirect

  • 다른 페이지로 제어가 넘어가도록 한다. (이 때 직접 파라미터를 넘길 수 없다.)
  • 응답 시 브라우저에게 '이동할URL'을 전송하여 브라우저가 해당 URL로 이동하는 방식이다.
    (이 때는 무조건 GET방식으로만 이동한다.)
  • redirect방식은 Request객체를 유지하지 못한다.
    (이유는 브라우저에게 새로운 요청을 하기 때문이다.) 그래서 url도 변경됨

  • 명령 : response.sendRedirect("이동할 URL");
  • 이동할 URL은 전체 URI주소를 기술한다.

클라이언트가 a.do를 요청(호출) -> request, response객체가 생기고 a.do로 감 - > a.do에서 b.do로 redirect로 가려고함 -> a.do에서 b.do로 redirect하기위해 클라이언트에게 신호를 보냄 -> 클라이언트는 신호를 받고 b.do에게 redirect요청&request, response객체 새로 생성됨 -> 클라이언트의 url주소도 b.do로 바뀜
서로다른 request, response객체라 데이터 공유가 안됨


ResponseTest02서블릿에서 데이터를 보냄. 데이터를 보내려면 GET방식으로 보낼수 있다.


String userName = request.getParameter("username");
		
response.sendRedirect(request.getContextPath()+ "/responseRedirectTest.do?username="+ userName + "&tel=010-9999-8888");

ResponseRedirectTest서블릿에서 데이터 받음
setAttribute()로 세팅한 데이터 받기 get으로 받아유

String tel = request.getParameter("tel");

좋은 웹페이지 즐겨찾기