对jwebap编码问题的解决

把jwebap部署到系统上,本来觉得应该没什么事,可没想到编码出问题了,系统原来的默认编码是gbk,而jwebap用的是ISO8895_1,研究了一下,把过滤器改变下就能搞定DetectFilter.java

添加String charset="";

初始化的时候

public void init(FilterConfig filterConfig) throws ServletException {
_filterConfig = filterConfig;
this.charset=filterConfig.getInitParameter("charset");
}

在方法doExclude中添加httprequest.setCharacterEncoding(charset);
在方法doFilter中添加req.setCharacterEncoding(charset);

web.xml中添加
<init-param>
<param-name>charset</param-name>
<param-value>GBK</param-value>
</init-param>

问题解决


jwebap作者leadyu回复如下:


如果你指的乱码问题是指URL的传参乱码,那可能是如下原因造成:

jwebap本身的处理是不涉及编码的,出现这个问题,我猜想最有可能出现的原因是jwebap的Http监控配置的PageDetectFilter造成的。可能的原因如下,你可以分析下:

PageDetectFilter里面会去读取request的URI,而你的应用里面我猜想可能存在某个用于处理URI编码的filter,你的filter通过调用request.setCharacterEncoding("gbk")来获取URI中的中文。而对于setCharacterEncoding,我们可以看JDK的注释是这样说明的:

Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader().

也就是说,这个方法必须在request第一次取参数和Reader之前被调用,也就是说,如果PageDetectFilter在你的filter之前执行,那么你的filter通过调用request.setCharacterEncoding("gbk")变成了无效,导致URI的中文无法正确取出。


解决办法,可以把PageDetectFilter的filter mapping配置在所有filter之后。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值