初学者中学习Serlvet时,经常遇到中文乱码的问题,然后就会上网查,虽然网上也有其他的解决方法,但是我还是推荐采用过滤器的方式处理中文乱码的问题,至于过滤器的实现原理,读者可以参考网上的其他资料,我在这里就不要详述了。
要使用过滤器来解决中文乱码问题,首先当然是要有一个过滤器了,编写一个类,继承Filter类,并在doFilter方法中处理中文问题
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;
public class CharacterEncodingFilter implements Filter {
private FilterConfig config;
// 此filter被释放时的回调方法
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
//获取Filter中的初始化数据,这里是编码的设置
String encoding = config.getInitParameter("encoding");
if (encoding != null && !encoding.equals("")) {
req.setCharacterEncoding(encoding);
}
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
this.config = config;
}
}
接着要是过滤器有效,就要在web.xml中配置Filter,配置如下:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
需要注意的是:这里的encoding设置的编码要与你页面的编码一直,因为是网页开发,建议都使用utf-8编码格式。
经过这些步骤之后,就不会有乱码的,希望对初学者有点用处。