리다이렉트 (Redirect)
리다이렉트는 HTTP프로토콜로 정해진 규칙이다.
서버는 클라이언트의 요청에 대해 특정 URL로 이동을 요청할 수 있다. 이를 리다이렉트라고 한다.
서버는 클라이언트에게 HTTP 상태코드 302로 응답하는데 이때 헤더 내 Location 값에 이동할 URL 을 추가한다.
클라이언트는 리다이렉션 응답을 받게 되면 헤더(Location)에 포함된 URL로 재요청을 보내게 된다. 이때 브라우저의 주소창은 새 URL로 바뀌게 된다. 클라이언트는 서버로부터 받은 상태 값이 302이면 Location헤더값으로 재요청을 보내게 된다. 이때 브라우저의 주소창은 전송받은URL로 바뀌게 된다. 서블릿이나 JSP는 리다이렉트하기 위해 HttpServletResponse 클래스의 sendRedirect() 메소드를 사용한다.
redirect01.jsp에 response.sendRedirect("redirect02.jsp");
를 작성하고 실행하면, 아래 그림과 같은 프로세스가 실행된다.
클라이언트는 2번의 요청을 하게 된다. redirect01.jsp를 요청했을 때 생성된 요청/응답 객체와 redirect02.jsp를 요청했을 때 생성된 요청/응답 객체가 생기게 된다. 이 두 요청/응답객체가 다름을 인지해야한다.
forward
웹 브라우저에서 Servlet1에게 요청을 보냄 .Servlet1은 요청을 처리한 후, 그 결과를 HttpServletRequest에 저장.
Servlet1은 결과가 저장된 HttpServletRequest와 응답을 위한 HttpServletResponse를 같은 웹 어플리케이션 안에 있는 Servlet2에게 전송
Servlet2는 Servlet1으로 부터 받은 HttpServletRequest와 HttpServletResponse를 이용하여 요청을 처리한 후 웹 브라우저에게 결과를 전송
더 알아보기, JSP로 보여주고 서블릿으로 계산하기
서블릿은 프로그램 로직을 개발하기에 편리하지만, HTML 태그를 출력하기엔 불편합니다. JSP는 프로그램 로직을 개발하기는 좀 불편하지만, HTML 태그를 출력하기엔 편리합니다. 서블릿과 JSP는 서로 장단점이 반대입니다. 포워드를 이용해서 이러한 단점을 해결하고 싶습니다. 어떻게 해야 할까요?
Ans : JSP를 이용해서 HTML태그를 짜고 forward를 이용해 서블릿에서 로직을 처리하게 한다. JSP와 서블릿의 연동.
JSP와 서블릿의 연동
더 알아보기, 서블릿이 복수의 URL을 처리하는 방법.
객체지향에서 객체는 관련된 것들을 모아서 가지고 있는 특징이 있습니다. 웹 페이지 URL도 관련된 URL이 있습니다. 예를 들어, 게시판 글쓰기, 읽기, 목록 보기 등은 모두 게시판과 관련된 URL일 것입니다. 하지만 지금까지의 예제들을 보면 서블릿은 하나의 URL만 처리하고 있습니다. 하나의 서블릿이 여러 개의 요청을 받을 수는 없을까요?
(힌트 : 서블릿 URL mapping에서 와일드카드('*'기호)를 사용하는 방법에 대해서 조사해보세요.)
Ans :
<servlet-mapping>
<servlet-name>getStatus</servlet-name>
<url-pattern>/status/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>getStatus</servlet-name>
<url-pattern>/briefStatus/*</url-pattern>
</servlet-mapping>
forward()메서드와 sendRedirect()메서드의 차이점
forward() method |
sendRedirect() method |
서버측에서 작동 |
클라이언트측에서 작동 |
다른 서블릿으로 항상 같은 응답과 요청을 함. |
항상 새로운 Request를 보냄 |
서버안에서만 작동 |
서버 내/외에서 작동 |
작성예시 request.getRequestDispacher("servlet2").forward(request,response); |
작성예시 Example: response.sendRedirect("servlet2"); |
Reference
<Redirect>
redirection : https://developer.mozilla.org/ko/docs/Web/HTTP/Redirections
HTTP상태코드 1XX~5XX : https://developer.mozilla.org/ko/docs/Web/HTTP/Status
<forward>
edwith : https://www.edwith.org/boostcourse-web/lecture/16706/
URLPattern : http://docs.roguewave.com/hydraexpress/3.5.0/html/rwsfservletug/4-3.html
'Road to Developer > edwith풀스택웹개발자' 카테고리의 다른 글
19. EL, JSTL (0) | 2018.07.11 |
---|---|
18. scope (0) | 2018.07.10 |
16. JSP (2) | 2018.07.10 |
15.ajax 통신 (0) | 2018.07.09 |
14. Event (0) | 2018.07.09 |