struts中文乱码使用filter

先创建一个filter从Filter继承:


package blog.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;

public class CharacterEncodingFilter implements Filter {
    
    private final String OLD_ENCODING = "ISO-8859-1";
    
    private String encoding = "UTF-8";  

    public void init(FilterConfig filterConfig) throws ServletException {
        String s = filterConfig.getInitParameter("encoding");
        if (s != null && !"".equals(s)) encoding = s;
    }
    
    public void destroy() {
         //
    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

        HttpServletRequest httpreq = (HttpServletRequest) request;
        
        if (httpreq.getMethod().equals("POST")) {
            request.setCharacterEncoding(encoding);
        } else {
            request = new RequestEncodingWrapper(httpreq);
        }

        chain.doFilter(request, response);
    }


    private class RequestEncodingWrapper extends HttpServletRequestWrapper {

        public RequestEncodingWrapper(HttpServletRequest request) {
            super(request);
        }

        public String toChi(String input) {
            try {
                byte[] bytes = input.getBytes(OLD_ENCODING);
                return new String(bytes, encoding);
            } catch (Exception ex) {
            }
            return null;
        }

        /**
         * Return the HttpServletRequest holded by this object.
         */
        private HttpServletRequest getHttpServletRequest() {
            return (HttpServletRequest) super.getRequest();
        }

        public String getParameter(String name) {
            return toChi(getHttpServletRequest().getParameter(name));
        }

        public String[] getParameterValues(String name) {
            String values[] = getHttpServletRequest().getParameterValues(name);
            if (values != null) {
                for (int i = 0; i < values.length; i++) {
                    values[i] = toChi(values[i]);
                }
            }
            return values;
        }
    }

}


然后在web.xml中配置:

<filter>
  <filter-name>CharacterEncodingFilter</filter-name>
  <filter-class>blog.filter.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>


posted @ 2012-07-06 10:37  xzf007  阅读(119)  评论(0编辑  收藏  举报