大家调试的时用的是jbuilder下的tomcat,jbuider 每次运行程序都自动生成server8080.xml,所以中文过滤器每次加载的时候都会出现有些中文字符不能过滤的问题.比如说:
1 表单提交的数据,用request.getParameter(“xxx”)返回的字符串为乱码或者??
2 直接通过url如http://localhost/a.jsp?name=中国,这样的get请求在服务端用request[/url]. getParameter(“name”)时返回的是乱码;按tomcat4的做法设置Filter也没有用或者用request.setCharacterEncoding("GBK");也不管用.
原因:
1 tomcat的j2ee实现对表单提交即post方式提示时处理参数采用缺省的iso-8859-1来处理
2 tomcat对get方式提交的请求对query-string 处理时采用了和post方法不一样的处理方式。(与tomcat4不一样,所以设置setCharacterEncoding(“gbk”))不起作用。
解决方法:用jdls公司的过滤器(),配置web.xml
HTML 代码:
<filter>
<filter-name>EncodingFilter
</filter-name>
<filter-class>cn.com.jdls.foundation.web.EncodingFilter
</filter-class>
<init-param>
<param-name>encoding
</param-name>
<param-value>GBK
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter
</filter-name>
<url-pattern>/*
</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>EncodingFilter
</filter-name>
<url-pattern>*.do
</url-pattern>
</filter-mapping>
但这样只能过滤通过do和jsp传来的中文.如果要过滤由<a href="">
或window.location.href(url); 传来的参数必须加上下面的过滤参数.
在web.xml加入
HTML 代码:
<filter-mapping>
<filter-name>EncodingFilter
</filter-name>
<url-pattern>/*
</url-pattern>
</filter-mapping>
然后, 在你的工程下的/Tomcat/conf/server8080.xml(如果没有运行一下工程)下,去掉第二句话,
这句话就是那个以
扩起来的注释.我们可能不在意这句话,然而就是这句话决定你的过滤器是否起作用!删除这句注释,
然后在
HTML 代码:
<Connector ... URIEncoding=/"GBK/">
就可以了.以后运行程序就不会动态生成 server8080.xml
执行如下jsp页页测试是否成功
HTML 代码:
<%@ page contentType=/"text/html;charset=gb2312/"%>
<%@ page import=/"java.util.*/"%>
<% String q=request.getParameter(/"q/"); q = q == null? /"没有值/" : q; %>
<HTML>
<HEAD>
<TITLE>新闻列表显示
</TITLE>
<META http-equiv=Content-Type content=/"text/html; charset=gb2312/">
<META http-equiv=pragma content=no-cache>
<body>你提交了:
<%=q%>
<form action=/"tcnchar.jsp/" method=/"post/">
输入中文:
<input type=/"text/" name=/"q/">
<input type=/"submit/" value=/"确定/">
<a href=/"tcnchar.jsp?q=中国/">通过get方式提交
</a>
</form>
</BODY>
</HTML>
测试结果如果你输入文本框或者点超链都会显示:你提交了”中国”,说明成功!!!!!
如果部署项目时,使用的是独立的tomcat,则只需tomcat/conf/server.xml中增加URIEncoding="GBK".