Servlet编码过滤器(Post和get方式都支持)

来源:互联网 发布:周立波 知乎 编辑:程序博客网 时间:2024/06/02 04:15
package com.pdsu.filter;import java.io.IOException;import java.io.UnsupportedEncodingException;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.HttpServletRequestWrapper;import javax.servlet.http.HttpServletResponse;/** * 类说明:字符过滤器 *  * @author 作者: LiuJunGuang * @version 创建时间:2011-11-18 下午07:05:51 */public class CharacterEncodingFilter implements Filter {private String encode = "UTF-8";// 默认UTF-8编码public void init(FilterConfig filterConfig) throws ServletException {String encoding = filterConfig.getInitParameter("encode");if (encoding != null) {encode = encoding;}}public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) resp;// 设置request编码request.setCharacterEncoding(encode);// 设置相应信息response.setContentType("text/html;charset=" + encode);response.setCharacterEncoding(encode);chain.doFilter(new CharacterEncodingRequest(request), response);}public void destroy() {}}/** * 对Get方式传递的请求参数进行编码 */class CharacterEncodingRequest extends HttpServletRequestWrapper {private HttpServletRequest request = null;public CharacterEncodingRequest(HttpServletRequest request) {super(request);this.request = request;}/** * 对参数重新编码 */@Overridepublic String getParameter(String name) {String value = super.getParameter(name);         if(value == null)               return null;         String method = request.getMethod();if ("get".equalsIgnoreCase(method)) {try {value = new String(value.getBytes("ISO8859-1"),request.getCharacterEncoding());} catch (UnsupportedEncodingException e) {e.printStackTrace();}}return value;}}

在web.xml中添加如下内容:

<filter>  <filter-name>characterEncodingFilter</filter-name>  <filter-class>com.pdsu.filter.CharacterEncodingFilter</filter-class>  <init-param>  <param-name>encode</param-name>  <param-value>UTF-8</param-value>  </init-param>  </filter>  <filter-mapping>  <filter-name>characterEncodingFilter</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping>


原创粉丝点击