- 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 SetCharacterEncodingFilter implements Filter { //要实现Filter接口
- //存储编码格式信息
- private String encode = null;
- public void destroy(){
- }
- public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)
- throws IOException,ServletException{
- //转换
- HttpServletRequest request = (HttpServletRequest)req;
- HttpServletResponse response = (HttpServletResponse)resp;
- /*
- * 判断在web.xml文件中是否配置了编码格式的信息
- * 如果为空,则设置编码格式为配置文件中的编码格式
- * 否则编码格式设置为GBK
- */
- if(this.encode != null && !this.encode.equals("")){
- request.setCharacterEncoding(this.encode);
- response.setCharacterEncoding(this.encode);
- }else{
- request.setCharacterEncoding("GBK");
- response.setCharacterEncoding("GBK");
- }
- /*
- * 使用doFilter方法调用链中的下一个过滤器或目标资源(servlet或JSP页面)。
- * chain.doFilter处理过滤器的其余部分(如果有的话),最终处理请求的servlet或JSP页面。
- */
- chain.doFilter(request, response);
- }
- public void init(FilterConfig config) throws ServletException{
- //获取在web.xml文件中配置了的编码格式的信息
- this.encode = config.getInitParameter("encode");
- }
- }
在web.xml文件中的配置信息如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <!-- 过滤器配置信息 -->
- <filter>
- <filter-name>SetCharacterEncodingFilter</filter-name>
- <!-- 过滤器设置编码文件 -->
- <filter-class>
- ssh.dlc.chp1.filter.SetCharacterEncodingFilter
- </filter-class>
- <init-param>
- <!--
- init-param元素定义了过滤器的初始化参数
- -->
- <description>给参数和值设置名称和编码类型</description>
- <param-name>encode</param-name>
- <param-value>GBK</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <!--
- filter-mapping告诉容器所有与模式向匹配的请求都应该允许通过访问控制过滤器。
- 所有以.do结尾的访问都先通过过滤器文件过滤
- -->
- <filter-name>SetCharacterEncodingFilter</filter-name>
- <url-pattern>*.do</url-pattern>
- </filter-mapping>
- </web-app>