初学者中学习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编码格式。
经过这些步骤之后,就不会有乱码的,希望对初学者有点用处。