菜鸟学Android笔记(三十四):实现请求转发和请求包含
来源:互联网 发布:忘记wi-fi网络连接密码 编辑:程序博客网 时间:2024/06/07 04:07
1、什么是请求转发?
指将原页面的request,response对象传入新的页面,这样新旧页面拥有相同的request和response对象,一次请求一次响应
两种常见的请求转发的语句:
this.getServletContext().getRequestDispatcher("").forward(request,response);
request.getRequestDispatcher("").forward(request,response);
下面实现如何从Demo7转发到Demo8
Demo7的代码
package com.java.request;import java.io.File;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Demo7 extends HttpServlet{public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.getWriter().write("from demo7");request.getRequestDispatcher("/java/request/Demo8").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
Demo8的代码
package com.java.request;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Demo8 extends HttpServlet{public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.getWriter().write("from demo8");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}注意:
请求转发是希望将请求交给另外一个资源执行,所以应该保证只有最后真正要执行的资源才能够输出数据,所以:
*请求转发时,如果已经有数据被写入到了response的缓冲区,但是这些数据还没有被发送到客户端,则请求转发时,这些数据将会被清空.但是清空的只是响应中的实体内容部分,头信息并不会被清空.
*而请求转发时已经有数据被打给了浏览器,那么再进行请求转发,不能成功,会抛出异常,原因是响应已经结束了,再转发交给其他人没意义了
*在最终输出数据的Servlet执行完成后,response实体内容中的数据将会被设置为已提交的状态,再往里写数据也不会起作用
-------使用以上三条,就保证了最终只有一个Servlet能够向浏览器输出数据,所以
*一个Servlet里两次请求转发也是不可以的,一次请求交给两人处理自然也是不行.
这是什么意思?
我的理解是:
1、假如这一行代码后面还有另一行代码:
request.getRequestDispatcher("/java/request/Demo8").forward(request, response);
request.getRequestDispatcher("index.jsp").forward(request, response);这样是会报错的,因为他违反了一次请求一次响应的原则
2、下面Demo7的代码是不会显示的浏览器的,因为他已经被清空了
response.getWriter().write("from demo7");
二、什么是请求包含
从上面的最后一条,可以看出,有些数据已经被清空了,但我们希望它能够一起输出来,这就需要请求包含了
将下面的改为:
request.getRequestDispatcher("/java/request/Demo8").forward(request, response);
request.getRequestDispatcher("/java/request/Demo8").include(request, response);
这个时候就会输出:
from demo7 from demo8
这有什么作用呢?听说是用于页面布局?嘿嘿,我也没学到,可以继续看下去
三、请求转发和请求重定向
下面的区别是抄的,先看看,还没有消化:
三种资源处理方式的区别
请求重定向
response.sendRedirect();
请求转发
request.getRequestDispatcher().forward();
请求包含
request.getRequestDispatcher().include();
请求重定向和请求转发的区别:
请求重定向地址栏会发生变化.请求转发地址栏不发生变化.
请求重定向两次请求两次响应.请求转发一次请求一次响应.
如果需要在资源跳转时利用request域传递域属性则必须使用请求转发
如果希望资源跳转后修改用户的地址栏则使用请求重定向
如果使用请求转发也可以重定向也可以,则优先使用请求转发,减少浏览器对服务器的访问次数减轻服务器的压力.
- 菜鸟学Android笔记(三十四):实现请求转发和请求包含
- 请求转发和请求包含
- 请求转发和请求包含
- 请求转发和包含
- 请求转发和包含
- javaweb之请求转发和请求包含
- 请求转发和请求包含 相关细节
- 重定向,请求转发和请求包含
- javawebday24(请求转发和请求包含)
- Servlet 实现包含外部文件和转发请求
- HTTP 请求转发、重定向和包含
- 请求重定向、请求转发、请求包含
- 请求重定向,请求转发,请求包含
- 请求重定向、请求转发、请求包含
- 请求重定向|请求转发|请求包含
- JSP中的请求转发和请求包含小解
- 请求转发和请求包含原理细解
- Servlet请求转发与包含
- iOS --- Objective-C中的内存管理
- Cocos2d-x 3.0坐标系详解
- android ListView几种重要属性
- 为什么选择做硬件而不是吃香的软件?
- Digital Booklet - Taylor Swift Karao-pdf
- 菜鸟学Android笔记(三十四):实现请求转发和请求包含
- The-Swift-Programming-Language-pdf
- iOS游戏框架Sprite Kit基础教程——Swift版上册第二章-pdf
- iOS游戏框架Sprite Kit基础教程——Swift版上册第一章-pdf
- The Swift Programming Language中文完整版(CocoaChina精校)-pdf
- 1315 摆花 2012年NOIP全国联赛普及组
- servlet跳转(RequestDispatcher)的获取
- jquery知识点总结
- 计算机工作面试题杂烩