三者在servlet中的最大区别是:

Include和Forward:将当前请求转到另外一个JSP或者servlet处理。

sendRedirct:将当前请求返回到浏览器,带上要redirect的URL,浏览器重新发一个新的请求到新的URL。

include和forward的区别:

include 是去而复返,forward 是前不见古人,后不见来者。

include 是把别人包含进来,forward 是丢掉了自己。

include是把另一个servlet/jsp处理过后的内容拿过来与本身的servlet的内容一同输出.

原始servlet输出的内容+被include进来的servlet的输出内容+原始servlet输出的内容。

forward方法是把请求的内容转发到另外的一个servlet/jsp。在forward之前,在原始的servlet中不能对输出做flush。

最终只有被被forward去的servlet的内容被输出。

在原始servlet中设置的响应状态码和响应头会被include的servlet忽略。include的servlet在处理的时候只会保留进入include的servlet之后的状态码和响应头。

对于forward,在两个地方设置的状态码和响应头都会被用到。

include乱码的一个原因可能就是没有在被include的servlet设置response.setContentType("text/html;charset=utf-8")。

不管是Include,Forward,还是sendRedirct,在该行代码之后的语句仍然被执行,只是输出到response的内容没有作用。

如:before和after仍然被打印到控制台。

System.out.println("before");

//include,forward,sendredirect语句

System.out.println("after");

forward在jsp和servlet中会有不同:如下after不会被打印到控制台。

<%System.out.println("before"); %>
<jsp:forward page="t.dest"/>  
<%System.out.println("after"); %>

使用:

sendRedirect:response.sendRedirect("path");  servlet和jsp里面一样。

include和forward:

getServletContext().getRequestDispatcher(path).include(request,response);  
getServletContext().getRequestDispatcher(path).forward(request,response);

这里面的path必须以"/",相对于当前WEB应用程序根目录。

request.getRequestDispatcher(path).include(request,response);  
request.getRequestDispatcher(path).forward(request,response);

这里面的path可以是以"/"开头,也可以使用相对路径。

在JSP中

<jsp:include page=""/>  
<jsp:forward page=""/>

总结:

sendRedirect与include,forward的区别在于是不是同一个request,sendRedirect会有两次交互。
include与forward的区别在于输出内容(include包含两者,forward只有forward一个),以及响应头!

原文地址:http://blog.csdn.net/kkdelta/article/details/4129458

Include,Forward,sendRedirct的区别(转)的更多相关文章

  1. (转发)RequestDispatcher的include()方法和forward()方法的区别

    forward(): 该方法用于将请求从一个Servlet传递给服务器上的另外的Servlet.JSP页面或者是HTML文件. 在Servlet中,可以对请求做一个初步的处理,然后调用这个方法,将请求 ...

  2. php中include()和require()的区别

    1.引用文件方式 对 include()来说,在include()执行时文件每次都要进行读取和评估:而对于require()来说,文件只处理一次(实际上,文件内容替换 了require()语句.这就意 ...

  3. [转]require(),include(),require_once()和include_once()区别

    require(),include(),require_once()和include_once()区别 面试中最容易提到的一个PHP的问题,我想和大家共勉一下: require()和include() ...

  4. 关于require,require_once,include和include_once的区别

    一.定义 require,require_once,include,include_once都属于PHP的关键字,也就是说它们实际都是PHP的语句,而不是函数,类似于print,echo一样,也是PH ...

  5. PHP中include和require的区别

    include和require的区别,其实两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出. 根据测试,win32 ...

  6. php引入文件(include 和require的区别)

    引入文件: 首先需要一个php文件: <?php class shao//类名必须和文件名相同!!! { public $xxx="666"; } $shili = new ...

  7. php require、require_once和include、include_once的区别

    一.引入php文件路径的方法require '文件路径'; require ('文件路径');require_once '文件路径'; require_once ('文件路径');include 同 ...

  8. 关于thymeleaf th:replace th:include th:insert 的区别

    关于thymeleaf th:replace th:include th:insert 的区别    th:insert   :保留自己的主标签,保留th:fragment的主标签.    th:re ...

  9. 【转载】PHP中require(),include(),require_once()和include_once()区别

    关于这方面的知识,这篇文章讲的较全: http://www.jb51.net/article/22467.htm require 的使用方法如 require("MyRequireFile. ...

随机推荐

  1. Highmaps的天津地图数据JSON格式

    Highmaps的天津地图数据JSON格式 Highmaps的天津地图数据JSON格式 下载链接: http://pan.baidu.com/s/1eQgxECU password: tjmj 天津地 ...

  2. Linux fork函数具体图解-同一时候分析一道腾讯笔试题

    原创blog.转载请注明出处 头文件: #include<unistd.h> #include<sys/types.h> 函数原型: pid_t fork( void); (p ...

  3. ArchLinux最小化安装 必备库 常用命令

    铸成强大的工作站环境——ArchLinux最小化安装 所有问题归结起来,只是一个问题:ArchLinux最小化安装,需要安装哪些包? 1.bash//最基本的Bash Shell(必须)2.bzip2 ...

  4. jQuery 怎么获取对象

    1.JQuery的核心的一些方法 each(callback) '就像循环 $("Element").length; ‘元素的个数,是个属性 $("Element&quo ...

  5. HDOJ 5045 Contest

    状压DP.. . . Contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  6. WinDbg 查看静态变量

    有如下Class.若想查看静态变量内容.因为静态变量和类绑定,仅需要查看类即可. namespace ConsoleApplication13 { class Program { public sta ...

  7. Oracle:热备测试

    我们知道Oracle数据库热备有3步: 1. alter tablespace  tbname  begin backup: 2. cp  /×××      to   /×× 3. alter ta ...

  8. WAS:节点不同步问题

    刀片服务器硬盘坏了,换了硬盘后,通过dmgr无法重启该节点上的server. 单机./starServer 后,服务虽然启动了,但后台一直提示如下: [-- ::: CST] RoleViewLead ...

  9. Android Studio下载安装

    官方下载地址:https://developer.android.google.cn/studio#downloads 因为安卓自带的模拟器会比较慢一些,这里勾选去掉,我们使用夜神模拟器. 这里根据自 ...

  10. I.MX6 AW-NB177NF p2p support

    /***************************************************************************** * I.MX6 AW-NB177NF p2 ...