http://www.wiz.center/213
의 동영상 강의를 시청하고 작성한 글입니다.
새로 시작하는 경우라면 위 링크의 동영상 강의를
들어보세요
1. Forwarding?
요청받은 내용에 대해서 직접 처리하지않고 다른 컴포넌트로
넘겨서 다시 처리하도록 진행하는 방법
이때 2가지 클래스를 이용할 수 있는데
RequestDispatcher, HttpServletResponse 를 이용해서
Forwarding 이 가능하다.
2. RequestDispatcher 클래스
1) 내용을 동일하게 다른 컴포넌트로 전달하는 목적으로
만들어진 클래스
2) 예제
(1)dispacherJsp.jsp 작성
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
dispacherJsp.jsp
<hr />
id : <%= request.getAttribute("id") %> <br />
pw : <%= request.getAttribute("pw") %>
</body>
</html>
(2) RequestObj라는 서블릿은 /RequestObj 라는 키워드에만
동작하게끔 되어 있다. 실행시 jsp 파일로 접근하려고
하면 안되고 해당 키워드로 접근해야 한다.
그리고 하단부에 RequestDispatcher 인스턴스를 생성하고
여기에 (1)번 항목의 jsp 파일을 url로 넣은 상태
SetAttribute 한 내용이 그대로 jsp 파일로 넘어간다.
package com.javalec.ex; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class RequestObj */ @WebServlet("/RequestObj") public class RequestObj extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public RequestObj() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("doGet"); actionDo(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("doPost"); actionDo(request, response); } private void actionDo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("actionDo"); request.setAttribute("id", "abcde"); request.setAttribute("pw", "12345"); RequestDispatcher dispatcher = request.getRequestDispatcher("/dispacherJsp.jsp"); dispatcher.forward(request, response); } }
결과 :
3. HttpServletResponse
내부적으로 전달하는게 아닌 새로 인스턴스를 생성해서
보냄 (브라우저를 통해서 보낸다.)
그러므로 위의 예제와 다른 결과를 보이게 된다.
1) 예제
(1) 모두 동일하고 servlet 파일의 actionDo 메서드만 설정
private void actionDo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("actionDo"); String id = (String)request.getAttribute("id"); String pw = (String)request.getAttribute("pw"); response.setContentType("text/html; charset=EUC-KR"); PrintWriter writer = response.getWriter(); writer.print(""); writer.print("RequestObj" + "
"); writer.print("id : " + id + " "); writer.print("pw : " + pw); writer.print(""); }
결과 :
댓글 없음:
댓글 쓰기