본문 바로가기
컴퓨터이야기/JAVA&JSP

[JSP]Dispatcher

by 변화지시자 2013. 1. 29.
반응형

▶ Dispatcher(jsp의 전송값을 jsp 나 서블릿으로 보내는 것(분배하는 것))

html 에서 jsp 로 보낼때는 form에 넣어서 보냄

ServletContext getRequestDispatcher(String path)
ServletContext getNamedDispatcher(String name)
ServletRequest getRequestDispatcher(String path)

 

예)
ServletContext context = getServletContext();
RequestDispatcher rd = context.getRequestDispatcher("/servlet/ForwardServlet2")
경로는 web application의 최상의 디렉토리 "/" 부터 시작해서 지정

 

▶ Dispatcher 2가지 방식

forward() - 동일 서버내에 파일로 전송. 대상 파일이 없거나 오류시 404에러 - 주소창에 주소 안바뀜
include() - 동일 서버내에 파일을 참조. 대상 파일이 없거나 오류시 에러 안남 - 주소창에 주소 안바뀜

 

다른 Web Application 존재 하는 파일 요청
context.xml에서 crossContext="true"하고
ServletContext context = getServletContext().getContext("/");
RequestDispatcher rd = context.getRequestDispatcher("/index.jsp");

 

// 파일명 : ForwardTestServlet1.java-----------------------------------------
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ForwardTestServlet1 extends HttpServlet {
   protected void doGet(HttpServletRequest req,  HttpServletResponse res)  
                                   throws ServletException, IOException {
      res.setContentType("text/html; charset=EUC-KR");
      PrintWriter out = res.getWriter();
      out.println("<HTML><HEAD><TITLE>forward 예제</TITLE>");
      out.println("</HEAD><BODY><H3>ForwardTestServlet1의 수행 결과
                                   </H3>");
      out.println("</BODY></HTML>");  
      ServletContext context = getServletContext();
      RequestDispatcher rd = context.getRequestDispatcher("/servlet/ForwardTestServlet2");
      rd.forward(req, res);    
      out.close();
   }

//------------------------------------------------------------------------------

 

 

// 파일명 : IncludeTestServlet1.java----------------------------------------------
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class IncludeTestServlet1 extends HttpServlet {
   protected void doGet(HttpServletRequest req,  HttpServletResponse res)   
                                   throws ServletException, IOException {
      res.setContentType("text/html; charset=EUC-KR");
      PrintWriter out = res.getWriter();
      out.println("<HTML><HEAD><TITLE>include 예제1</TITLE>");
      out.println("</HEAD><BODY><H3>IncludeTestServlet1의 수행 결과
                                       </H3>");
      out.println("</BODY></HTML>");
      ServletContext context = getServletContext();
      RequestDispatcher rd = context.getRequestDispatcher("/servlet/IncludeTestServlet2");
      out.println("<HR>");
      rd.include(req, res);  
      out.println("<HR>");
      rd.include(req, res);
      out.close();
   }
}
//----------------------------------------------------------------------------

 

// 파일명 : ForwardTestServlet3.java--------------------------------------------------
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ForwardTestServlet3 extends HttpServlet {
   protected void doGet(HttpServletRequest req,  HttpServletResponse res)    
                                   throws ServletException, IOException {
      res.setContentType("text/html; charset=EUC-KR");
      PrintWriter out = res.getWriter();
      out.println("<HTML><HEAD><TITLE>forward 예제</TITLE>");
      out.println("</HEAD><BODY><H3>ForwardTestServlet1의 수행 결과
                                          </H3>");
      out.println("</BODY></HTML>");  
      ServletContext context = getServletContext().getContext("/");//다른 web app로 포워드시에는 위에하고 다르게 경로 설정
      RequestDispatcher rd = context.getRequestDispatcher("/index.jsp");
      rd.forward(req, res);
      out.close();
   }
}

//-----------------------------------------------------------------------------------

 

 

ex_0910.txt

 

ex_0913.txt

 

ex_0915.txt

 

9차시.pdf