[java]如何使用过滤器解决jsp乱码
1、打开web项目,在src中新建一个类,规范一下编程习惯我们就把它放到一个包中去,项目右键新建“class”,包名填写例如“com.test.struts.filters”(习惯是域名反转),文件名首字母大写,例如“SetCharacterEncoding”。下面是类中的代码,实际上就是实现了Filter接口,重写了一下doFilter函数。
package com.test.hibernate.filters;
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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SetCharacterEncoding implements Filter {
/* (non-Javadoc)
* @see com.sun.net.httpserver.Filter#doFilter(com.sun.net.httpserver.HttpExchange, com.sun.net.httpserver.Filter.Chain)
*/
public void doFilter(ServletRequest srequest, ServletResponse sresponse,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)srequest;
HttpServletResponse response = (HttpServletResponse)sresponse;
// 注意这里请求和响应都强制转化了一下
request.setCharacterEncoding("UTF-8"); //设置请求编码“UTF-8”比较通用
response.setCharacterEncoding("UTF-8"); //设置相应编码
chain.doFilter(srequest, sresponse);//转发请求
}
public void destroy() {
// TODO Auto-generated method stub
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
2、web配置文件配置filter文件,打开web.xml文件,在<web-app></web-app>之间加入如下配置,<filter></filter>是设置类路径的,<filter-mapping></filter-mapping>是用来映射指定路径文件到filter的。
<filter>
<filter-name>setEncoding</filter-name>
<filter-class>com.test.struts.filters.SetCharacterEncodingFilter</filter-class>
<!--这里还可以使用初始变量
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param>
再在SetCharacterEncoding.java的定义一个 private String encoding = null;
在init函数中加一句this.encoding = filterConfig.getInitParameter("encoding");
-->
</filter>
<filter-mapping>
<filter-name>setEncoding</filter-name><!--这个名称和上面的要相同 -->
<url-pattern>/*</url-pattern><!--所有文件 -->
</filter-mapping>
3、配置完后运行一下项目就不再看到那烦人的乱码了!