对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之后。

你可能感兴趣的:(jdk,Web,xml)