在说请求转发和重定向之前,得了解下JSP九大内置对象中的response和request

    response:将服务器端数据发送到客户端,可通过在客户端浏览器中显示,用户浏览页面的重定向以及在客户端创建Cookies等实现;

       重定向:response.sendRedirect(url) (把响应发送到另一个指定的页面进行处理)。

     request:可以对在客户请求中给出的信息进行访问,包含了所有有关当前浏览器的请求信息。

       请求转发:request.getRequestDispatcher(url).forward(request,response)。

差异:

      1. 请求的次数:

            重定向比请求转发多请求一次,下面以例子说明。

如果现在有一个需求:A首先向B发出请求,然后B再向C发出请求。

先看重定向方式(B->C):首先A向B发出请求(第一次),然后B通过重定向的方式跳转到C,但不会直接向C发出请求,而是先返回到A,通过A向C发出请求(第二次),具体看下面这张图。

然后看请求转发方式(B->C):首先A向B发出请求(第一次),然后B通过请求转发的方式跳转到C,这就不会通过A来跳转,而是B自己直接向C发出请求,具体看下面这张图。

      2.地址栏是否改变:(还是以上面的A.jsp,B.jsp,C.jsp为例)

如果现在A要请求B,然后B要请求C。

先看重定向方式:首先在浏览器地址栏输入http://localhost:8080/test/A.jsp  (8080是我自己的端口号,test是工程名)

然后A会跳转到B,此时的地址就是http://localhost:8080/test/B.jsp

              最后由B跳转到C,地址为http://localhost:8080/test/C.jsp  (第二次请求,A跳转到C,所以地址会发生改变)

再看请求转发方式:首先在浏览器地址栏输入http://localhost:8080/test/A.jsp

然后A会跳转到B,此时的地址就是http://localhost:8080/test/B.jsp

               最后由B跳转到C,地址为http://localhost:8080/test/B.jsp (仅仅是服务器的内部跳转,所以地址会不会改变)

      

  3.是否保留第一次请求时的数据:

                 再说保留数据之前,先复习一下4种范围对象:pageContext,request,session,application(范围越来越大,造成的性能损耗也越大,所以尽量使用最小的)

这四种范围对象有几个很重要的共同的方法:(无论是重定向还是请求转发都要使用到 setAttribute来赋值 和 getAttribute来取值,只不过前者是session调用并且用session来取得数据,后者是request调用并且用request取得数据)

  • Object getAttribute(String name);//根据属性名返回属性值,注意返回类型
  •         void setAttribute(String name,Object obj);//根据属性名设置属性值,如果没有改属性,则新建一个属性,然后赋值
  • void removeAttribute(string name);//根据属性名删除属性值
  1.          pageContext:仅仅是当前页面有效(只要跳转了,就失效,null),下方的代码就会输出world

     1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    3 <html>
    4 <head>
    5 <title>test</title>
    6 </head>
    7 <body>
    8 <%
    9 pageContext.setAttribute("hello", "world");
    10 %>
    11
    12 <%=pageContext.getAttribute("hello")%>
    13 </body>
    14 </html>
  2.            request:同一次请求有效(比如请求转发,就是同一次请求,而重定向属于两次请求),下方的代码就是通过请求转发的方式传送数据,也就是说请求转发会保存数据(即使B.jsp再次跳转到其他页面,通过request还是可以取到数据)
     1 <!-- A.jsp -->
    2 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    4 <html>
    5 <head>
    6 <title>test</title>
    7 </head>
    8
    9 <body>
    10 <%
    11 request.setAttribute("hello", "world");
    12 request.getRequestDispatcher("B.jsp").forward(request,response);
    13 %>
    14
    15 </body>
    16 </html>
     1 <!-- B.jsp -->
    2 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    4 <html>
    5 <head>
    6 </head>
    7
    8 <body>
    9 <%=request.getAttribute("hello")%>
    10 </body>
    11 </html>

    但如果利用重定向的方式跳转到B.jsp,将不会把数据传过去,但如果还是想用重定向,可以利用下面这个内置对象session

  3. session:同一次会话有效(只要浏览器不关,都属于同一次会话,无论是重定向还是请求转发,都有效;关闭或切换浏览器后无效;),session是存在于服务器端的,所以如果使用重定向的方式跳转,可以利用session来获取数据(并不是重定向传了数据,而是获取了服务器端的数据)
     1 <!--A.jsp  -->
    2 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    4 <html>
    5 <head>
    6 <title>test</title>
    7 </head>
    8
    9 <body>
    10 <%
    11 session.setAttribute("hello", "world");
    12 response.sendRedirect("B.jsp");
    13 %>
    14 </body>
    15 </html>
     1 <!-- B.jsp -->
    2 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    4 <html>
    5 <head>
    6 </head>
    7 <body>
    8 <%=session.getAttribute("hello")%>
    9 </body>
    10 </html>
  4. application:全局变量,整个项目运行期间都有效(浏览器切换仍然有效,但关闭浏览器后在启动浏览器是无效的),但只对当前项目有效(其他项目是无法访问的)此处不贴代码。

该笔记如有错误,还请斧正。

JSP中的请求转发与重定向的更多相关文章

  1. Servlet中的请求转发和重定向

    跳转和重定向 有的时候客户端请求到达服务端后需要对请求重新转发到其它Servlet甚至别的服务器,这就需要跳转和重定向. 区别 一般来说,跳转是服务器内部跳转,例如将请求从一个Servlet转发给另外 ...

  2. jsp servlet 的 请求转发和重定向

    以前对于servlet和servlet/jsp之间的跳转路径问题感到很迷惑,今天亲自动手实验了一把,总结如下: servlet已经是项目根路径下面的资源了,所以servlet跳转的时候,在跳转路径上面 ...

  3. spring mvc 请求转发和重定向(转)

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

  4. spring mvc 请求转发和重定向

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

  5. HttpServletRequest 接口、HttpServletResponse 接口、请求转发与重定向

    上篇文章我们讲了servlet的基本原理,这章将讲一下剩余的部分. HttpServletRequest 接口 该接口是 ServletRequest 接口的子接口,封装了 HTTP 请求的相关信息, ...

  6. ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段

      ServletRequest 基本概念 JavaWeb中的 "Request"对象  实际为   HttpServletRequest  或者  ServletRequest, ...

  7. 04_web基础(六)之请求转发与重定向

    1.交互方式 Web组件之间跳转: 从AServlet 跳转到 BServlet. 三种类型: 1:请求转发(forward) 2:URL重定向(redirect) 3:请求包含(include) 3 ...

  8. jsp内置对象 转发与重定向的区别

    jsp 内置对象  转发与重定向的比较 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程. 与之相反,重 ...

  9. Spring MVC 3.0 请求转发和重定向

    首先看一下如何获得request对象.session对象: 普通的Controller类,示例代码如下: @Controller @RequestMapping(value = "user& ...

随机推荐

  1. CS5213设计HDMI转VGA带音频信号输出|CS5213方案|CS5213设计电路

    CS5213是一款用于设计HDMI转VGA音视频信号转换器方案,CS5213设计HDMI转VGA转换器或者转接线产品特点: 将完整的HDMI信号转换为VGA输出支持数字信号到模似信号的转换支持 HDC ...

  2. 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字“Hello Android”,并将应用程序的名称更改为“FirstApp”。

    需求说明: 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字"Hello Android",并将应用程序的名称更改为"Firs ...

  3. PostgresSQL客户端pgAdmin4使用

    1.说明 pgAdmin 4是一款为PostgreSQL设计的可靠和全面的数据库设计和管理软件, 它允许您连接到特定的数据库,创建表和运行各种从简单到复杂的SQL语句. 它支持的操作系统包括Linux ...

  4. html基础 字符实体 用于html中特殊符号的展示 比如:多个空格、代码展示

    结构:&+英文: 常见的字符实体  

  5. 初识python: 小练习 之 笔记本电脑开机指定时间之后自动拍照并发送邮件

    需求: 1.调用笔记本的摄像头,拍摄笔记本面前的照片:2.将照片发送给指定邮箱:3.发送邮件,提醒我们电脑已经开机,并附上笔记本拍摄的照片. 面向过程: #!/user/bin env python ...

  6. ON UPDATE CURRENT_TIMESTAMP请慎用

    大家好,我是架构摆渡人.这是实践经验系列的第七篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友. 今天给大家分享一个容易忽略的问题,正是因为容易忽略,所以才要重 ...

  7. 微信小程序base64图片保存到手机相册

    问题:base64图片不能直接用wx.saveImageToPhotosAlbum保存到手机相册 解决: 先用fs.writeFile写入本地文件,再wx.saveImageToPhotosAlbum ...

  8. Source Insight 4安装图文教程(附链接)

    Source Insight 4安装图文教程,附激活文件直链 下载链接:http://naturalporters.vicp.io/uploads/si4_kgen_unis.zip 直链没了,就用下 ...

  9. host解析

    首先了解一下什么是hosts文件: hosts是一个没有扩展名的系统文件,可以用记事本等文本编辑工具打开,起作用就是将一些常用的"网址域名"与其对应的"IP地址" ...

  10. RHCSA 第五天

    1. a.创建普通变量local_data=1并访问 [root@sss ~]#local_data=1 [root@sss ~]#echo local_data local_data [root@s ...