日期:2014-05-18  浏览次数:20809 次

转码的Filter问题
我的环境:
Struts2+Spring2+Hibernate3
Tomcat5.0.28/JBoss4.0.5
-------------------------------------------------------
web.xml配置:
<filter>
<filter-name> EncodingFilter </filter-name>
<filter-class> com.stie.util.EncodingFilter </filter-class>
<init-param>
                        <param-name> Encoding </param-name>
                        <param-value> UTF-8 </param-value>
                </init-param>
</filter>
<filter-mapping>
<filter-name> EncodingFilter </filter-name>
<url-pattern> *.jsp </url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name> EncodingFilter </filter-name>
<url-pattern> *.action </url-pattern>
</filter-mapping>
--------------------------------------
Filter如下:
public   class   EncodingFilter   implements   Filter   {
private   String   encoding   =   "UTF-8 ";

public   void   init(FilterConfig   fc)   throws   ServletException   {
String   s   =   fc.getInitParameter( "Encoding ");
if   (s   !=   null)   {
this.encoding   =   s;
}
}

public   void   doFilter(ServletRequest   request,   ServletResponse   response,
FilterChain   fc)   throws   IOException,   ServletException   {
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
fc.doFilter(request,   response);
}

public   void   destroy()   {
this.encoding   =   "UTF-8 ";
}
}
-----------------------------------------------------
JSP中已加编码:
<%@page   language= "JAVA "   pageEncoding= "UTF-8 "   %>
----------------------
Filter是放在其他filter之前的.这个Filter加了之后我存取数据库的信息全是正确的,全部能显示中文,唯独郁闷的地方是我在URL中传中文参数或直接用request.getParameter( "xxx ")去取值的时候还是乱码.

当然能在TOMCAT配置文件里加   URIEncoding= "UTF-8 "   解决这个问题,可是有点不甘心,有没有一个办法彻底解决这个问题.

是我的filter或其他什么地方出问题才导致中文参数乱的吗?欢迎各位朋友解决方案.

------解决方案--------------------
<%@ page language= "java " contentType= "text/html; charset=UTF-8 " pageEncoding= "UTF-8 "%>

<meta http-equiv= "Content-Type " content= "text/html; charset=UTF-8 ">

两句都加上看看
------解决方案--------------------
URL中含有中文参数或特殊字符时,一般用encodeURI(url)进行编码。
------解决方案--------------------
解决办法就是这个:

URIEncoding= "UTF-8 "

不知道你觉得这样解决有什么问题?
------解决方案--------------------
因为Tomcat处理get和post两种提交的数据时处理方式不同
------解决方案--------------------
这是tomcat的自身问题,老外是单字节的文字,所以很喜欢用iso-8859-1作为默认属性。

特备是在tomcat5.x版本以后,如dreamover(梦醒了〖http://hellfire.cn〗) 所说get和post两种提交的数据时处理方式不同。所以你还需要在TOMCAT配置文件里加 URIEncoding= "UTF-8 "
------解决方案--------------------