用java开发一个简单的web应用,tomcat的server.xml中设置URIEncoding="GBK",JSP页面中也加了如下语句:
1、<%@ page contentType="text/html;charset=GBK" language="java"  pageEncoding="GBK" %>
2、<META http-equiv=Content-Type content="text/html; charset=GBK">
每次都是第一次启动tomcat时显示正确,在“包资源管理器”工作区中点“刷新”后,再次打开浏览器时出现乱码,而且编译后的jsp里中文也是显示乱码,折腾一天了,哪位高手帮帮我吧,非常感谢!以下是bbsLogin.jsp的代码:
其中:“用户名”对应的乱码是:鐢ㄦ埛鍚嶏細
       “验证码”对应的乱码是:楠岃瘉鐮侊細
——---------------------------------------------------------------
<%@ page contentType="text/html;charset=GBK" language="java"  pageEncoding="GBK" %><HTML>
<HEAD>
<TITLE>教育在线论坛</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=GBK">
</HEAD>
<LINK 
href="images/style.css" type=text/css rel=stylesheet><BODY>
<TABLE style="MARGIN-TOP: 10px" width=700 align=center border=0>
  <TBODY>
  <TR>
    <TD align=middle><IMG SRC="images/logo.jpg" BORDER=0 ></TD>
  </TR>
  <TR>
    <TD align=middle><IMG height=3 src="images/white.gif" width=10></TD>
  </TR>
  </TBODY>
</TABLE>
<TABLE width=800 align=center border=0>
  <TBODY>
  <TR>
    <TD width=99>&nbsp;</TD>
    <TD>
      <TABLE height=107 cellSpacing=0 cellPadding=0 width=636 border=0>
        <FORM name=FromLogin action="login.do" method=post>
        <TBODY>
        <TR>
          <TD background="images/202.jpg" height=107 colSpan=2>
  <IMG height=107 src="images/201.gif" width=21>
  </TD>
  <TD></TD>
  <TD></TD>
  <TD></TD>
          <TD vAlign=top background="images/202.jpg">
            <TABLE style="MARGIN-TOP: 25px" cellSpacing=0 cellPadding=0 
            width="100%" border=0>
              <TBODY>
              <TR>
               <TD width=210 height=24 fontsize=10>用户名:
               <INPUT class=input2 
                  style="WIDTH: 140px" maxLength=20 name=username></TD>
                <TD></TD></TR>
                              <TR>
                <TD width=210 height=24>密&nbsp;&nbsp;码:
                <INPUT class=input2 style="WIDTH: 140px" 
                  type=password maxLength=20 name=password></TD>
                
                
                </TR>
            
            <TR>
               <TD width=210 height=24 fontsize=10>验证码:
               <INPUT class=input2 
                  style="WIDTH: 140px" maxLength=8 name=rand>&nbsp;&nbsp;</TD>
                <TD><img border=1 src="image.jsp" alt="3"></TD>
                <TD>&nbsp;&nbsp;&nbsp;&nbsp;<INPUT type=image height=17 width=38 
                  src="images/button.gif" value=登录 
            name=image></TD></TR>
            
            </TBODY></TABLE></TD>
          <TD vAlign=top background="images/202.jpg">
            <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
              <TBODY>
              <TR>
                <TD></TD>
                <TD align=middle>
<A href="login.do?username=guest"><IMG 
                  height=66 src="images/b012.gif" width=47 border=0 
                  name=Image11></A> </TD>
                <TD align=middle>
<A href="regist.do"><IMG height=66 
                  src="images/b022.gif" width=58 border=0 name=Image12></A> 
                </TD>
                </TR></TBODY>
</TABLE>
  </TD>
          <TD vAlign=top align=right width=25 background=images/202.jpg>
  <IMG height=107 src="images/203.jpg" width=19></TD>
  </TR></FORM></TBODY></TABLE></TD></TR></TBODY></TABLE>
<DIV align=center>Study Online 版权所有</DIV>
</BODY>
</HTML>
--------------------------------------------------------------------------

解决方案 »

  1.   

    可以编写个一编码过滤类
    然后再web.xml文件里配置它
    就好了
    我前不久刚刚解决了这个事,试了好多的方法,最后还是用这个过滤器弄好了
      

  2.   

    我跟lz用的差不多,不过我是mysql 5这个,好像跟浏览器有关,你一刷新,页面编码(查看->编码)就变成其他的了.我这样做就好
    建立tomcatProject后,先把project属性改为utf-8字符集。
    然后页面也设为utf-8
    <%@ page contentType="text/html; charset=UTF-8" %>至于页面传值的乱码,struts里有更高效的方法:使用<controller>,就是struts-config.xml里配制的那个东东,不好意思,代码不记得了,你搜索下吧
      

  3.   

    package utilclass;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.RequestProcessor;
    public class MyRequestProcessor extends RequestProcessor {

    public MyRequestProcessor() {}

    // 在处理请求前作的处理
    protected boolean processPreprocess( HttpServletRequest request,
                                         HttpServletResponse response ){
     
     try{
       request.setCharacterEncoding("UTF-8");

     }
     catch(Exception ex){
    System.out.println("字符集设置失败");
     
     }
     
     return true;
    }}
    然后修改配制<controller>的class为以上类的路径
      

  4.   

    非常感谢楼上的各位同志,可是还是解决不了,我把所有的字符全设成"GBK"了,设置tomcat里的URIEncoding="GBK",将MyRequestProcessor里的字符也设成"GBK",页面上也加了
    1、<%@ page contentType="text/html;charset=GBK" language="java"  pageEncoding="GBK" %>
    2、<META http-equiv=Content-Type content="text/html; charset=GBK">
    我也写了过滤器,代码如下:
    1.FilterEncoding.jsva
    ------------------------------------------
    package filters;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; /** * @author n-liang * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */public class FilterEncoding implements Filter {       private FilterConfig filterConfig=null;       private String encoding=null;        /* (non-Javadoc)        * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)        */       public void init(FilterConfig filterConfig) throws ServletException {              this.filterConfig=filterConfig;              this.encoding=filterConfig.getInitParameter("encoding");       }        /* (non-Javadoc)        * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)        */       public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {              String encoding=this.encoding;              if(encoding!=null)              {              request.setCharacterEncoding(encoding);   
                 
                  }              chain.doFilter(request, response);       }        /* (non-Javadoc)        * @see javax.servlet.Filter#destroy()        */       public void destroy() {              this.encoding=null;              this.filterConfig=null;                     }   }
    ----------------------------------
    2.web.xml配置如下:
      <filter>                   
      <filter-name>SetEncoding</filter-name>   
      <filter-class>filters.FilterEncoding</filter-class>                   
      <init-param>                           
      <param-name>encoding</param-name>                           
      <param-value>GBK</param-value>                   
      </init-param>           
      </filter>                   
      <filter-mapping>                   
      <filter-name>SetEncoding</filter-name>   
      <url-pattern>/*</url-pattern>           
      </filter-mapping>
    --------------------
    我在网上搜的方法都用遍了,还是,一刷新就是中文乱码,现在还有一个问题就是一些jsp文件编译后的.java文件也报错,我查了一下,发现编译后的文件因为缺少\而报错。
    希望有好心人给出一个彻底的解决方案,谢谢大伙了!
      

  5.   

    问了几个搞JSP的高手了,都没能解决,难道真的这么难吗?
      

  6.   

    编码转换错误,java内部编码是iso8859-1
    字符集最好用UTF-8
      

  7.   

    在web.xml最后加上
     <locale-encoding-mapping-list>
      <locale-encoding-mapping>
       <locale>zh</locale>
       <encoding>gb2312</encoding>
      </locale-encoding-mapping>
     </locale-encoding-mapping-list>
      

  8.   

    J2EE UTF-8乱码解决方案总结
    环境:
    WindowsXP中文
    Eclipse3.2.1+Myeclipse5.1.0GA
    Tomcat5.5
    JDK1.5.0
    Hibernate3.1
    Mysql5.0+ mysql-connector-java-5.0.4-bin.jar方案:
    1.集成开发环境Eclipse中设置文本文件存储编码为UTF-8。
    //我想是因为….如果所做工程项目最终要在别的版本操作系统的服务器上跑,这里需要设置(未经证实)
    2.数据库mysql,默认编码使用utf8;
    并且创建数据库时在语句后面追加DEFAULT CHARSET=utf8;set names utf8;
    //如果数据库默认编码是utf8,那这个也不是必需的吧(未经证实)
    3.跟数据库连接的URL:Hibernate URL:
    jdbc:mysql://127.0.0.1:3306/addressbook?useUnicode=true&characterEncoding=utf8
    //如果数据库默认编码是utf8,那这个也不是必需的吧(未经证实)
    4.使用过滤器,过滤器文件代码见后面附1。
    <filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>org.biti.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
        </init-param>
     </filter>
     <filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
        <url-pattern>/*</url-pattern>
     </filter-mapping>
    //过滤的是post还是get还没弄明白,据说只过滤器中一个,另一个见5。
    5.修改Tomcat配置文件server.xml中Connector部分
    <Connector port="80"               
    maxHttpHeaderSize="8192"
        maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
        enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" />
    加入URIEncoding="UTF-8"一项。
    //我现在这个没乱码的就没有设置….附1:SetCharacterEncodingFilter.java(可在Tomcat示例源码中找到)
    package org.biti.filters;
    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 SetCharacterEncodingFilter implements Filter {
    protected String encoding = null;
    protected FilterConfig filterConfig = null;
    protected boolean ignore = true;
    public void destroy() {
    this.encoding = null;
    this.filterConfig = null;
    }
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    if (ignore || (request.getCharacterEncoding() == null)) {
    String encoding = selectEncoding(request);
    if (encoding != null)
    request.setCharacterEncoding(encoding);
    }
    chain.doFilter(request, response);
    }
    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 String selectEncoding(ServletRequest request) {
    return (this.encoding);
    }
    }
      

  9.   

    试试这样设置,楼上的老兄说得有理
    <%@ page contentType="text/html;charset=GBK" language="java" %><HTML>
    <HEAD>
    <TITLE>教育在线论坛</TITLE>
    </HEAD>
    <LINK 
    href="images/style.css" type=text/css rel=stylesheet>page指令里面设置了contentType属性就不要设置pageEncoding 属性了,设置两遍当然会成乱码了,第一遍其实已经是中文了,再设置一编就又成乱码了