您的位置:首页 > 运维架构 > Tomcat

Post与Get提交使用过滤器解决中文乱码问题

2012-05-24 18:57 831 查看
public class TomcatFormFilter implements Filter {

 /**

  * Request.java 对 HttpServletRequestWrapper 进行扩充, 不影响原来的功能并能提供所有的

  * HttpServletRequest 接口中的功能. 它可以统一的对 Tomcat 默认设置下的中文问题进行解决而只需要用新的 Request

  * 对象替换页面中的 request 对象即可.

  */

 FilterConfig filterConfig;

 class Request extends HttpServletRequestWrapper {

  public Request(HttpServletRequest request) {

   super(request);

  }

  /**

   * 转换由表单读取的数据的内码. 从 ISO 字符转到 GBK.

   */

  public String toChi(String input) {

   try {

    byte[] bytes = input.getBytes("ISO8859-1");

    return new String(bytes, "GBK");

   } 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;

  }

 }

 

 

 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("GBK");

  } else {

   request = new Request(httpreq);

  }

  chain.doFilter(request, response);

 }

 public void init(FilterConfig filterConfig) throws ServletException {

  this.filterConfig = filterConfig;

 }

}

XML中的配置代码

  <filter>

    <filter-name>charFilter</filter-name>

    <filter-class>com.web.filter.TomcatFormFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>charFilter</filter-name>

    <url-pattern>/servlet/*</url-pattern>

  </filter-mapping>

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