WEB组件之间有三种跳转方式:请求转发;URL重定向;请求包含。跨域
从Servlet1,请求转发到Servlet2。Servlet1完成一部分的功能,再跳转到Sservlet2,继续完成剩余的功能。浏览器
request.getRequestDispatcher(String path).forward(request,response)
;服务器
特色:优化
response.sendRedirect(String url);
搜索引擎
特色:编码
在一个页面中能够包含其余页面的内容。在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永久性跳转对搜索引擎优化更好。