JSP页面中容易出现中文乱码问题,为了避免每次使用的时候都要重新设置一下编码方式,编写下面的Filter类,然后在web.xml中配置相关的属性以后,就可以自动处理中文乱码问题了。
首先我们在新创建的webProject中创建一个com.demo.servlet包,然后在该包下面创建一个Filter类FilterServlet.java,其中代码如下所示:
package com.demo.servlet;
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 FilterServlet implements Filter {
//设置编码方式
private String charset="";
//设置过滤器的开关状态
private boolean enable=false;
public void destroy() {
System.out.println("过滤器销毁!");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
if(enable==true&&charset!=""){
request.setCharacterEncoding(charset);//此处的charset是上面已定义好的
response.setCharacterEncoding(charset);
}
arg2.doFilter(request, response);//执行过滤器操作
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
this.enable="true".equals(arg0.getInitParameter("enable"));
this.charset=arg0.getInitParameter("charset");
System.out.println("过滤器初始化:"+"\t"+"开关状态:"+this.enable+"---->"+"编码方式:"+this.charset);
}
}
上面的过滤器类编写完以后,接着配置web.xml:在web.xml中添加有关Filter类的如下配置
<!-- 配置filter类 -->
<filter>
<!-- 配置filter的名称:在这里指的是过滤器的类名 -->
<filter-name>FilterServlet</filter-name>
<!-- 配置filter类的完整路径:包名+类名 -->
<filter-class>com.demo.servlet.FilterServlet</filter-class>
<!-- 配置filter类中的定义的属性和对应的值 -->
<init-param>
<!-- 配置filter类中enable的属性,即开关的状态 -->
<param-name>enable</param-name>
<!-- 配置filter类中enable属性的值,若为true,开关状态的开;若为false,开关状态为闭;
开关必须在开着的状态下才能初始化过滤器,所以设置为true-->
<param-value>true</param-value>
</init-param>
<init-param>
<!-- 设置编码方式 -->
<param-name>charset</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<!-- 配置filter类 的映射-->
<filter-mapping>
<!-- 配置过滤器名称,和上面的filter-name一致 -->
<filter-name>FilterServlet</filter-name>
<!-- 配置filter类 的url路径-->
<url-pattern>/*</url-pattern>
</filter-mapping>