


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第17RequestDispatcher对象,ServletAPI提供了把请求转发到其他服务器资源或者从其他服务器资源内容的标准方法。下面详细介绍RequestDispatcher,以及如何进行请求转发,最后,我们还会简要分析一下请求转发与HTTP重定向的区RequestDispatcherRequestDispatcher对象允许将请求转发到其他服务器资源,还允许将其他服务器资源生成的输入引入到servlet内部。这个对象唯一的作用就是请求转发和资源,所以它只有两个方法:forward()include()。publicvoidforward(ServletRequestrequest,ServletResponseresponse)throwsforward()方法允许用户把请求转发到另一个服务器资源上publicvoidforward(ServletRequestrequest,ServletResponseresponse)throws由于转发会把所有控制权传递给新资源,所以不应该通过检索输出流句柄(getWriter()getOutputStream())HTTP头(setHeader()setStatus())的方法来中断当前servlet同客户端的通信。因为在请求转发之前,可能还要做一些处理。中断servlet与客户端通信的工作应该由请求转发的目标资源来完成。publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsStringpath="/targetServlet?custid=1234";ServletContextcontext=getServletContext();RequestDispatcherrd=publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsStringpath="/targetServlet?custid=1234";ServletContextcontext=getServletContext();RequestDispatcherrd=context.getRequestDispatcher(path);}RequestDispatcher对象的forward()方法把对当前请求传递给path变量所指定的servlet。不像include()方法,控制权不会返回转发请求的servlet,forward()方一直把控制权传递给目servletservlet生成响应。注意,请求和响应对象(requestresponse)servletservlet可以从请求中从上面的代码中可以看到这里指定的URL路径中包含了一个查询字符串“custid=1234servletservletrequest对象的getParameter()方法该信息。但是,我们还有更好的方法传递该信息:ServletRequest对象的setAtttribute()方法可以在request对象内部任意多个Java对servletrequestgetAttribute()方法获取。另外还可以使用getAttributeNames()方法确定所有在请求中的对象的名字。publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsCustomercust=newCustomer("1234");Stringpath="/targetServlet?custid=1234";ServletContextcontext=getServletContext();RequestDispatcherrd=context.getRequestDispatcher(path);}publicvoiddoGet(HttpServletRequestpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsPrintWriterout=Customercust=(Customer)request.getAttribute("customer"); }publicvoidinclude(SservletRequestrequest,ServletResponseresponse)throwsinclude()方法允许在调用publicvoidinclude(SservletRequestrequest,ServletResponseresponse)throwspublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsPrintWriterout=Customercust=newCustome("1234");servletservlet可以改变响应的标题,的servlet不能改变相应的状态或设置HTTP标题。相反,设置适当的状态码和标题是调用servlet的职责。不像forward()方法,一旦被的servlet完成了本身的工作,控制权将会返回调用servlet,于是被的servlet的输出就被添加到调用servlet生成的响应中。虾面这个示例讲述publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsPrintWriterout=Customercust=newCustome("1234");StringStringpath=ServletContextcontext=getServletContext();RequestDispatcherrd=context.getRequestDispatcher(path); o,youracount:");}有时被的servletservlet的相关信息,而不用分析原始的请求的相关信息,那么被的servlet可以检索下面表17-1列出的这些属性来判断它是被哪个servlet调用的(可以使用request对象的getAttribute()方法。表17-1执行的servlet的相关属性信include()servlet被调用include()方法的servlet请求的接在servletinclude()servlet就像forward()方法一样,include()方法把氢气和响应对象都传给被的servlet,以便它可以对请求进行处理并生成相应,改响应包含在调用servlet的响应中。得到RequestDispatcherRequestDispatcher对象的两个方法,分别用来转发请求和引用资源,下面要介绍获得RequestDispatcher对象的3种方法。javax.servlet.servletRequestgetRequestDispatcher()方法该方法可以被request调用,语法格式如下: request.getRequestDispatcher(String pathServletpath以“/”开javax.servlet.servletContextgetRequestDispatcher()方法该方法被context调用,语法格式如下: context.getRequestDispatcher(Stringpath) 其中path必须以“/”开头,路径相对于当前的Servlet上下文。可以调用javax.servlet.servletContextgetNamedDispatcher()方法该方法也是被context调用,语法格式如下: context.getRequestDispatcher(String <?xmlversion="1.0"<?xmlversion="1.0"<!DOCTYPEweb-appPUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.2//EN" <web-<servlet-name>FirstServlet</servlet-<servlet-class>org.javaresearchredirecttest.ServletOne</servlet-<servlet-name>SecondServlet</servlet-<servlet- redirecttest.ServletTwo</servlet-<servlet- <servlet-name>FirstServlet</servlet-<url-pattern>/servlet/firstservlet/</url-</servlet- <servlet- <servlet-name>SecondServlet</servlet-<url-pattern>/servlet/secondservlet/</url-</servlet- </web-其中定义了两个Servlet,名字分别为FirstServlet和SecondServlet,对应的类分别org.javaresearch.redirecttest.ServletOneorg.javaresearch.redirecttest.ServletTwo。可rd.forward(request,response);使用(1)firstservletrd.forward(request,response);ServletRequestDispatcherrd=getServletContext().getRequestDispatcher("/servlet/secondservlet");rd.forward(request,response);RequestDispatcherrd=getServletContext().getRequestDispatcher("/servlet/secondservlet");rd.forward(request,response);使用(3)web.xmlServlet,RequestDispatcherrd=RequestDispatcherrd=getServletContext().getNamedDispatcher("SecondServlet");rd.forward(request,response);Web3种:请求转发、UTRL重定向和包含,前面我们详细请求转发允许把请求转发给同一应用程序中的其他ebebSevletHTTP的目标组件,目标组件执行具体的请求处理具体的请求处理操作,并生成响应结果。17-1所示:17-1Servlet类使用javax.servlet.RequestDispatcher.forward()方法来转发它所收到的HTTP请求。转发目标组件将处理该请求并生成响应结果,或者将请求继续转发到另ServletRequestServletResponse对象被传递给转发目标组件,Web应用中的组件,而不能转发给其他Web应用的组件。JSP页面中,可以使用RequestDispatcherrd= JSP页面中,可以使用RequestDispatcherrd= //ForwardtorequestedURLrdforward(request,response);<jsp:forward requestURL请求重定向类似于请求转发,但也有一些重要区别:Web组件可以将请求重定向URLURL。重定向的源组件和目标组件之间不共用HttpServletRequestrequest17-217-2URL如果当前应用的Servlet组件要把请求转发给URL——HttpServletResponsesendRedirect()方法向浏览器返回包含重定向的信息,浏览器根据这一信息迅速发出一个新HTTP请求,请求重定向目标组件。允个eb组件来自同一个应用中其它eb组件的输出数据,并使用被的数据来创建响应结果。这种技术通常用于模板处理器,它可以控制网页的布局。模板中每个页面区域的内容来自不同的URL术能够为应用程序提供一致的外观和感觉。包含关系的源组件和目标组件共用同一个HttpServletRequestrequest17-3所示:17-3RequestDispatcherrd=req.getRequestDispatcher("/header.jsp");rd=Servlet类使javax.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 制作拍摄合同范本
- 债务变更合同范本
- 代销汽车合同范本
- 二手车合同范本商家自己写
- 分阶段付款合同范本
- 华帝橱柜合同范本
- 农村建房主体合同范本
- 单位门合同范本
- 医疗美容转让合同范例
- 产品设计开发合同范本
- CJJ2-2008城市桥梁工程施工与质量验收规范
- 病媒生物防治操作规程
- 2024年社会工作者《社会工作实务(中级)》考试真题必考题
- 德育教育研究课题申报书
- (高清版)JTG 3810-2017 公路工程建设项目造价文件管理导则
- 《煤矿重大事故隐患判定标准》试题及答案
- 《ISO31000:2024风险管理指南》指导手册(雷泽佳译2024-04)
- 学前儿童表演游戏的组织与指导(学前儿童游戏课件)
- 建筑用真空陶瓷微珠绝热系统应用技术规程
- (高清版)DZT 0214-2020 矿产地质勘查规范 铜、铅、锌、银、镍、钼
- 《拒绝校园欺凌 防霸凌主题班会》课件
评论
0/150
提交评论