当在做程序的是你也许会遇到一些很让你恼火的乱码问题,就是在你在页面传参数或向数据库里插入数据或去值的时候会出现乱码的问题,其实有很多解决办法比如:添加request.setCharacterEncoding("GB18030");或在取值的时候用String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"gbk");等但有时仍然会遇到一些问题:下面给大家扔一个用过滤器解决此恩体的例子:
首先:定义一个类CharsetEncodingFilter让它实现javax.servlet.Filter接口
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*; // For Date class
/** Simple filter that prints a report on the standard output
* each time an associated servlet or JSP page is accessed.
*/
String encoding;
//定义一个成员变量用于在init()方法里得到配置文件里<init-param>中对应 <paramname>encoding</param-name> 的 <param-value>GB18030</param-value>值;其中GB18030值可以更改比如gbk等;
public class CharsetEncodingFilter implements javax.servlet.Filter {
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws ServletException, IOException {
//1,doFilter方法的第一个参数为 ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为 ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
HttpServletRequest request = (HttpServletRequest)request;//如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在 ServletRequest中无法得到的方法,就要把此request对象构造成HttpServletRequest。
request.setCharacterEncodeing(encoding);
chain.doFilter(request,response);
//2.调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或 JSP页面被激活。
}
public void init(FilterConfig config)throws ServletException {
encoding = FilterConfig.getInitParameter("encoding");//FilterConfig对象具有一个 getInitParameter方法,它能够访问部署描述符件 //(web.xml)中分配的过滤器初始化参数
}
public void destroy() {}
}
然后在配置文件web.xml里添加: (请注意,过滤是在serlvet规范2.3版中初次引入的。因此,web.xml文件必须使用DTD的2.3版本。)
<filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.util.filter.CharsetEncodingFilter</filter-class>//class必须是完整路径
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>//表示对所有jsp文件有效
filter元素位于部署描述符文件(web.xml)的前部,所有filter-mapping、servlet或servlet-mapping元素之前。filter元素具有如下六个可能的子元素:
icon 这是一个可选的元素,它声明IDE能够使用的一个图象文件。
filter-name 这是一个必需的元素,它给过滤器分配一个选定的名字。
display-name 这是一个可选的元素,它给出IDE使用的短名称。
description 这也是一个可选的元素,它给出IDE的信息,提供文本文档。
filter-class 这是一个必需的元素,它指定过滤器实现类的完全限定名。
init-param 这是一个可选的元素,它定义可利用FilterConfig的getInitParameter方法读