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.
       

备注:图片均来源于网络

猜你喜欢

转载自blog.csdn.net/BTBO_/article/details/79926757