Jsp-redirect & forward

1 분 소요

리다이렉트 (redirect)

  • 리다이렉트는 HTTP프로토콜로 정해진 규칙이다.
  • 서버는 클라이언트의 요청에 대해 특정 URL로 이동을 요청할 수 있다. 이를 리다이렉트라고 한다.
  • 서버는 클라이언트에게 HTTP 상태코드 302로 응답하는데 이때 헤더 내 Location 값에 이동할 URL 을 추가한다. 클라이언트는 리다이렉션 응답을 받게 되면 헤더(Location)에 포함된 URL로 재요청을 보내게 된다. 이때 브라우저의 주소창은 새 URL로 바뀌게 된다..
  • 클라이언트는 서버로부터 받은 상태 값이 302이면 Location헤더값으로 재요청을 보내게 된다. 이때 브라우저의 주소창은 전송받은 URL로 바뀌게 된다.
  • 서블릿이나 JSP는 리다이렉트하기 위해 HttpServletResponse 클래스의 sendRedirect() 메소드를 사용한다.
  • 가장 중요한건 클라이언트가 요청을 두 번 보낸다는 것을 기억해야한다.
  • 요청이 들어갈 때 요청객체와 응답객체가 생성된다.
  • 첫번째 보낸 파일의 요청, 응답객체는 리다이렉트된 파일의 요청, 응답객체와 다르다.

forward란?

  1. 웹 브라우저에서 Servlet1에게 요청을 보냄
  2. Servlet1은 일부요청을 처리한 후, 그 결과를 HttpServletRequest에 저장
  3. Servlet1은 결과가 저장된 HttpServletRequest와 응답을 위한 HttpServletResponse를 같은 웹 어플리케이션 안에 있는 Servlet2에게 전송(forward)
  4. Servlet2는 Servlet1으로 부터 받은 HttpServletRequest와 HttpServletResponse를 이용하여 나머지요청을 처리한 후 웹 브라우저에게 결과를 전송
  • 중요 포인드
    • forward는 요청, 응답객체가 한 번만 만들어지고 redirect에선 두 번 만들어지는 차이점이 있다.
    • forward는 url은 처음 요청보낸 파일 그대로 따오지만 redirect에선 redirect된 파일명이 url로 들어온다.
    • 그런데 밑에처럼 하면 servlet1에서의 결과값을 servlet2로 넘겨주는게 어렵다. 지역변수인 스크립트릿<% … %>으로 선언되기때문이다. 반드시 request객체에 저장을 꼭 시켜놔야한다.
  • forward시키는 방법
      protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                      // TODO Auto-generated method stub
                      int diceValue = (int)(Math.random()*6 + 1);
                      request.setAttribute("dice", diceValue);
                        
                      RequestDispatcher requestDispatcher = request.getRequestDispatcher("/next");
                      requestDispatcher.forward(request, response);
              }
    
  • /next는 포워드보낼 서블릿의 url매핑값이다.

servlet & jsp연동

  • Servlet은 프로그램 로직이 수행되기에 유리하다. IDE 등에서 지원을 좀 더 잘해준다.
  • JSP는 결과를 출력하기에 Servlet보다 유리하다. 필요한 html문을 그냥 입력하면 됨.
  • 프로그램 로직 수행은 Servlet에서, 결과 출력은 JSP에서 하는 것이 유리하다.
  • Servlet과 JSP의 장단점을 해결하기 위해서 Servlet에서 프로그램 로직이 수행되고, 그 결과를 JSP에게 포워딩하는 방법이 사용되게 되었다. 이를 Servlet과 JSP연동이라고 한다.

카테고리:

업데이트:

댓글남기기