这个问题很好解决阿!@~!
你写一个过滤器就可以了!~!
记得加上参数Dispatch的REQUEST,RESPONSE就可以了!~!

解决方案 »

  1.   


    package com.yy.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;public class EncodingFilter implements Filter {
       
     private FilterConfig filterconfig;
     private String encoding;
     private boolean ignore;
     
     public EncodingFilter()
     {
     this.filterconfig=null;
     this.encoding=null;
     this.ignore=false;
     }
        
    public void destroy() {
       this.filterconfig=null;
       this.encoding=null;
    }
    public void init(FilterConfig arg0) throws ServletException {
    this.filterconfig=arg0;
    this.encoding=filterconfig.getInitParameter("encoding");
    String value=filterconfig.getInitParameter("ignore");
    if(value==null)
    {
    ignore=false;
    }
    else if(value.equalsIgnoreCase("true"))
    {
    ignore=true;
    }
    else if(value.equalsIgnoreCase("yes"))
    {
    ignore=true;
    }
    else
    {
    ignore=true;
    }
    }
    public final String selectEncoding(ServletRequest request)
    {
    return encoding;
    }
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    if(ignore || request.getCharacterEncoding()==null)
    {
    String encoding1=this.selectEncoding(request);
    if(encoding1!=null)
    {
    request.setCharacterEncoding("GBK");
    }
    chain.doFilter(request, response);
    } }}
    这是我的过滤器您可以借鉴一下!!! 您的问题估计应该是设置一下request.setCharcterEncoding("GBK");
    jsp设置 但自己写一个过滤器也挺简单 早晚要用的
      

  2.   

    1、加一个过滤器
    2、在web.xml配置一下。java代码:
    package com.zhuoyue.util;
    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;
    /**
     * <p>Example filter that sets the character encoding to be used in parsing the
     * incoming request, either unconditionally or only if the client did not
     * specify a character encoding.  Configuration of this filter is based on
     * the following initialization parameters:</p>
     * <ul>
     * <li><strong>encoding</strong> - The character encoding to be configured
     *     for this request, either conditionally or unconditionally based on
     *     the <code>ignore</code> initialization parameter.  This parameter
     *     is required, so there is no default.</li>
     * <li><strong>ignore</strong> - If set to "true", any character encoding
     *     specified by the client is ignored, and the value returned by the
     *     <code>selectEncoding()</code> method is set.  If set to "false,
     *     <code>selectEncoding()</code> is called <strong>only</strong> if the
     *     client has not already specified an encoding.  By default, this
     *     parameter is set to "true".</li>
     * </ul>
     *
     * <p>Although this filter can be used unchanged, it is also easy to
     * subclass it and make the <code>selectEncoding()</code> method more
     * intelligent about what encoding to choose, based on characteristics of
     * the incoming request (such as the values of the <code>Accept-Language</code>
     * and <code>User-Agent</code> headers, or a value stashed in the current
     * user's session.</p>
     *
     * @author Craig McClanahan
     * @version $Revision: 1.1 $ $Date: 2008/10/12 14:12:56 $
     */public class SetCharacterEncodingFilter implements Filter {
        // ----------------------------------------------------- Instance Variables
        /**
         * The default character encoding to set for requests that pass through
         * this filter.
         */
        protected String encoding = null;
        /**
         * The filter configuration object we are associated with.  If this value
         * is null, this filter instance is not currently configured.
         */
        protected FilterConfig filterConfig = null;
        /**
         * Should a character encoding specified by the client be ignored?
         */
        protected boolean ignore = true;
        // --------------------------------------------------------- Public Methods
        /**
         * Take this filter out of service.
         */
        public void destroy() {        this.encoding = null;
            this.filterConfig = null;    }
        /**
         * Select and set (if specified) the character encoding to be used to
         * interpret request parameters for this request.
         *
         * @param request The servlet request we are processing
         * @param result The servlet response we are creating
         * @param chain The filter chain we are processing
         *
         * @exception IOException if an input/output error occurs
         * @exception ServletException if a servlet error occurs
         */
        public void doFilter(ServletRequest request, ServletResponse response,
                             FilterChain chain)
    throws IOException, ServletException {        // Conditionally select and set the character encoding to be used
            if (ignore || (request.getCharacterEncoding() == null)) {
                String encoding = selectEncoding(request);
                if (encoding != null)
                    request.setCharacterEncoding(encoding);
            }
    // Pass control on to the next filter
            chain.doFilter(request, response);    }
        /**
         * Place this filter into service.
         *
         * @param filterConfig The filter configuration object
         */
        public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig;
            this.encoding = filterConfig.getInitParameter("encoding");
            String value = filterConfig.getInitParameter("ignore");
            if (value == null)
                this.ignore = true;
            else if (value.equalsIgnoreCase("true"))
                this.ignore = true;
            else if (value.equalsIgnoreCase("yes"))
                this.ignore = true;
            else
                this.ignore = false;    }
        // ------------------------------------------------------ Protected Methods
        /**
         * Select an appropriate character encoding to be used, based on the
         * characteristics of the current request and/or filter initialization
         * parameters.  If no character encoding should be set, return
         * <code>null</code>.
         * <p>
         * The default implementation unconditionally returns the value configured
         * by the <strong>encoding</strong> initialization parameter for this
         * filter.
         *
         * @param request The servlet request we are processing
         */
        protected String selectEncoding(ServletRequest request) {        return (this.encoding);    }
    }
    web.xml配置:<filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>
    com.zhuoyue.util.SetCharacterEncodingFilter
    </filter-class>

    <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>
    重启web容器,over
      

  3.   

    问题补充: <%page contentType="text/html;charset=gbk"%>
    与 <%page pageEncoding="gbk"%>有什么区别?谢谢 --------------一个是文件保存编码,一个是页面文字编码
      

  4.   

      顶下!
      我用struts做毕业设计的时候。也碰到过乱码的问题。我记得是数据从JSP页面提交,通过struts进行持久化处理。如果我在页面输入汉字。保存之后,页面显示的就是乱码。这个问题困惑了我好久。一直没有解决。也有人建议我写过滤器。后来时间仓促没有写。祝你好运!
      

  5.   

    过滤器 大家都说了 4楼回答的很好 
     
    最后提醒一句 记得要统一编码 JSP页面 要么统一GBK 要么UTF-8 
      

  6.   

    在连接MYsql时连接字符串中写:jdbc:mysql://localhost:3306/test?userUnicode=true&amp;characterEncoding=gbk   &amp;是空格的意思
    userUnicode=true是允许用户自己定义字符集,characterEncoding=gbk就是你定义的字符集为gbk。  <%page contentType="text/html;charset=gbk"%> 是指页面以文本或网页的形式显示且字符集为gbk,
     <%page pageEncoding="gbk"%>指编码为gbk,我认为两者的功能相似。
       
    解决乱码时最好用过滤器,因为过滤器是自动调用的:
        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 EncodingFilter implements Filter {

    //初始化      private String encoding="";
    public void init(FilterConfig filterConfig)throws ServletException{
    //encoding=filterConfig.getInitParameter("encoding");
    }

    public void doFilter(ServletRequest request,ServletResponse response,
    FilterChain filterChain)throws IOException,ServletException{
        request.setCharacterEncoding("GBK");
        filterChain.doFilter(request,response);
        }

    //销毁
    public void destroy(){
    //encoding=""; 
    }

    }
    在web.xml中配置过滤器:
          <filter>
        <filter-name>名字</filter-name>
        <filter-class>包名.EncodingFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>名字</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    我能力有限,不知道有没有回答你的问题,但我已经尽力了,望有所帮助!祝天天进步!加油哦!