java Servlet结构概述3之请求响应2转发重定向
在jsp中对于转发与重定向的解释
response对象的sendRedirect0方法是在客户端的浏览器中工作: Web 服务器要求浏览器重新发送一个到被定向页面的请求。在浏览器的地址栏上将出现重定向页面的URL,且为绝对路径。
forvard动作标记也可以实现页面的跳转,例如<jsp:forward page=“another.jsp”>但使用forward 动作标记与使用response对象调用sendRedirect不同。比较如下
:①forward 为服务器端跳转,浏览器的地址栏不变:.sendRedirect0为客户端跳转,浏览器的地址栏改变为新页面的URL.
②执行到forward 标记出现处停止当前JSP页面的继续执行,而转向标记中page属性指定的页面
sendRedirect()在所有代码执行完毕之后再跳转
③使用forward, request 请求信息能够保留到下个页面:使用sedRdreetO不能保留request请求信息。
在java servlet 中对转发与重定向的解释
转发是服务器行为,重定向是客户端行为。具体工作流程如下:
转发过程:客户浏览器发送http请求,Web 服务器接收此请求,调用内部的一个方法在容器内部完成请求处理和转发动作,将目标资源发送给客户:在这里,转发的路径必须是同一个Web容器下的URL,不能转向到其他的Web路径上去,中间传递的是自己的容器内的request.在客户浏览器的地址栏中显示的仍然是其第一次访问的路径, 也就是说客户是感觉不到服务器做了转发的转发行为是浏览器只做了一次访问请求
重定向过程:客户浏览器发送http请求,Web 服务器接收后发送302状态码响应及对应新的location给客户浏览器,客户浏览器发现是302响应,则自动再发送一个新的http请求,请求URL是新的location地址,服务器根据此请求寻找资源并发送给客户。在这里,location 可以重定向到任意URL,既然是浏览器重新发出了请求,就没有什么request传递的概念了,在客户浏览器的地址栏中显示的是其重定向的路径,客户可以观察到地址的变化。重定向行为是浏览器做了至少两次的访问请求。