Servlet--dispatcher的include和forw
2020-05-14 本文已影响0人
轻云绿原
1:获取Dispatcher
req.getRequestDispatcher("/other") //'/other'是URI
2:forward 和 include
- forward:
相当于跳转到另一个页面,除了保留response里的header外,其它的都不保留(即使,设置了也没用)
主Servlet
@WebServlet("/dispatch")
public class DispatchAndIncludeTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setHeader("PPF","dispatch 0");// 有用
resp.setHeader("PPFTest","123"); // 有用
resp.getWriter().println("dispatch 0");// 没用
RequestDispatcher dispatcher = req.getRequestDispatcher("/dispatch1");
dispatcher.forward(req,resp);
resp.getWriter().print("dispatch 0 after"); // 没用
}
}
目标Servlet
@WebServlet("/dispatch1")
public class DispatchAndIncludeTest1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setHeader("PPFDispatch1","nothing");//有用
resp.setHeader("PPFTest","456");// 有主的header一样时,会覆盖主的header
resp.getWriter().print("dispatch1");// 有用。
}
}
- include:
字面意思一样,包含和另一个URI的内容,除了header。这个对于代码重用非常有用。比如,多个页面有相同的头部。只要把头部放在一个URI里,其它地方只要include这个URI就可以了。
主Servlet
@WebServlet("/dispatch")
public class DispatchAndIncludeTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setHeader("PPF","dispatch 0");// 有用
resp.setHeader("PPFTest","123"); // 有用
resp.getWriter().println("dispatch 0");// 有用
RequestDispatcher dispatcher = req.getRequestDispatcher("/dispatch1");
dispatcher.include(req,resp);
resp.getWriter().print("dispatch 0 after"); // 有用
}
}
目标Servlet
@WebServlet("/dispatch1")
public class DispatchAndIncludeTest1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setHeader("PPFDispatch1","nothing");//没用
resp.setHeader("PPFTest","456");// 没用
resp.getWriter().print("dispatch1");// 有用。
}
}
2:forward 和 include 之后,主次URI的数据共享
forward和include怎么来传递参数??
可以用request来传递参数
req.setAttribute("key","value");
req.getAttribute("key");