您的位置:首页 > 其它

过滤器解决中文编码问题

2015-12-28 19:13 281 查看

一. 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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: