Serlvet/JSP中forward、include、sendRedirect的区别

来源:互联网 发布:pdg转pdf mac 编辑:程序博客网 时间:2024/06/02 04:14

sendRedirect和forward、include最大的区别:

sendRedirect是在客户端重新发送一个新的请求。而forward、include则是同一个请求在服务器端的跳转,客户端完全不知道。


forward和include的区别

forward方法在服务器端将请求从一个servlet发送到另一个资源(servlet,JSP file,or HTML file)。该方法允许一个servlet

对请求做一些预处理而另一个资源来产生response调用forward()方法时必须注意下列两点: 

1、在响应被送回到客户端之前才能调用forward()方法指的是在响应主体输出清空(flush)之前),否则将拋

出IllegalStateException异常。[include没有这种情况] 
2、调用forward()方法后, response缓冲区中尚未完成的输出将被自动清空
(也就是在forward方法前,

使用PrintWriter,ServletOutputStream输出的内容都被忽略) [include不会] 


forward方法在JSP和Servlet中的表现不一致

在Servlet中调用forward方法后,该方法下面的java代码将继续执行。之后再去执行forward方法。而在JSP中

遇到jsp:forward动作指令将会跳转到指定的资源,而后面的代码无法执行。


forward是把请求内容转发都另一个Servlet/JSP,include是把另一个servlet/jsp处理过后的内容拿过来与此时

servlet的内容一同输出,既是把另一Servlet的响应内容与此时Servlet的响应内容和在一个文件中输出。

forward在调用者程序中设置的响应状态码和响应头不会被忽略,在被调用者程序中设置的响应状态码和响

应头也不会被忽略include会被忽略


总结下: 
sendRedirect与include,forward的区别在于是不是同一个request 
include与forward的区别在于输出内容,以及响应头!

0 0
原创粉丝点击