首页 新闻 会员 周边

servelt实现页面跳转

0
[已解决问题] 解决于 2020-10-25 14:07

今天上课被老师提问,问servelt实现页面跳转的方法一共有几种呀?异同又分别是什么呀?
然后我回答的是有俩种:
第一种:内部转发 属于服务器内部的动作,对于用户来说只请求了一次,在服务器内部做了两 次操作(服务A请求了服务B)对于用户用户来说并不知情,所以在网址上---URL 并不会发生改变
第二种:重定向 属于浏览器客户端的动作,对于用户来说请求了两次,服务器也给用户响应了两次,所以在网址上URL----会发生改变。
然后老师说让我接着说,我瞬间懵,求大神补充!!!!

忘记她的主页 忘记她 | 菜鸟二级 | 园豆:224
提问于:2020-10-22 13:05
< >
分享
最佳答案
0

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)<jsp:forward page=""/>
跳转后浏览器地址栏不变,但是只能跳转到当前主机下,此语句后面的执行语句执行完成后才会跳转。

三、请求转发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内的对象将无法使用。

奖励园豆:5
一切至于创新 | 初学一级 |园豆:182 | 2020-10-22 15:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册