用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> </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>密 码:
<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> </TD>
<TD><img border=1 src="image.jsp" alt="3"></TD>
<TD> <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、<%@ 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> </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>密 码:
<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> </TD>
<TD><img border=1 src="image.jsp" alt="3"></TD>
<TD> <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>
--------------------------------------------------------------------------
解决方案 »
- 如何将web工程打包成安装文件(tomcat5.5+jdk1.5+sqlserver2000)(在线等,求高手,回答地详细点。拜托了)
- 如何实现: 用户单击网页上的链接,弹出保存对话框后单击打开,然后修改内容后保存,再单击网页上的上传按钮直接上传附件,而不需要指定路径?
- 请教struts1中的问题
- 快来帮我啊,我一直在线 JDBC for MS-SQL连接问题
- 怎么在服务器端启动就加载一段代码
- 页面间动态计算问题
- 新手请教各位师傅
- 各位大侠:解决关于列表框的问题
- 那为兄台有用jbuilder编写的bbs系统,请给在下邮一份 谢谢
- jsp如何调用servlet
- 跪求一段js代码
- JSP中的变量为什么在JavaScript中不能用?
然后再web.xml文件里配置它
就好了
我前不久刚刚解决了这个事,试了好多的方法,最后还是用这个过滤器弄好了
建立tomcatProject后,先把project属性改为utf-8字符集。
然后页面也设为utf-8
<%@ page contentType="text/html; charset=UTF-8" %>至于页面传值的乱码,struts里有更高效的方法:使用<controller>,就是struts-config.xml里配制的那个东东,不好意思,代码不记得了,你搜索下吧
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为以上类的路径
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文件也报错,我查了一下,发现编译后的文件因为缺少\而报错。
希望有好心人给出一个彻底的解决方案,谢谢大伙了!
字符集最好用UTF-8
<locale-encoding-mapping-list>
<locale-encoding-mapping>
<locale>zh</locale>
<encoding>gb2312</encoding>
</locale-encoding-mapping>
</locale-encoding-mapping-list>
环境:
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 属性了,设置两遍当然会成乱码了,第一遍其实已经是中文了,再设置一编就又成乱码了