forward与include转发问题(RequestDispatcher.include()(乱码问题分析及解决)

来自:http://www.360doc.com/content/11/0520/11/987036_118089168.shtml

首先,sendRedirect与forward,include的最大区别是request,response.. 
sendRedirect产生新的请求与响应,前后已没有联系. 
相当于在页面中重新输入一个URL,只是自动完成而已. 
forward,include是共用同一请求.客户端完全不知道(浏览器中的URL不变)

使用方式: 
servlet和jsp里面一样

Java代码 
response.sendRedirect();  

response.sendRedirect();


其次,forward与include的区别. 
调用forward()方法时必须注意下列两点: 
在HTTP回应被“确认”(committed)以前才能调用forward()方法(这里的“确认”是指将HTTP回应的内容主体送回用户端),否则将拋出IllegalStateException异常。[include没有这种情况] 
调用forward()方法后,原先存放在HttpResponse对象中的内容将会自动被清除(也就是在forward方法前,使用PrintWriter,ServletOutputStream输出的内容都被忽略) 
[include不会]

使用方式 
Servlet中 
Java代码 
getServletContext().getRequestDispatcher(path).include(request,response);   
getServletContext().getRequestDispatcher(path).forward(request,response); 

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

这里面的path必须以"/",相对于当前WEB应用程序根目录 
Java代码 
request.getRequestDispatcher(path).include(request,response);   
request.getRequestDispatcher(path).forward(request,response); 

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

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

在JSP中 
Java代码 
<jsp:include page=""/>   
<jsp:forward page=""/> 

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


forward在SERVLET与JSP中表现不一致:servlet中:运行forward方法,后面的语句会执行完,再去执行forward方法 (符合JAVA程序运行顺序) 
在jsp中,运行到forward后,直接跳转,后面的语句不再执行.


两者的区别: 
forward方法是把请求的内容转发到另外的一个servlet/jsp. 
include是把另一个servlet/jsp处理过后的内容拿过来与此时servlet的内容一同输出.

---------------------------------------------------------- 
forward与include还有一个重要的区别: 
forward在调用者程序中设置的响应状态码和响应头不会被忽略,在被调用者程序中设置的响应状态码和响应头也不会被忽略. 
include会被忽略.. 
这也是乱码的一个原因.. 
使用include时候,要在调用程序中写上response.setContentType("text/html;charset=utf-8") 
不管你是不是用filter统一处理过字符.

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值