过滤器解决中文编码问题
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; } } }
相关文章推荐
- http post 请求(下)
- 里氏转换原则
- C++调用Python的配置
- instancetype & id 区别
- Maven概要
- LeetCode---Palindrome Partitioning II
- AutoCompleteTextView 分割线处理
- MVC理解
- 针对Faster RCNN具体细节以及源码的解读之RoIPooling层
- 学习心得
- Flex布局
- 206. Reverse Linked List (List)
- JavaScript如何处理解析JSON数据详解
- 《掌握需求过程》阅读笔记三
- 《掌握需求过程》阅读笔记二
- 在老男孩学习的一点想法
- 欧拉函数
- 学习心得
- 搭建VirtoCommerce2.6开发环境,同官方dev分支保持同步(下)
- SSH整合