失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Servlet转发forward和重定向response.sendRedirect()区别

Servlet转发forward和重定向response.sendRedirect()区别

时间:2023-12-09 06:10:47

相关推荐

Servlet转发forward和重定向response.sendRedirect()区别

转发(forward):浏览器地址不会改变,始终是同一个请求。执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址。forward是内部重定向。

重定向(sendRedirect):浏览器地址会改变,用两个请求。执行redirect时,服务器端告诉浏览器重新去请求地址。redirect是外部重定向。

1.转发

(1)地址栏不会改变。

(2)转发只能转发到当前web应用内的资源。

(3)在转发过程中,可以把数据保存到request域对象中。

转发过程:

客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在jsp中都能取出来,因此,jsp能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。

用<jsp:forward page=""/>,它是直接在server做的,浏览器并不知道,也不和浏览器打交道,这从浏览器的地址并不变化可以看出。

2.重定向

(1)地址栏会改变,变成重定向到地址。

(2) 重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。

(3)不能在重定向的过程,把数据保存到request中

用response.sendRedirect做转向的原理,它其实是向浏览器发送一个特殊的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上可以看到地址的变化。

重定向过程:

客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法。所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问jsp,紧接着客户端收到这个请求后,立刻发出一个新的请求,去请求jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。

所以使用response.sendRedirect时就需要注意以下两点:

1,在使用response.sendRedirect时,前面不能有HTML输出。

这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制,一般在8K(我是说JSPSERVER),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,那么在使用sendRedirect之前,有少量的HTML输出也是允许的。

如果报错说,“一些信息已经被submitted”(原文忘了),那么,你就要注意看了,前面是不是有过多的HTML输出了。

2,在response.sendRedirect之后,应该紧跟一句return;

我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。

细节:

重定向是客户端跳转 代表的是服务器根目录 tomcat/webapps/ 代表这里面的内容

Servlet转发是内部转发 代表 tomcat/webapps/项目

如果觉得《Servlet转发forward和重定向response.sendRedirect()区别》对你有帮助,请点赞、收藏,并留下你的观点哦!

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