我用过滤器写了一个处理乱码的类:
package com.zhdz.filter;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 EncodingFilter implements Filter {
private String charset; public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
arg0.setCharacterEncoding(charset);
arg1.setCharacterEncoding(charset);
arg2.doFilter(arg0, arg1); } public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
this.charset = arg0.getInitParameter("charset"); }}web.xml配置如下:
<filter>
<filter-name>Encoding</filter-name>
<filter-class>com.zhdz.filter.EncodingFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>但是就是不起作用,我在别的项目里都这么写都有用。那是为什么?以上哪里有错吗?或是哪里漏了步骤?请教高手。不胜感激
package com.zhdz.filter;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 EncodingFilter implements Filter {
private String charset; public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
arg0.setCharacterEncoding(charset);
arg1.setCharacterEncoding(charset);
arg2.doFilter(arg0, arg1); } public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
this.charset = arg0.getInitParameter("charset"); }}web.xml配置如下:
<filter>
<filter-name>Encoding</filter-name>
<filter-class>com.zhdz.filter.EncodingFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>但是就是不起作用,我在别的项目里都这么写都有用。那是为什么?以上哪里有错吗?或是哪里漏了步骤?请教高手。不胜感激
其他项目都是用gbk
UTF-8改为dbk
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
connectionTimeout="20000"
redirectPort="8443" />
2.项目中所有文件都设成GBK
3.过滤器中用GBKLZ检查下做到了吗
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 FilterChar implements Filter{ public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
arg0.setCharacterEncoding("UTF-8");
arg2.doFilter(arg0, arg1);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
} <filter>
<filter-name>char</filter-name>
<filter-class>org.filter.FilterChar</filter-class>
</filter>
<filter-mapping>
<filter-name>char</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
所以对于字符编码过滤器理应当排在最前面;
这种写法是只是征对<form>标签请求为method="get"时候才会有效果,对post是不起作用的,乱码这个问题很多情况,你的过滤器没有问题的话还有可能是页面包含的问题,有一次我就经历过struts配置里把一个input=""属性写成了include结果就出现了乱码怎么改也没用,找了大半天,整个项目别的页面都好好的,就这一个页面就现了问题,但是当我单独通过url方式来访问页面的时候又不会出现乱码,后来找原因才找出来是因为页面包含的时候出错了,看下是否能给你的点启示,最好先在项目里单独访问下那个页面
FORM:QQ群Java 2 Enterprise Edition(88509302)