jsp05 response跳转

本文详细介绍了JSP中的响应跳转,包括客户端跳转(重定向)和服务器端跳转(转发),讲解了response.sendRedirect、<jsp:forward>以及RequestDispatcher的区别。重定向会在所有代码执行后改变URL并跳转,而转发则在地址栏URL不变的情况下进行内部跳转。服务器端跳转在同一次请求中,数据可以共享,而客户端跳转会有两次请求,数据无法共享。

response

setHeader

  1. 服务器执行response.setHeader("refresh","1") ;
  2. 设定HTTP协议头,要求浏览器每隔一秒后刷新一次;
  3. 服务器把静态代码和动态结果放到HTTP协议体中;
  4. HTTP协议返回到浏览器进行结果显示;

  1. 服务器执行 response.setHeader("refresh","2;URL=welcome.jsp")方法
  2. 设定 HTTP协议头,要求浏览器两秒后自动发送请求访问welcome.jsp;
  3. 服务器把静态代码和动态结果放到HTTP协议体中;
  4. HTTP协议返回到浏览器
  5. 浏览器自动发送请求访问welcome.jsp进行结果显示

sendRedirect

  1. 服务器执行 response.sendRedirect("responseDemo04.jsp?id=ITCX") ;)方法
  2. 设 定HTTP协议头,要求浏览器零秒后自动发送请求访问 responseDemo04.jsp并传递参数id=ZTE;
  3. 服务器把静态代码和动态结果放到HTTP协议体中;
  4. HTTP协议返回到浏览器
  5. 浏览器零秒后自动发送请求访问responseDemo04.jsp进行结 果显示,地址栏显示的是responseDemo04.jsp

客户端跳转

  1. 使用href超链接标记
  2. 提交表单
<form name="form" method="post" action="page2.jsp">
              <input type="submit" value="跳转1">
          </form>
  1. Javascrip事件
    <input type="button" value="跳转2" onclick="next()">
        <script type="text/javascript">
              function next(){
                  window.location = "page2.jsp";
              }
         </script>
  1. 使用response对象     (客户端跳转)(重定向)
    <%  response.sendRedirect("page2.jsp"); %>         //sendRedirect()可以带参数传递,后面应该紧跟一句return
    <%   response.setHeader("Refresh", "1;url=page2.jsp"); %>  //1秒后,刷新,并跳到,page2.jsp页面

服务器端跳转

  1. 使用forward动作标记   (服务器端跳转)(转发)
     jsp自带的forword标签来实现跳转

<jsp:forward page="page2.jsp" />

  1. 使用RequestDispatcher类 (服务器端跳转)(转发)
    <% request.getRequestDispatcher("page2.jsp").forward(request, response);%>

两种跳转的区别

<jsp:forward page=""/>
地址栏不改变跳转 —— 服务器端跳转
执行到跳转语句后无条件立刻跳转 —— 之后的代码不再被执行
注意:如果使用forward跳转,则一定要在跳转之前释放掉全部的资源
使用forward时,request设置的属性(setAttribute)依然能保留在下一 个页

response.sendRedirect(“地址”) ;
地址栏改变跳转 —— 客户端跳转
所有代码执行完毕之后再跳转
不能保存request属性 —— 地址改变了,客户端发新请求跳转
通过对URL地址的重新传递参数

response重定向和forward跳转和RequestDispatcher的区别

(1) response重定向(客户端
    执行完页面的所有代码,再跳转到目标页面。
    跳转到目标页面后,浏览器地址栏中的URL会改变。
    在浏览器端重定向。
    可以跳转到其它服务器上的页面,response.sendRedirect(“http://www.baidu.com”)

(2) forward跳转 (服务器端
    forward动作标记之后的代码,不再执行,直接跳转到目标页面。
    跳转到目标页面后,浏览器地址栏中的URL不会改变。
    在服务器端重定向。
    无法跳转到其它服务器上的页面。
    指定目标页面时,既可以使用绝对路径,也可以使用相对路径。

(3) RequestDispatcher跳转(服务器端
    执行完所有代码,包括RequestDispatcher之后的所有代码,再跳转到目标页面。
    跳转到目标页面后,浏览器地址栏中的URL不会改变。
    在服务器端重定向。
    无法跳转到其它服务器上的页面。
    指定目标页面时,只能使用绝对路径。


服务器端跳转与客户端浏览器的跳转 本质区别是请求次数的不同

  • 在同一次请求中
    • 服务器跳转 请求只有一次 所以内部跳转 而且数据可以共享
    • 客户端跳转 请求是两次 所以可以跳转至外部(但必须仔细到http://才可以跳出去) 而且数据无法共享
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值