首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

tomacat5.028+Eclipse3.2+structs+sqlserver2000 中文乱码,该怎么解决

2012-01-05 
tomacat5.028+Eclipse3.2+structs+sqlserver2000中文乱码用java开发一个简单的web应用,tomcat的server.xml

tomacat5.028+Eclipse3.2+structs+sqlserver2000 中文乱码
用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>
--------------------------------------

[解决办法]
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);
}
}

[解决办法]
设置的字符集的地方有重复

[解决办法]
试试这样设置,楼上的老兄说得有理
<%@ 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 属性了,设置两遍当然会成乱码了,第一遍其实已经是中文了,再设置一编就又成乱码了

热点排行