当前位置:网站首页>Servlet跳转到JSP页面,转发和重定向
Servlet跳转到JSP页面,转发和重定向
2022-08-05 05:19:00 【CrazyQiQi】
servlet跳转页面的方法:
跳转分为两部分,一部分发生在servlet,另一部分发生在JSP,JSP就是servlet,但是两者还是有部分差异。
Servlet:(跳转发生在doGet,doPost等方法里)
(1)redirect方式
response.sendRedirect(“/index.jsp”);页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于web应用中,如:response.sendRedirect(”http://www.baidu.com“);
跳转后浏览器地址发生变化,只能在url总带parameter或者放在session中,无法使用request.setAttribute来传递值。
(2)forward方式
request.getRequestDispatcher(“/index.jsp”).forward(request,response);页面的路径是对路径。forward方式只能跳转到本web应用中的页面上。跳转后地址栏不会发生变化。使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute
JSP:
(1)response.sendRedirect();
和servlet的response.sendRedirect()方式一样
跳转后浏览器地址栏会变化,如果要跳转到不同主机下,跳转后,此语句后面的语句,如同新开了线程,但是对response的 操作已经没有意义了;如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;
(2)response.setHeader(“Location”,”“);
跳转后浏览器地址栏发生变化,此语句后面的语句执行完成后才能发生调转
(3)跳转后浏览器地址栏不变,但是只能跳转到当前主机下,此语句后面的执行语句执行完成后才会跳转
请求转发RequestDispatcher.forward方法和响应(重定向)转发HttpServletResponse.sendRedirect方法的总结比较:
一、RequestDispatcher.forward方法只能将请求转发给同一个web应用中的组件,而HttpServletResponse.sendRedirect方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。如果传递给HttpServletResponse.sendRedirect方法的相对URL以”/”开头,它是相对于整个web站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以”/”开头,它是相对于当前web应用程序的根目录。
二、调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址重定向为目标URL;而调用RequestDispatcher.forward方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。
三、HttpServletResponse.sendRedirect方法对浏览器请求直接作出响应,响应的结果就是告诉浏览器重新发出对另一个URL的访问请求;RequestDispatcher.forward方法在服务器端内部发生了转发行为。
四、RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。对于同一个web应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并使用HttpServletRequest.setAttribute方法传递预处理结果,那就应该使用RequestDispatcher.forward方法。不同web应用程序之间的重定向,特别是要重定向到另一个web站点上的资源情况,都应该使用HttpServletResponse.sendRedirect方法。
五、无论哪种方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区已 经有了一些内容,这些内容将从缓冲区中清除。
重定向和请求转发有一个重要的不同:当使用请求转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。
————————————————
原文链接
边栏推荐
- 每日一题-寻找两个正序数组的中位数-0713
- 【Day8】Knowledge about disk and disk partition
- 网络布线与数制转换
- VLAN details and experiments
- Getting Started 11 Automatically add version numbers
- D39_向量
- [Paper Intensive Reading] Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation (R-CNN)
- TCP/IP四层模型
- Cocos Creator开发中的事件响应
- 调用TensorFlow Objection Detection API进行目标检测并将检测结果保存至本地
猜你喜欢
Getting Started 05 Using cb() to indicate that the current task is complete
入门文档05-2 使用return指示当前任务已完成
ACL 和NAT
VLAN详解及实验
【Day8】 RAID磁盘阵列
腾讯内部技术:《轩辕传奇》服务器架构演变
[Pytorch study notes] 8. How to use WeightedRandomSampler (weight sampler) when the training category is unbalanced data
【Day1】VMware软件安装
Unity中的GetEnumerator 方法及MoveNext、Reset方法
入门文档05 使用cb()指示当前任务已完成
随机推荐
【Day8】(超详细步骤)使用LVM扩容
你要找的cocos面试答案都在这里了!
入门文档03 区分开发与生产环境(生产环境才执行‘热更新’)
网站ICP备案是什么呢?
每日一题-删除链表的倒数第 N 个结点-0718
腾讯云消息队列CMQ
Apache配置反向代理
传输层协议(TCP3次握手)
调用TensorFlow Objection Detection API进行目标检测并将检测结果保存至本地
“元宇宙”是个啥?都有哪些大招?
UE5再次更新!扫描或手动建模面部模型可直接转为绑定好的Metahuman
C语言的一些小常识
Account and Permission Management
每日一题-单调栈
每日一题-正则表达式匹配-0715
什么是全栈设计师?
什么?CDN缓存加速只适用于加速静态内容?
Leetcode刷题——对链表进行插入排序
Getting Started 05 Using cb() to indicate that the current task is complete
添加新硬盘为什么扫描不上?如何解决?