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");
上一篇下一篇

猜你喜欢

热点阅读