request.setCharacterEncoding(reqEnc)的作用问题

request.setCharacterEncoding(reqEnc);
 
这个方法要在获取参数之前调用才会有效,也就是说,如果在getParameter()或者  getReader ()之后调用,会失效。
 
jsp的动作指令<jsp: include page="relative.jsp">是在请求运行中执行,把编译之后生成的servlet代码嵌入原页面中。
 
每一个request请求访问一个jsp页面的时候,如果不手动设置request请求的编码字符,那么jsp容器都会自动设置默认的编码字符。
 
比如说当前服务器的默认编码为GBK,有一个页面common.jsp如下,想把对这个页面的请求参数转为UTF-8编码
<%@ page contentType="text/html;charset=GBK" errorPage="/common/errorPage.jsp" %><%@ 
page trimDirectiveWhitespaces="true" %>
<%@include file="/common/setCharset.jsp"%>
<jsp:include page="/common/config.jsp" /><%!
static boolean validate(HttpServletRequest request) {
if (!request.getMethod().equalsIgnoreCase("POST")) {
    return false;//false;  //TODO 正式使用时放开
}
return true;
}
%>
 
在/common/setCharset.jsp里面设置了 request.setCharacterEncoding("UTF-8");此时访问common.jsp的这个request请求的编码方式变成了UTF-8,
当执行到<jsp:include page="/common/config.jsp" />的时候,因为config.jsp里面没有手动设置编码方式,也没有进行getParameter()或者   getReader ()操作,所以,jsp容器又会把访问common.jsp的这个request请求在动态访问加载config.jsp生成的servlet代码之后,编码方式变成了GBK。
 
解决方案:
(1)在config.jsp文件的开头,手动设置请求编码为UTF-8
(2)在<%@include file="/common/setCharset.jsp"%>这句后面加一些getParameter()方法,让setCharacterEncoding()方法生效。
 
 
 
另外:
我们来总结一下两种include 两种用法的区别,主要有两个方面的不同: 
一、执行时间上: 
<%@ include file=”relativeURI”%> 是在翻译阶段执行 
<jsp:include page=”relativeURI” flush=”true” /> 在请求处理阶段执行。 
二、引入内容的不同: 
<%@ include file=”relativeURI”%> 引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起。 
<jsp:include page=”relativeURI” flush=”true” /> 引入执行页面或servlet所生成的应答文本。
 
 
 
 
 
 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值