转发发生在jsp中,由转发器发送到要转发到那个文件的jsp中,浏览器不知道发生的过程,而重定向是向浏览器的url中直接发送命令的语句指定跳转页面。
转发是一种服务器的行为,客户端只有一次请求,服务器端转发后会将请求对象保存,地址栏中的l地址不会改变,得到相应后服务器端再讲相应发给客户端,通常是携带数据的。
重定向是一种客户端的行为,本质上有两次请求,前一次请求对象不会保存,但是地址栏的地址会发生改变。
转发可以访问web-inf下资源,重定向不可以访问web-inf下资源
转发是servlet 发送到 jsp ,servlet只接收到一个请求。
重定向是 servlet 接受一个请求后,本身的代码又想servlet发送一个请求,一共是两个请求。
转发的地址栏不会发生变化,重定向的地址栏会发生新的改变,转发是一组请求响应,重定向是两组请求响应,所以感觉转发的速度应该比重定向快。
转发是JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。
1,浏览器地址栏的变化 转发 地址栏不变化,重定向变
2,请求次数,转发请求一次,重定向请求两次
3,转发需要携带数据,重定向不需要携带数据
重定向访问服务器两次,转发只访问服务器一次。
重定向可以看见目标页面的URL,转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的。
重定向到某一个页面,sendRedirect()这个方法属于response的方法,当这个请求处理完之后,response.senRedirect()将立即返回客户端,然后客户端再重新发送一个请求,去访问xx.jsp页面。
在response.sendRedirect(“xx.jsp”);里面是两个请求,两个响应,地址栏会发生改变。
转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request,转发行为是浏览器只做了一次访问请求。当发送请求时,服务器会根据请求创建一个代表请求的request对象和一个代表响应的response对象。
当response返回数据时,并不是直接提交到页面上,而是先存储在了response自己的缓存区,当整个请求结束的时候,服务器会将response缓存区中的内容全部取出,返回给页面。
重定向可以跨域访问,而转发是在web服务器内部进行的,不能跨域访问。