转码的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 "
[解决办法]
URIEncoding= "UTF-8 "
所有你能想到的要设置编码的都改成utf-8
[解决办法]
这么多带**的,把他的问题弄得那么复杂化了~~试试我这个方法:
public class MyActionServlet extends ActionServlet {
@Override
protected void process(HttpServletRequest arg0, HttpServletResponse arg1)
throws IOException, ServletException {
// 转换编码为utf-8
arg0.setCharacterEncoding( "utf-8 ");
super.process(arg0, arg1);
}
}
然后,在web.xml里面将这句:
<servlet-class> org.apache.struts.action.ActionServlet </servlet-class>
替换成 <servlet-class> 你的这个类所在的完整路径(如:com.util.MyActionServlet) </servlet-class>