美文网首页
Servlet--dispatcher的include和forw

Servlet--dispatcher的include和forw

作者: 轻云绿原 | 来源:发表于2020-05-14 10:36 被阅读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");
    

    相关文章

      网友评论

          本文标题:Servlet--dispatcher的include和forw

          本文链接:https://www.haomeiwen.com/subject/lviznhtx.html