请求转发与URL重定向

WEB组件之间有三种跳转方式:请求转发;URL重定向;请求包含。跨域

请求转发

从Servlet1,请求转发到Servlet2。Servlet1完成一部分的功能,再跳转到Sservlet2,继续完成剩余的功能。浏览器

request.getRequestDispatcher(String path).forward(request,response);服务器

特色:优化

  • 浏览器地址栏不会发生改变。
  • 请求转发只发送一个请求。
  • 转发前和转发后共享请求中的数据。
  • 最终相应给浏览器的由转发后来决定。
  • 请求转发不能跨域访问,只能跳转到当前应用中的资源。
  • 请求转发能够访问WEB-INF目录中的资源。

URL重定向

response.sendRedirect(String url);搜索引擎

特色:编码

  • 浏览器地址会发生改变。
  • URL重定向是两次不一样的请求。
  • 由于URL重定向是两次独立的请求,因此不能共享请求中的数据。
  • 最终相应给浏览器的由定后来决定。
  • URL重定向能跨域访问,能够访问其余应用中的资源。
  • URL重定向不能访问WEB-INF目录中的资源。

请求包含

在一个页面中能够包含其余页面的内容。在Servlet中没有意义,可是在JSP中有意义。 request.getRequestDispatcher(String path).inclode(request,response);url

选择方式:若是须要共享请求的数据,使用请求转发;若是须要访问WEB-INF中的资源使用请求转发;若是须要跨域访问,避免表单的重复提交使用URL重定向。spa


示例:

请求转发是服务端行为:用户发送一个HTTP请求>>>服务器接收到请求>>>调用内部方法在做用域(项目)中完成请求处理和转发>>>将资源相应给客户端。服务器转发的地址只能是域(项目)中的路径,不能跳转到其余域(项目)的路径上,转发后的URL地址栏不变,只能经过浏览器开发者模式查看到对应请求转发的地址,客户端只请求了一次服务端。code

**重定向是客户端行为:**用户发送一个HTTP请求>>>服务器接收到发送302状态码相应和重定向的地址>>>客户端接受到状态码和定向的URL地址>>>客户端从新发送新的HTTP请求(请求的路径是服务端相应给客户端的URL路径)>>>服务端接收到客户端再次请求的数据并相应给客户端数据。因此浏览器的URL地址栏是会变化,并且在两次请求中不能共享数据。索引

301,302都是HTTP状态的编码,都表明着URL发生了变化。301表示永久性跳转,302表示暂时性跳转。若是不是暂时性转移推荐使用301永久性跳转,301永久性跳转对搜索引擎优化更好。

相关文章
相关标签/搜索