过滤器解决中文编码问题

一. Servlet过滤器简介

Servlet过滤器实际上就是一个标准的java类,这个类通过实现Filter接口获得过滤器的功能。它在jsp容器启动的时候通过web.xml配置文件被系统加载。
Servlet过滤器在接收到用户请求的时候被调用,当服务器接收到用户的请求的时候,依次调用配置好的过滤器,完成后将执行请求所要求的servlet,而servlet执行后的响应,则先通过配置好的过滤器后再发送给用户。

二. 过滤器的用途

1、用户认证和授权管理。
2、统计web应用的访问量和访问命中率,生成访问报告。
3、实现web应用的日志处理功能。
4、实现数据压缩功能。
5、对传输的数据进行加密。
6、实现xml文件的XSLT的转换。
一个servlet过滤器其实是一个java类,它的实现需要分为两个部分,java类自身以及在web.xml文件中的XML描述。对于filter接口,该接口由一对描述的生命周期的方法init(),destroy(),init方法在服务器初始化过滤器的时候会调用,而destory方法在服务器关闭的时候会调用,还有一个行为方法doFilter方法会在执行过滤操作的时候调用.

三. 使用过滤器解决中文编码问题

由于java的默认编码方式是ISO-8859-1,而通常编写中文应用程序的时候都是使用utf-8或gbk编码方式。在这种情况下,应在页面的首部通过<%@ page contentType=”text/html;charset=gbk”%>命令来指定页面的编码方式。这样中文页面就可以正常地显示了。但是如果页面中村中表单。如一个input输入框,如果访问者在其中输入中文,又提交到某个servlet进行处理的话,java会首先按ISO-5589-1的默认方式对这段文本进行编码,然后交给servet处理,处理后的文本将还是以ISO-5589-1编码方式村中,如果这个时候这个文本返回一个按GBK编码来显示的页面,由于编码格式的不同,很显然得不到正确的显示结果。

1.Servlet过滤器的配置
Servet过滤器需要通过web应用程序部署描述符文件web.xml来部署到应用中。配置如下

<filter>
        <filter-name>encodingFilter</filter-name>
/**
* encodingFilter是过滤器名
*/
        <filter-class>com.zjn.util.CharacterEncodingFilter</filter-class>
/**
* com.zjn.util.CharacterEncodingFilter是过滤器位置
*/
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

2. 过滤器源码

package com.zjn.util;
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;
/**
 * 过滤器解决中文编码问题
 */
public class CharacterEncodingFilter implements Filter {
    private FilterConfig config;
    private String encoding = "ISO8859_1";
    public void destroy() {
        config = null;
    }
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding(encoding);
        chain.doFilter(request, response);
    }
    public void init(FilterConfig config) throws ServletException {
        this.config = config;
        String s = config.getInitParameter("encoding");
        if (s != null) {
            encoding = s;
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值