使用Filter过滤器解决字符编码问题

来源:互联网 发布:网络安全法试题及答案 编辑:程序博客网 时间:2024/06/03 12:30

Java中的字符编码,默认为:ISO-8859-1(西方编码)。这种编码方式为单字节码,只支持英文、俄文、葡萄牙文等乱七八糟文,不支持中文。因此,我们需要对JSP页面或者Servlet中进行字符编码集的处理,国际编码(UTF-8)。

  • 在JSP页面中把最上方标签中的字符编码ISO-8859-1改为UTF-8即可。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

  • 在Servlet中我们最常用的是设置下方代码进行解决乱码问题:

request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");

或者是:

request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");

然而,上面这两种是我们最常用的方式,但是在大型项目中,我们写这么多解决字符编码集的代码,是不是所谓“重复性的垃圾代码”?所以,我们最好的解决方法是在项目中写一个处理字符编码的过滤器。(Filter)

下面是字符编码Filter的设置方法:

package com.aaa.filter;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;/** * @Discription 字符编码过滤器 * @author *** * @company *** * @date 2017-11-18 **/public class CharsetEncodingFilter implements Filter {  private static String encoding; // 定义变量接收初始化的值public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// 设置字符编码链锁request.setCharacterEncoding(encoding);response.setCharacterEncoding(encoding);chain.doFilter(request, response);}// 初始化public void init(FilterConfig config) throws ServletException {// 接收web.xml配置文件中的初始参数encoding = config.getInitParameter("CharsetEncoding");}}


下面为web.xml配置文件中的代码:(跟servlet中的配置文件格式相似)

  <filter>  <filter-name>charsetEncodingFilter</filter-name>  <filter-class>com.aaa.filter.CharsetEncodingFilter</filter-class>  <init-param>  <param-name>CharsetEncoding</param-name>  <param-value>UTF-8</param-value>  </init-param>  </filter>    <filter-mapping>  <filter-name>charsetEncodingFilter</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping>


filter中的filter-name 为过滤器名,可以随便起(但是最好见名知意)。filter-class 为要配置filter类的类全名。init-param为初始化参数,param-name为初始化参数的名,param-value为参数的值。


filter-mapping中的filter-name必须和上面filter中的filter-name相同。url-pattern为过滤的范围,此处写 /* 代表过滤所有的请求。 



使用过滤器来自动过滤我们项目中的每一个参数编码,我们就不用麻烦的为每一个参数进行转码了,一个过滤器解决了所有乱码问题。






原创粉丝点击