포워드 기능
포워드란 하나의 서블릿에서 다른 서블릿이나 JSP 와 연동하는 방법입니다.
쇼핑몰을 예를 들면 상품관리 서블릿과 조회된 상품을 화면에 표시하는 JSP 는 각각 따로 존재합니다.
따라서 사용자가 상품 조회를 요청하면 상품 관리 서블릿은 데이터베이스에서 상품 정보를 조회한 후 다시 JSP 에게 전달하여 상품 정보를 표시하는 것이죠.
기능을 요약하면 다음과 같습니다.
- 요청에 대한 추가 작업을 다른 서블릿에게 수행하게 합니다.
- 요청에 포함된 정보를 다른 서블릿이나 JSP 와 공유할 수 있습니다.
- 요청에 대한 정보를 포함시켜 다른 서블릿에 전달할 수 있습니다.
- 모델2(MVC) 개발 시 서블릿에서 JSP 로 데이터를 전달하는데 사용됩니다.
포워드 방법
redirect
- HttpServletResponse 객체의 sendRedirect() 메서드 사용
- response.sendRedirect("Target Servlet or JSP");
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
response.sendRedirect("second");
}
Refresh
- HttpServletResponse 객체의 addHeader() 사용
- response.addHeader("Refresh", "경과시간(sec);url = Target Servlet or JSP");
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
response.addHeader("Refresh","1;url=second");
}
location
- 자바스크립트 location 객체의 href 사용
- location.href = 'Target Servlet or JSP';
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<script type='text/javascript'>");
out.print("location.href='second';");
out.print("</script>");
}
redirect, Refresh, location 방식은 웹 브라우저를 거쳐 다른 서블릿이나 JSP 에게 요청합니다.
Get 방식의 데이터를 전달하는 방법은 Target 뒤에 물음표(?) 후 key=value 형식으로 함께 작성해서 전달합니다.
요청을 받는 Target 에서는 request.getParameter("key") 로 받아서 처리하면 됩니다.
response.sendRedirect("second?name=kim");
dispatch 를 이용한 포워드
dispatch 를 이용한 포워딩 과정이 앞의 방식과 다른 점은 웹 브라우저를 거치지 않고 바로 서버에서 포워딩이 진행된다는 것입니다.
따라서 웹 브라우저의 주소창의 URL 이 변경되지 않으므로 클라이언트 측에서는 포워드 진행여부를 알 수 없습니다.
- RequestDispatcher 클래스의 forward() 사용
- RequestDispatcher dis = request.getRequestDispatcher("Target Servlet or JSP");
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
RequestDispatcher dispatch = request.getRequestDispatcher("second");
dispatch.forward(request, response);
}
Get 방식의 데이터 전달 방법은 앞의 포워드 방법과 동일합니다.
여기까지 임미다.
'개발 > Java' 카테고리의 다른 글
[JAVA - WEB] 서블릿 리스너(Listener) (0) | 2022.11.05 |
---|---|
[JAVA - WEB] 서블릿 필터(Filter) (0) | 2022.11.05 |
[JAVA - WEB] 세션(Session) (1) | 2022.11.03 |
[JAVA - WEB] 쿠키(Cookie) (0) | 2022.11.03 |
[JAVA - WEB] 서블릿 바인딩(binding) (0) | 2022.11.02 |
[JAVA - WEB] 서블릿과 데이터베이스 (0) | 2022.11.02 |
[ Eclipse ] 소스 정렬 방법 (0) | 2022.11.01 |
[JAVA - WEB] 서블릿 요청 및 데이터 전송 (1) | 2022.10.31 |
[JAVA - WEB] 서블릿 기본 (1) | 2022.10.31 |
[JAVA - WEB] 서블릿이란? (0) | 2022.10.31 |