微探之filter

      在解决jsp页面中文乱码的时候,往往可以在页面头部加上request.setCharacterEncoding("gb2312")来解决,如果jsp页面多的话,就不适合在每个页面都加上这么一句。这时就可以用filter来解决,这也符合面向对象的原则。

filter使用户可以改变一个request和修改一个response。Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response.换种说法,filter其实是一个“servlet chaining“(servlet 链),包括:

    1. 在servlet被调用之前截获;

    2. 在servlet被调用之前检查servletrequest;

    3. 根据需要修改request头和request数据;

    4. 根据需要修改response头和response数据;

    5. 在servlet被调用之后截获.

    你能够配置一个filter 到一个或多个servlet;单个servlet或servlet组能够被多个filter 使用。tomcat一启动就new一个filter,并且只new一次

用法

    1.建立一个实现接口javax.servlet.Filter的类CharsetEncodingFilter

    2.在web.xml中进行filter配置

<span style="font-size:18px;"><filter>
    <filter-name>CharsetEncodingFilter</filter-name>
    <filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
//初始化的时候可以传递参数
    <init-param>
        <param-name>encoding</param-name>
<span style="white-space:pre">	</span><param-value>GBK</param-value>
    </init-param>
</filter>

//映射—设置进行过滤的条件,如:类、页面或者某一目录
<filter-mapping>
<span style="white-space:pre">	</span><filter-name>CharsetEncodingFilter</filter-name>
<span style="white-space:pre">	</span><url-pattern>*.jsp</url-pattern>
</filter-mapping>
</span>
<filter>标签说明使用了filter技术,并说明filter的具体类。<init-param>表示filter初始的参数,这里指初始的编码格式

  请求映射filter-mapping和servlet-mapping都是将对应的filter或servlet映射到某个uyl-pattern上,当客户发起某一请求时,服务器先将此请求与web.xml中定义的所有url-pattern进行匹配,然后执行匹配通过的filter和servlet。

3.CharsetEncodingFilter类里面进行一些设置

public class CharsetEncodingFilter implements Filter {
	
	private  String endCoding;
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
<span style="white-space:pre">		</span>//获取web.xml中设置的编码格式
		this.endCoding = filterConfig.getInitParameter("encoding");	
	}
<span style="white-space:pre">	</span>
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("setCharacterEncoding");
		//设置字符集
		request.setCharacterEncoding(endCoding);
		
		//继续执行
		chain.doFilter(request, response);
	
		System.out.println("setCharacterEncoding-->end");
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}
}


filter中匹配方式

    a.精确匹配,不用任何修饰符,如:/servlet/TestServlet

    b.扩展匹配,由星号“*”和扩展名组成,如:*.jsp

    c.路径前缀匹配,包含一个目录和一个*,如/sysmgr/*

    d.全部匹配,一般使用/*,<url-pattern>/*</url-pattern>

  这样就配置了所有jsp页面的编码格式。Filter可以批量设置请求的编码,也可以用它控制用户的访问权限,正如它的汉语解释“过滤器”一样,过滤掉不需要的,留下需要的...

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值