博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java RequestDispatcher 详解
阅读量:6257 次
发布时间:2019-06-22

本文共 2391 字,大约阅读时间需要 7 分钟。

RequestDispatcher 让两个servlet相互通信成为可能,就像是浏览器发送request请求一样。所以我们可以从HttpRequest中获取到RequestDispatcher对象

protected void doPost(HttpServletRequest request, HttpServletResponse response)        throws ServletException, IOException {  RequestDispatcher dispatcher=request.getRequestDispatcher("/servlet2");}

通过上面的代码,我们能获取到一个映射到/servlet2(URI) 的Servlet的 RequestDispatcher。

然后可以使用include()或者forward()方法来调用RequestDispatcher

dispatcher.forward(request, response);dispatcher.include(request, response);

request.getRequestDispatcher和response.sendRedirct区别

  • getRequestDispatcher是服务器内部跳转,地址栏信息不变,只能跳转到web应用内的网页。
  • sendRedirect是页面重定向,地址栏信息改变,可以跳转到任意网页。
getRequestDispatcher实例:
request.setAttribute("lover", "fantj");     request.getSession().setAttribute("lovered", "fantj");       request.getRequestDispatcher("/third?name=fantj").forward(request, response);     或     request.getRequestDispatcher("third?name=fantj").forward(request, response);     或     this.getServletContext().getRequestDispatcher("/third?name=fantj").forward(request, response);
//ThirdServlet     PrintWriter out = response.getWriter();     String name = request.getParameter("name");     out.println(request.getContextPath()+"

"); out.println("name="+name+"

"); out.println("lover="+request.getAttribute("lover")+"

"); out.println("lovered="+request.getSession().getAttribute("lovered")+"

");

结果显示,地址栏信息仍为不变),这三种方式都可以传值到第二个Servlet。

sendRedirct实例
//SecondServlet   request.setAttribute("lover", "fantj");     request.getSession().setAttribute("lovered", "fantj");       response.sendRedirect("third?name=fantj");     或     response.sendRedirect(request.getContextPath()+"/third?name=fantj");
//ThirdServlet     PrintWriter out = response.getWriter();     String name = request.getParameter("name");     out.println(request.getContextPath()+"

"); out.println("name="+name+"

"); out.println("lover="+request.getAttribute("lover")+"

"); out.println("lovered="+request.getSession().getAttribute("lovered")+"

");

结果显示,地址栏信息变为(发生改变),只有request.getAttribute("lover")获取不到值,session范围及url路径后的传值在第二个Servlet都可以获取到值。

总结

其实我们好好想想,他们需要建立的对象不同,一个是request一个是response。

request处理可以想象成帮用户再补充一些请求(根据自己项目的业务逻辑),所以它应该要获取到所有request发送过来的数据,并且让用户感觉不到我们有帮他处理一些事情(因为地址栏信息不变)。

response可以说是响应给用户一个新的东西,它不会在意request给它发送了什么参数,除非request把数据写在同一个容器下的session中或者url中。这也是response.sendRedirct可以给用户返回容器以外的URL(比如)的原因。

转载地址:http://xwisa.baihongyu.com/

你可能感兴趣的文章
状态者模式 c#
查看>>
最长回文子串
查看>>
Node-mongodb链接数据库函数的封装
查看>>
在CentOS上简单安装tengine
查看>>
c语言——字符串变量、函数
查看>>
解决Type safety: The expression of type List needs
查看>>
POJ 3233 (矩阵)
查看>>
20161220
查看>>
11月27日
查看>>
Java位运算符
查看>>
智能手表ticwatch穿戴体验
查看>>
暑假第五周总结(2018.8.6-8.12)
查看>>
MFC下拉框Combo Box
查看>>
TCP带外数据读写
查看>>
uni-app采坑记录
查看>>
TP方法中打印地址栏中所有的参数:
查看>>
这是一个蒟蒻的计划……QAQ
查看>>
设置局域网共享文件不需要用户名密码
查看>>
raft--分布式一致性协议
查看>>
Solidity notes
查看>>