▶ 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();
}
}
//-----------------------------------------------------------------------------------