过滤器与监听器
一,过滤器
1.什么是过滤器?
过滤器是向Web应用程序的请求和响应添加功能的Web服务组件
过滤器可以统一的集中处理请求和响应
2.如何使用过滤器?
实现javax.servlet.Filter接口,以及实现其方法
代码演示:
package com.bdqn.filter;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Filter implements javax.servlet.Filter{
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain filter) throws IOException, ServletException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
filter.doFilter(req, resp);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
在web.xml中配置过滤器
代码演示:
<filter>
<filter-name>Filter</filter-name>
<filter-class>com.bdqn.filter.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.过滤器过滤Web资源有四种方式
完全匹配:/index.jsp
目录匹配:/admin/*
扩展名匹配:*.do
全部匹配:/*
4.过滤器的生命周期
实例化:实现javax.servlet.Filter接口。
初始化:调用init()方法。
响应:调用doFilter()方法。
销毁:调用destroy()方法。
二,监听器
1.什么是监听器?
监听器实时可以接收事件,并完成相关的处理
2.监听器的实现方式
1、创建类实现HttpSessionBindingListener接口
2、在valueBound和valueUnbound方法中实现用户数量的统计
valueUnbound有三种情况将被执行
1)调用使session失效的方法:session.invalidate()
2)session超时
3)调用setAttribute重新设置了别的对象,或是调用removeAttribute移除了这个属性
3、在web.xml中配置监听器
常量类定义:
package com.bdqn.utils;
public class Contants {
public static int count;
}
通过实现HttpSessionBindingListener实现在线人数统计:
package com.bdqn.entity;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import com.bdqn.utils.Contants;
public class User implements HttpSessionBindingListener{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void valueBound(HttpSessionBindingEvent arg0) {
Contants.count++;
}
@Override
public void valueUnbound(HttpSessionBindingEvent arg0) {
Contants.count--;
}
}
通过实现HttpSessionListener接口实现在线人数统计:
package com.bdqn.listen;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class Listening implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent event) {
ServletContext context= event.getSession().getServletContext();
Object object=context.getAttribute("count");
int count;
if (object==null) {
count=1;
/*object=1;
count=(Integer)object;*/
}else {
count=(Integer)object;
count++;
}
context.setAttribute("count", count);
}
@Override
public void sessionDestroyed(HttpSessionEvent events) {
ServletContext context= events.getSession().getServletContext();
Object object=context.getAttribute("count");
System.out.println(object);
int count=(Integer)object;
if (object!=null) {
count--;
}
System.out.println(count);
context.setAttribute("count", count);
}
}
在web.xml中配置监听器:
<listener>
<listener-class>com.bdqn.listen.Listening</listener-class>
</listener>