Servlet之forward、sendRedirect与include的区别与使用
1.forward
forward指的是请求转发,请求转发指的是将客户端的请求转发到另外一个页面中,此处与sendRedirect的不同之处是只会有一次客户端的请求。
具体流程如下:
① 客户端向服务器发出请求,访问Servlet1
② Servlet1想让Servlet2为客户端服务,故使用sendRedirect()方法来 对请求资源进行转 发,转发在服务器内部进行,请求不经过客户端, 故浏览器中的地址不会发生改变,所以request属性中的内容可以照常 使用。
注:① 请求在服务器端内部进行,浏览器无法获知转发内容,故地址栏不会 发生改变
② 速度较快
③ 可以通过URL的方式来传递参数
④ forward后面的语句不会继续发送到客户端,无需额外增加return来 终止程序进行
2.sendRedirect
redirect指的是重定向,服务器将客户端的请求重定向到一个新的页面,此时页面地址会发生改变。
此处会有两次浏览器请求的出现:
① 第一次请求:浏览器访问Servlet1,Servlet想让客服端访问 Servlet2,所以通过使用sendRedirect("URL")方法对客户端下达重 定向指令。
② 第二次请求:客户端接收来自Servlet1下达的重定向指令,对服务 器发出第二次访问
请求,对URL指定页面进行访问。
, 
样例代码如下:
response.sendRedirect("/login.jsp");
注 : ① 跳转后地地址栏会发生改变,而且只能接受session属性范围内的内容 而不能再使用request属性中的内容。
② 可以通过URL传参数
例如/project/test.jsp?name=test&phone=1234567
③ 使用sendRedirect会触发两次客户端请求,所以速度会较慢。
④ sendRedirect()之后的语句还会继续执行,一般需要额外加return来原 页面的运行。
3.include
include的方式有两种,第一种是静态包括<%@include%>;第二种是动态包括<jsp:include>
顾名思义:①静态包含<%@include%>只是将被包含的页面简单地被包含进来,被包含文件无论是HTML还是Servlet,最后生成的结果只是一个Servlet
②动态包含<%@include%>有两种情况,第一种情况是引入动态文件,例如Servlet,此时Web容器会生成两个Servlet,两个Servlet类之间可以通过response和request来进行通信;第二种情况是引入静态文件,如HTML,此时Servlet只是简单地嵌套引入,最后只会生成一个Servlet.
备注:图片均来源于网络