[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、配置完后运行一下项目就不再看到那烦人的乱码了!