100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 请求转发和响应重定向区别

请求转发和响应重定向区别

时间:2022-09-24 10:21:21

相关推荐

请求转发和响应重定向区别

请求转发:

request.getRequestDispatcher(URL地址).forward(request, response)

重定向:

response.sendRedirect(URL地址)

一、处理流程不同

请求转发:客户端发送一次请求,Servlet做出业务逻辑处理并调用forword()方法,把目标资源返回给客户端浏览器。

响应重定向:

客户端可能发送请求,Servlet做出业务逻辑处理,调用response.sendReadirect()方法,把要访问的目标资源作为response响应头信息发给客户端浏览器。客户端浏览器重新访问服务器资源xxx.jsp,此时响应服务和资源服务是不同的服务器,对服务器和资源的访问都是多次,服务器再次对客户端浏览器做出响应。

二、路径不同

针对html:以“/“开头,是相对当前web服务器的根目录,即tomcat;不以“/“开头,是相对当前web应用程序的根目录,如”chapter01“.

针对请求转发:以“/“开头,是相对当前web应用程序的根目录;不以“/“开头,是相对当前资源所在目录,如src的webapp。

针对重定向:以“/“开头,是相对当前web服务器的根目录;不以“/“开头,是相对当前web应用程序的文档根目录,如src的main目录。

三、客户端浏览器地址栏显示

request.getRequestDispatcher()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;服务器内部转发,整个过程处于同一个请求当中

response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址不在同一个请求。重定向,实际上客户端会向服务器端发送两个请求。

四、前一个页面的数据共享

请求转发可以通过request.setAttribute(), request.getAttribute()获取上一个页面的数据和状态信息,传递到转发页面

重定向是取不到request中的数据的,只能用session.seAttribute()。

五、forward()更加高效,但会出现表单的重复提交,所以在可以满足需要时,尽量使用RequestDispatcher.forward()方法。

六、结束点不同

RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法,当关掉这个页面或者在这个页面请求其他服务时(如点击链接),这个请求过程也结束了。

sendRedirect()是HttpServletResponse对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。

七、重定向可以跨域访问,可以申请站点外资源,而转发是在web服务器内部进行的,不能跨域访问。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。