您的位置:首页 > 其它

中文乱码?——字符过滤器的配置

2011-05-08 20:10 309 查看
我们在做web项目时,常常会遇到烦恼的中文乱码问题,现在我们尝试一下用字符过滤器解决这个问题。

首先,字符过滤器的代码如下:

package com.technology.util.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
/**
* <pre>
* 过滤器,对中文字符进行编�?
* </pre>
*
* 对HttpServletRequestWrapper类进行扩�??, 在不影响原来的功能并能提供所有的HttpServletRequest
* 接口中的功能,统�??的对默认设置下的中文问题进行解决,实际操作就是将新生成的Request对象替换页面中请求的request对象即可
*/
public class EncodingFilter implements Filter {
// 编码格式
private String encoding = null;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
if (httpRequest.getMethod().equals("GET")) {
request = new Request(httpRequest);
}
request.setCharacterEncoding(this.encoding);
chain.doFilter(request, response);
}
/**
* init 实现了接口javax.servlet.Filter.init
* 意是获得web.xml中的参数名为encoding的�??,既utf-8
* <param-name>encoding</param-name><param-value>UTF-8</param-value>
*/
public void init(FilterConfig fc) throws ServletException {
this.encoding = fc.getInitParameter("encoding");
}
public void destroy() {
this.encoding = null;
}
/**
* 扩展HttpServletRequestWrapper�??
*/
class Request extends HttpServletRequestWrapper {
public Request(HttpServletRequest request) {
super(request);
}
/**
* 转换由表单读取的数据的内码, 从ISO字符转到GBK
*/
public String toChina(String input) {
try {
byte[] bytes = input.getBytes("ISO8859-1");
return new String(bytes, encoding);
} catch (Exception ex) {
}
return null;
}
private HttpServletRequest getHttpServletRequest() {
return (HttpServletRequest) super.getRequest();
}
/**
* 读取参数列表,修正了中文问题
* 重写javax.getParameterValues,截获jsp传过来的参数并用toChina()转成中文
*/
public String[] getParameterValues(String name) {
String values[] = getHttpServletRequest().getParameterValues(name);
if (values != null) {
for (int i = 0; i < values.length; i++) {
values[i] = toChina(values[i]);
}
}
return values;
}
}
}


类似的过滤器代码网上很多,大家可以自己搜搜看。然后我们需要在web.xml中加一段配置

<!-- 字符过滤器配置 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.zjcontest.util.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 字符过滤器配置 -->


这要就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: