java过滤器应用实例_Java Web 过滤器的典型应用

在 Java Web 项目的开发中,过滤器的应用十分广泛,其中比较典型的应用就是字符编码过滤器。由于 Java 程序可以在多种平台下运行,其内部使用 Unicode 字符集来表示字符,所以处理中文数据会产生乱码情况,需要对其进行编码转换才可以正常显示。

(1)创建字符编码过滤器类 CharacterEncodingFilter,此类实现了 Filter 接口,并对其3个方法进行了实现。代码如下:

/*** 这是一个字符编码的过滤器

*@authorph*/

public class CharacterEncodingFilter implementsFilter {//字符编码初始化

protected String encoding = null;//FilterConfig 对象

protected FilterConfig filterConfig = null;//初始化方法

public void init(FilterConfig filterconfig) throwsServletException {//对 filterConfig 赋值

this.filterConfig =filterconfig;//对初始化参数赋值

this.encoding = filterconfig.getInitParameter("encoding");

}//过滤器处理方法

public voiddoFilter(ServletRequest servletrequest,

ServletResponse servletresponse, FilterChain filterchain)throwsIOException, ServletException {//判断字符编码是否有效

if(encoding != null) {//设置 request 字符编码

servletrequest.setCharacterEncoding(encoding);//设置 response 字符编码

servletresponse.setContentType("text/html;charset=" +encoding);

}//传递给下一个过过滤器

filterchain.doFilter(servletrequest, servletresponse);

}//销毁方法

public voiddestroy() {//释放资源

this.encoding = null;this.filterConfig = null;

}

}

CharacterEncodingFilter 类的 init() 方法用于读取过滤器的初始化参数,这个参数(encoding)为此例中所用到的字符编码;在 doFilter() 方法中,分别将 request 对象及 response 对象中的编码格式设置为读取到的编码格式;最后在destroy() 方法中将其属性设置为 null,将被 Java 垃圾回收器回收。

(2)在 web.xml 文件中,对过滤器进行配置。代码如下:

CharacterEncodingFilter

com.ph.util.CharacterEncodingFilter

encoding

utf-8

CharacterEncodingFilter

/*

REQUEST

FORWARD

附上 dispatcher 的可选值及说明

dispatcher 的可选值及说明

可选值

说明

REQUEST

当客户端直接请求时,通过过滤器进行处理

INCLUDE

当客户端通过 RequestDispatcher 对象的 include() 方法请求时,通过过滤器处理

FORWARD

当客户端通过 RequestDispatcher 对象的 forward() 方法请求时,通过过滤器进行处理

ERROR

当声明式异常产生时,通过过滤器进行处理

(3)通过请求对过滤器进行验证,使用表单向 Servlet 发送中文信息进行测试,其中表单信息放置在 index.jsp 页面中。代码如下:

请输入您的姓名:

这一请求由 Servlet 对象 MyServlet 类进行处理,此类使用 doPost() 方法接收表单请求,并将表单中的 name 属性输出到页面中。代码如下:

protected voiddoPost(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {

PrintWriter out=resp.getWriter();//获取表单参数

String name = req.getParameter("name");if(name!=null && !name.isEmpty()) {

out.print("您好 " +name);

out.print(",
欢迎来到我的主页。");

}else{

out.print("请输入您的中文名字!");

}

out.print("返回");

out.flush();

out.close();

}

实例运行结果:

1、输入前

2e75a7a268d2236a8c1badd9b3857c4b.png

2、过滤后效果

052261ff0391ac38b36d7143071639de.png

3、未过滤效果

f451d578f65392692c2074fb195c7fb0.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值