【java基础】——Filter

    最近接触Filter,通过它解决了统一设置JSP字符集的问题,减少了很多重复代码。过程中,体会到了其面向切面的思想。

    Filter:即过滤器。就像在程序某层间加了一个过滤闸。凡经过此闸的都需要进行该闸的一些操作处理。这样,比单个处理就高效多了。

    如:未使用Filter:


   

    为了设置jsp的字符集,需给每个需向后台传数据的jsp都要写一套这样重复的代码。这样就造成重复代码多的问题。

    怎么解决:让所有的JSP都能设置字符集,这里就可以通过Filter拦截器设置。

    时序图:


    第一步:建立拦截器:如:CharsetEncodingFilter.java

/**
 * 采用Filter统一处理字符集
 */
package com.bjpowernode.drp.util.filter;

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;
import com.sun.net.httpserver.Filter.Chain; 

@SuppressWarnings("unused")
public class CharsetEncodingFilter implements Filter {
	@Override
	public void destroy() {
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		//设置字符集
		 request.setCharacterEncoding("GB18030");
		//若至此不写了,则无法往后进行。不会调JSP

		//继续执行
		chain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig FilterConfig) throws ServletException {
	}

}
     第二步:配置配置文件:web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
	<filter>
		<filter-name>CharsetEncodingFilter</filter-name>
		<filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
	</filter>
	<!-- 对哪些起作用	 -->
	<filter-mapping>
		<filter-name>CharsetEncodingFilter</filter-name>
	<!-- *.jsp代表该Filter对所有jsp起作用 -->
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>

</web-app>

     这样,页面在跳转jsp前,会通过filter-name找到filter-class。得到Filter具体的位置:com.bjpowernode.drp.util.filter.CharsetEncodingFilter.执行其doFilter,完成设置字符集:request.setCharacterEncoding("GB18030");,然后再跳转到JSP界面。这样就对所有的jsp文件进行了设置。

    总结:

    我们开发都是纵向的,Filter是横向设置,所以其体现的是切面的思想。

    优点:通过过滤器可以减少重复代码,提高开发效率。

    缺点:可能影响性能,因为如该博文中举例,是为了设置字符集。但只有有添加、编辑功能的JSP需要进行此设置,但设置过滤器后,所有的JSP都需要先经过Filter。所以,可能会影响性能。






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值