转发(forward)和重定向(redirect)区别
转发(forward):当浏览器发送一个请求给servlet或者controller时,这个servlet(controller)不能够处理或者不能够完全处理这个请求,需要和其他servlet(controller)合作处理这个请求,这时就需要用到转发(forward)。
转发是服务器内部的跳转,即一个请求从服务器内部的一个servlet(controller)跳转到另外一个servlet(controller),而客户端不可见,客户端只能看见页面内容的改变,而地址栏不改变。
|
|
|
转发的常见用法:以servlet为例,请求A先访问servlet1,如果servlet1的service方法中有这样一条语句:
request.getRequestDispacther("/servlet2").forward(request,response)
那么,这个请求A就会再次去访问servlet2,并且携带servlet1中的request和response参数,然后执行servlet2的service方法,实现多个servlet共同处理一个请求。这种方式常用在servlet跳转JSP网页 因为 JSP 被 JSP容器 编辑和编译之后就是个servlet类,JSP 运行后产生HTML代码,通过response返回到客户端。
|
|
|
重定向:当客户端访问服务器时,服务器响应给客户端一条指令,客户端根据这条指令上的信息重新向服务器发送一条由指令指定的请求。重定向是客户端重新访问浏览器的外部行为。
重定向的应用:在web项目的开发中,当你希望跳转页面后,客户端浏览器地址栏的URL发生变化,即URL显示跳转之后页面的路径,那么就用重定向。
比如我们做了一个网站的登录功能,输入用户名密码,点击登录按钮之后,后台做数据验证,通过验证后,页面从登录页面跳转到首页。假如用转发实现这个功能,当客户端跳转到首页之后,浏览器地址栏的URL还是当初我们在登录页面的时候URL,如果我们刷新一下页面,浏览器还是会再次给浏览器发送和上次一样的登录验证请求,浪费了不必要的资源。
|
|
|
注意:当我们在web项目开发时,使用重定向,重定向的URL应该是,你想要访问jsp页面的controller的RequestMapping的URL,因为在WEB-INF下的资源,浏览器没办法直接访问。