drp——Web组件交互的转发、包含
来源:互联网 发布:微单哪款好 最好知乎 编辑:程序博客网 时间:2024/06/06 15:54
一、Web组件协作的两种方式
Servlet对象由Servlet容器创建,并且Servlet对象的service()方法也由容器调用。一个Servlet对象可否直接调用另一个Servlet对象的service()方法呢?答案是否定的,因为一个Servlet对象无法获得另一个Servlet对象的引用。
Web应用在响应客户端的一个 请求时,有可能响应过程很复杂,需要多个Web组件共同协作,才能响应结果。尽管一个Servlet对象无法直接调用另一个Servlet对象的service()方法,但是Servlet规范为Web组件之间的协作提供了两种途径。
1、请求转发
Servlet(源组件)先对客户请求做一些预处理操作,然后把请求转发给其它Web组件(目标组件)来完成包括生成响应结果在内的后续操作。
2、包含
Servlet(源组件)把其它Web组件(目标组件)生成的响应结果包含到自身的响应结果中。
3.请求转发与包含的共同点:
(1)源组件和目标组件处理的都是同一个客户请求,源组件和目标组件共享同一个ServletRequest对象和ServletResponse对象
(2)目标组件都可以为Servlet、jsp、HTML文档
(3)都依赖javax.servlet.RequestDispatcher接口
二、javax.servlet.RequestDispatcher接口
它表示请求分发器。存在两个方法
1.forward()方法:把请求转发给目标组件,声明如下:
Public void forward(ServletRequest request,ServletResponse response)throws ServletException,java.io.IOException
2.include()方法:包含目标组件的响应结果,声明如下:
Public void include(ServletRequet request,ServletResponse response)throws ServletException,java.io.IOException
说明:
1.当Servlet源组件调用RequestDispatcher时,都要把当前的ServletRequest对象和ServletResponse对象作为参数传给它的forward()或Include()方法。这时的源组件和目标组件共享同一个ServletRequest对象和ServletResponse对象。
2.Servlet可通过两种方式得到ResquestDispatcher对象
(1)调用ServletContext的getRequestDispatcher(String path)方法,path参数指定目标组件的绝对路径。
(2)调用ServletRequest的getRequestDispather(String path)方法,path参数指定目标组件的路径。
三、实例
1.请求转发
Public class CheckServlet extends GenericServlet{/**响应客户请求Public void service(ServletRequest request,ServletResponse response)throws ServletException,IOException{//读取用户名String username = request.getParameter("username");String message = null;If(username == null){Message="Please input username.";}else{Message="Hello," + username;}//在request对象中添加msg属性request.setAttribute("msg",message);//把请求转发给OutputServlet//使用ServletContext,path路径为绝对路径ServletContext context = getServletContext();RequestDispatcher dispatcher = context.getRequestDispatcher("/output");//使用ServletRequest,path路径可以为绝对路径,也可以为相对路径//RequestDispatcher dispatcher = request.getRequestDispatcher("output");PrintWrite out = response.getWriter();out.println("Output from CheckServlet before fowrwarding request.");System.out.println("Output from CheckServlet before forwarding request.");Dispatcher.forward(request,response);out.println("Output from CheckServlet after forwarding request.");System.out.println("Output from CheckServlet after forwarding request.");}}Public class OutputServlet extends GenericServlet{Public void service(ServletRequest request,ServletResponse response)Throws ServletException,IOException{//读取CheckServlet存放在请求范围内的消息String message = (String)requet.getAttribute("msg");PrintWriter out = response.getWriter();out.println(message);out.close();}}
2.包含
Public class MainServlet extends HttpServlet{Public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{//设置HTTP响应的正文的数据类型Response.setContentType("text/html");//输出HTML文档PrintWriter out = response.getWriter();out.println("<html></head><title>MainServlet</title></head>");out.println("<body>");ServletContext context = getServletContext();RequestDispatcher headDispatcher = context.getRequestDispatcher("/header.htm");RequestDispatcher greetDispatcher = context.getRequestDispatcher("/greet");RequestDispatcher footerDispacher = context.getRequestDispatcher("footer.htm");//包含header.htmheaderDispatcher.include(request,response);//包含GreetServlet输出的HTML文档greetDispatcher.include(request,response);//包含footer.htmfooterDispatcher.include(request,response);out.println("</body></html>");//关闭输出流out.close();}}
说明:MainServlet类把header.htm的内容、GreetServlet生成的响应正文,以及foot.htm的内容都包含到自己的响应结果中,也就是说,MainServlet返回给客户的HTML文档是有MainServlet本身、header.htm、GreetServlet,以及foot.htm共同产生的。
总结:
Web组件的协作中不论转发、包含都是借助分发器ResquestDispatcher来实现,涉及到的目标组件,可以是HTML、JSP或者Servlet。Servlet容器每次接收到一个客户的请求,都会创建一个针对于ServletRequest、ServletResponse对象,然后把这两个对象作为参数传给响应的Servlet的服务方法。当容器把本次响应结果返回给客户,ServletRequest对象和ServeltResponse对象就结束生命周期。
- drp——Web组件交互的转发、包含
- drp—包含
- 【Java.Web】Servlet —— 请求的转发和包含
- DRP——重定向与转发
- Web组件的三种关联关系(请求转发,重定向,包含)
- JSP - WEB组件关系(请求转发/重定向/包含)
- DRP(三)——Servlet请求转发
- 【DRP】转发与重定向的区别
- Java Drp项目实战——Web应用服务器
- [drp 7]转发和重定向的区别
- drp——servlet
- 【DRP】——servlet
- Ajax的DropDrowList应用——改变一个drp会引起另一个drp的值改变
- Web组件之间存在三种关联关系(转发,重定向,包含)http://ihuangweiwei.iteye.com/blog/1217776
- DRP-Web开发的四个范围
- 利用TDC组件实现对WEB页面的交互操作
- 利用TDC组件实现对WEB页面的交互操作
- Java Drp项目实战——Drp知多少
- 机器学习实战——预测数值型数据:回归
- CPC/CPM/CPA/CPS分别代表什么意思
- JSON.stringify 语法实例讲解
- 致我终将逝去的青春
- vim使用技巧
- drp——Web组件交互的转发、包含
- CentOS-6.3安装配置JDK-8
- Hibernate操作Blob数据
- register_chrdev()与register_chrdev_region()
- 虚函数与虚继承寻踪
- Java基础知识之系统命令调用、序列化、JDO、匿名内部类
- JQuery 根据字节数截取字符串()
- String,StringBuffer与StringBuilder的区别??
- sso 安全方案