我发现在action中写request.setCharacterEncoding("gb2312")就提示错误

解决方案 »

  1.   

    我一般的做法是新建一个类来进行处理,这个类是引用javax.servlet.Filter接口的:
    import javax.servlet.Filter;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;
    import javax.servlet.FilterChain;
    import javax.servlet.http.HttpServletRequest;
    import java.io.UnsupportedEncodingException;
    import javax.servlet.ServletException;
    import java.io.IOException;public class EncodingFilter
        implements Filter {
      protected FilterConfig filterConfig;
      private String targetEncoding = "gb2312";
      public EncodingFilter() {
      }  /**
       * init
       *
       * @param filterConfig FilterConfig
       */
      public void init(FilterConfig filterConfig) {
        this.filterConfig = filterConfig;
        this.targetEncoding = filterConfig.getInitParameter("encoding");
      }  /**
       * doFilter
       *
       * @param servletRequest ServletRequest
       * @param servletResponse ServletResponse
       * @param filterChain FilterChain
       */
      public void doFilter(ServletRequest servletRequest,
                           ServletResponse servletResponse, FilterChain filterChain) throws
          UnsupportedEncodingException, ServletException, IOException {
        System.out.println("使用以下方法对请求进行编码:encoding="+targetEncoding);
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        request.setCharacterEncoding(targetEncoding);
        filterChain.doFilter(servletRequest,servletResponse);
      }  /**
       * destroy
       */
      public void destroy() {
        this.filterConfig = null;
      }}而且还要在web.xml中加入配置:
      <filter>
        <filter-name>Set Request Encoding</filter-name>
        <filter-class>com.maiyl.test.filter.EncodingFilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>gb2312</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>Set Request Encoding</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>其中的<filter-class>是你的类所在的目录
      

  2.   

    milemac(用心打造):我其实也用了你的方法,但是请看:(用的不是你的类)
    提示:Exception starting filter Set Character Encoding: java.lang.InstantiationException
    <filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>util.SetCharacterEncodingFilter</filter-class>
        <init-param>
          <param-name>ignore</param-name>
          <param-value>true</param-value>
        </init-param>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>GBK</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    我这个监听器目前还是在Jbuilder下编译的,放在util包中,
      

  3.   

    我放在jsp里用,在html的最上面
      

  4.   

    可能是编译器版本的问题,比如tomcat,老版本的tomcat不支持request.setCharacterEncoding("gb2312")方法,可以考虑升级版本,他可以将表单里面提交的中文一次性全部转化,在所有的需要获得参数的页面里面使用这个方法,就可以彻底解决表单提交的中文问题