过滤器和监听器(Filter,LIstener)

1.首先我们要知道java web 有三大组件:

Servlet

Filter:   筛选器,在客户端的请求到达服务器之前进行拦截,对用户的请求进行预处理然后再传给服务器。服务器接收请求后响应产生的数据还要在此经过筛选器加工,最后到达客户端。可以用来控制权限,设置字符集等等。

Listener:  监听器,对正在运行的工程进行监听,可以检测多项数据。用来监听客户端的请求,服务器的操作,检测在线用户的数量等等。

2.具体的用法:

Filter和Listener 都是web工程的组件,不需要再引包。但是我们再web.xml里面需要进行相关的配置。

Filter:

用法和Servlet非常的相似,值得一提的是可以在配置中设置相关的变量。

<para-name>变量名</para-name><param-value>变量值</param-value>就像代码中那样。

<filter>
<filter-name>TestFilter</filter-name>
<filter-class>com.xt.lh.Filter.TestFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>"UTF-8"</param-value>
</init-param>
</filter>

Listener:   全局监听,把路径导入即可

	<listener>
	<listener-class>java.lang.Override</listener-class>
	</listener>

3.代码示例:

Filter:这个例子中通过过滤器设置页面字符集

public class TestFilter implements Filter{

	private Log log=LogFactory.getLog(TestFilter.class);
	private String str="UTF-8";
	@Override
	
	public void init(FilterConfig filterConfig) throws ServletException {
		String str=filterConfig.getInitParameter("encoding");
		log.info("我的TestFilter开始初始化,变量encoding的值为"+str);
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		log.info("我的TestFilter开始执行");
		if(str!=null&&"".equals(""))
		request.setCharacterEncoding(str);
		chain.doFilter(request, response);
	}

	@Override
	public void destroy() {

		System.out.println("我的TestFilter开已经销毁");
	}

}

Listener:这个例子通过监听器监听session的创建和销毁过程

public class TestListerner implements HttpSessionListener{

	@Override
	public void sessionCreated(HttpSessionEvent se) {
		Integer  num=0;
		Object o= se.getSession().getServletContext().getAttribute("num");
		if(o!=null)
			num=(Integer) o;
	num ++;
	
	se.getSession().getServletContext().setAttribute("num", num);
	System.out.println("sessionId:" + se.getSession().getId() + "被创建了");
}
	
	
	@Override
	public void sessionDestroyed(HttpSessionEvent se) {

	Integer num=(Integer)se.getSession().getServletContext().getAttribute("num");
	num--;
	se.getSession().getServletContext().setAttribute("num", num);
	System.out.println("sessionId:" + se.getSession().getId() + "被销毁了");
	}
  
	
	
}

4.总结一下:我们可以看到,两者的区别在于,过滤器会干预访问的进程,只希望通过一些符合要求的东西;而监听器只想获得客户访问过程中的具体信息,而不去干预访问的进程。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值