Servlet过滤器是一个Web应用组件,和Servlet类似,也需要在Web应用配置文件中进行配置:首先是过滤器的Web应用定义包含在<filter>…</filer>元素中,其次是Web应用的过滤器映射配置文件<filter-mapping>…</filter-mapping>
过滤器的应用很广泛,在这里介绍利用过滤器进行中文转码。一般在JavaWeb应用中,当利用request.getParameter(String str)方法获取从表单或是页面传过来的中文参数都会是一个乱码。通常会采用如下的转码方式在Servlet或是JSP中进行转码设置:
(1)request.setCharacterEncoding("gb2312");
(2)String username = request.getParameter("username");
username = new String(username.getBytes("ISO-8859-1"), "GB2312");
假设:一个表单有多数据传到Servlet或是JSP,那么就可能在这些Servlet或是JSP中写下多个request.setCharacterEncoding("gb2312")或是多个类似于String username = request.getParameter("username");
username = new String(username.getBytes("ISO-8859-1"), "GB2312");这样子肯定加大代码工作量。
针对上面的一些常见的问题,下面利用过滤器进行中文转码就可以迎刃而解。配置Filter的步骤如下:
(1)现在web.xml文件中配置如下信息
<filter>
<filter-name>CharactsetConversion</filter-name>
<filter-class>com.gxa.edu.servlet.CharactsetConversion</filter-class>
<init-param>
<param-name>flag</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>charcode</param-name>
<param-value>gb2312</param-value>
</init-param>
</filter>
<filter-mapping>
<!-- 配置需要过滤的URL,这里主要是对所有的文件进行过滤 -->
<filter-name>CharactsetConversion</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
当配置好web.xml文件后,就创建一个过滤器类,名称CharactsetConversion,该类必须实现Filter接口,同时Filter接口提供了3个方法
(1)void doFilter(ServletRequest req,ServletResponse res,FilterChain filterChain)
(2)void init(FilterConfig filterConfig)
(3)void destroy()
(2)创建一个CharactsetConversion.java文件,该文件了实现Filter接口
package com.gxa.edu.servlet;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharactsetConversion implements Filter{
private FilterConfig filterConfig = null;
private boolean flag = true;
private String charcode = "gb2312";
public void init(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
String temp = this.filterConfig.getInitParameter("flag");
String str = this.filterConfig.getInitParameter("charcode");
if(temp != null){
if(temp.equals("true")){
this.flag = true;
}else if(temp.equals("false")){
this.flag = false;
}else{
this.flag = true;
}
}
if(str != null){
this.charcode = str;
}
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain filterChain) {
try {
if (flag) {
String c = request.getCharacterEncoding();
if (c == null) {
request.setCharacterEncoding(charcode);
} else if (!c.equals(this.charcode)) {
request.setCharacterEncoding(charcode);
}
}
filterChain.doFilter(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
public void destroy() {
this.filterConfig = null;
}
}
分享到:
相关推荐
利用过滤器解决JavaWeb(JSP)的乱码问题
JSP利用过滤器解决request中文乱码问题.docx
主要介绍了JSP利用过滤器解决request中文乱码问题,感兴趣的小伙伴们可以参考一下
利用过滤器(filter)解决myeclipse中的乱码问题,包含过滤器源代码,不懂的加Q9402055517。
使用filter过滤器解决中文乱码问题,包含源码,以及filter的配置,希望能帮上大家
简单,易懂,利用过滤器和请求处理器来解决项目中的中文乱码问题
struts文件的上传下载功能实现,并利用过滤器解决了相应的中文乱码问题
结合各种不同的编码器,能够在不同的音频格式间进行转换,并自动添加标签(tagging),此外还能够将视频文件的音轨转换成独立的音频文件(如VOB->MP3),并可以使用各种音频过滤器(如resample、normalize等)。...
此外,您还可以利用解码器选项,处理工具,过滤器,配置帧速率,字形编辑器等等。 当然,就像任何其他应用程序一样,Avidemux 也有其自身的一些缺点。例如,该程序没有内置的帮助文件(对于初次使用的用户来说可能...
24.3 利用子树合并跟踪上游改动/ 351 24.4 子树拆分/ 353 24.5 git-subtree 插件/ 353 第25章 Android 式多版本库协同/ 356 25.1 关于 repo/ 357 25.2 安装 repo/ 357 25.3 repo和清单库的初始化/ 359 25.4 清单库和...
让你短时间内由一名菜鸟到高手绝对没问题! 由于权限有限,分3部份下载 ... 《PHP程序开发范例宝典》全面介绍了应用PHP进行网站开发的各种技术和技巧。... ...实例253 利用having语句过滤分组数据 390 ...
实例040 循环体的过滤器 49 实例041 循环的极限 50 第3章 数组与集合的应用 51 3.1 数组演练 52 实例042 获取一维数组最小值 52 实例043 将二维数组中的行列互换 53 实例044 利用数组随机抽取幸运观众 54 实例045 用...
实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...
实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...