Filter(过滤器)可以拦截所有的请求,在访问请求的资源时会先调用Filter如果过滤成功,则可以访问所有访问的资源,因此只要编写一个Filter就可以解决整个站点的中文乱码问题。
EncodeFilter.java
import java.io.IOException;MyRequest.java(增强了功能的Request,该类的getParamter()方法可以解决以get方法提交过来的数据的中文乱码问题)
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;
import javax.servlet.http.HttpServletResponse;
/*
解决全站的中文问题
*/
public class EncodingFilter implements Filter{
private FilterConfig config = null;
@Override
public void init(FilterConfig config) throws ServletException {
this.config = config;
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String encode = config.getInitParameter("encode");
request.setCharacterEncoding(encode);
response.setCharacterEncoding(encode);
response.setContentType("text/html;charset="+encode);
myRequest myRequest = new myRequest(request);
chain.doFilter(myRequest, response);
}
@Override
public void destroy() {
}
}
/*web.xml
增强了功能的Request,该类的getParamter()方法可以解决以get方法提交过来的数据的中文乱码问题
*/
class myRequest extends HttpServletRequestWrapper{
private HttpServletRequest request;
public myRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public String getParameter(String name) {
try{
String value = request.getParameter(name);
if(value == null){
return value;
}
if(!request.getMethod().equalsIgnoreCase("get")){
return value;
}
String encoding = request.getCharacterEncoding();
value = new String(value.getBytes("ISO-8859-1"), encoding);
return value;
}catch(Exception e){
throw new RuntimeException(e);
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encode</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>