Include,Forward,sendRedirct的区别(转)

三者在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

时间: 2024-08-29 01:29:26

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

RequestDispatcher接口的include()方法与forward()方法的区别

RequestDispatcher接口所定义的forward()方法可以将HTTP请求转送给其他Web资源(例如Servlet.JSP或HTML)进行处理,并产生HTTP回应.RequestDispatcher接口的include()方法与forward()方法非常类似,惟一的不同在于:利用include()方法将HTTP请求转送给其他Servlet后,被调用的Servlet虽然可以处理这个HTTP请求,但是最后的主导权仍然是在原来的Servlet.RequestDispatcher是一个Web

图解sendRedirect,include,forward的区别

原文:http://blog.csdn.net/java2000_net/article/details/3002763 一.sendRedirect 使用方式: servlet和jsp里面一样 response.sendRedirect(); 说明: 服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求指定的地址,一般来说,你会把需要的参数放在转发的地址里面. 注意:使用request.setAttribute的内容,不能读取了,你可以用session代替,或者用include,forward

PHP中include和require的区别详解

1.概要  require()语句的性能与include()相类似,都是包括并运行指定文件.不同之处在于:对include()语句来说,在执行文件时每次都要进行读取和评估:而对于require()来说,文件只处理一次(实际上,文件内容替换require()语句).这就意味着如果可能执行多次的代码,则使用require()效率比较高.另外一方面,如果每次执行代码时是读取不同的文件,或者有通过一组文件迭代的循环,就使用include()语句. require的使用方法如:require("myfil

include和require的区别

细节决定成败! 1.引用文件方式 对include()来说,在include()执行时文件每次都要进行读取和评估:而对于require()来说,文件只处理一次(实际上,文件内容替换了require()语句).这就意味着如果有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高.另一方面,如果每次执行代码时相读取不同的文件,或者有通过一组文件叠代的循环,就使用include(),因为可以给想要包括的文件名设置一个变量,当参数为include()时使用这个变量. 2.是否有

包含文件函数include与require的区别

include或include_once一般用于动态包含,所谓动态包含就是根据不同条件包含不同文件 require或require_once一般用于静态包含,比如包含一个html文件的头部或者尾部 如:require_once footer.inc.php include和require可以包含多次,include_once和require_once只包含一次 包含文件函数include与require的区别,布布扣,bubuko.com

iOS #include与#import的区别

#include  #import  @class   讲解  #include 区分 #include <x.h>与#include "x.h"的作用 #include <x.h>:它用于对系统自带的头文件的引用,编译器会在 系统文件目录下去查找该文件. #include "x.h":用户自定义的文件用双引号引用,编译器首先会 在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找. 在使用#include的时候要注意处理重复

#include&lt;iostream&gt;与#include&lt;iostream.h&gt;的区别

                                     转载于祝长洋的BLOG:http://blog.sina.com.cn/s/blog_514b5f600100ayks.html                                      这两者都有什么不同呢?首先,5年前我们就开始反对把.h符号继续用在标准的头文件中.继续使用过时的规则可不是个好的方法.从功能性的角度来讲,包含了一系列模板化的I/O 类,相反地只仅仅是支持字符流.另外,输入输出流的C++标

(转载)OC学习篇之[email&#160;protected]关键字的作用以及#include和#import的区别

前一篇文章说到了OC中类的三大特性,今天我们来看一下在学习OC的过程中遇到的一些问题,该如何去解决,首先来看一下我们之前遗留的一个问题: 一.#import和#include的区别 当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误 但是使用两次#import的话,不会报错,所以他可以解决重复导入的问题,他会做一次判断,如果已经导入一次就不导入了 二.关键字@class的作用 在来看一下OC中的关键字@class的作用,在

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

一.定义 require,require_once,include,include_once都属于PHP的关键字,也就是说它们实际都是PHP的语句,而不是函数,类似于print,echo一样,也是PHP种的输出语句,而不是函数.但在更多的时候,大家都常称作函数. 二.用法 require 'test.php',require_once 'test.php',或者require('test.php'),require_once('test.php')这样的写法都是可以的,include也是如此.它