过滤器(Filter)和监听器(Listener)是两种特殊的Servlet技术。
过滤器可以对用户的请求信息和响应信息过滤,常被用于权限检查和参数编码统一设置。
监听器用来对Web应用进行监听,增强Web应用的事件处理能力
过滤器是在服务器上运行的,位于请求和响应中间起过滤的作用。一个过滤器可以和多个JSP或Servlet绑定。检查信息后过滤器可以选择下一个动作:
过滤器用到javax.servlet包中的一组接口或类,与过滤器设计有关的三个重要接口如下:
功能 | 类或接口 |
---|---|
Filter实现 | javax.servlet.Filter |
Filter配置 | javax.servlet.FilterConfig |
Filter链 | javax.servlet.FilterChain |
接口Filter的主要方法如下:
< url-pattern>设定过滤器的过滤地址,可带通配符/ *
public void doFilter(ServletReqeuest request ,ServletResponse response ,FilterChain filterchain) throws IOException,ServletException{ request.setCharacterEncoding("UTF-8"); }
登陆页面:index.jsp
将用户名及其密码存放session:index2.jsp
过滤器LoginFilter.java
配置web.xml,给主页admin.jsp添加过滤器,没有登陆的用户不可访问。给Servlet添加过滤器, < url-pattern>< /url-apptern>改为< servlet-name>< /servlet-name>
关键点:
创建Filter过滤IP类:FilterIP.java
web.xml配置文件:
当前访问的IP地址是过滤的地址Error.jsp:
可以通过监听器监听Web应用的上下文信息、Servlet请求信息、Servlet会话信息。**当服务器启动时,监听器自动加载(执行构造函数),特定事件发生时,容器会自动调用相应监听器中对应的时间处理方法。
监听器用到javax.servlet包中的一组监听接口和事件类。监听器划分为以下三种:
监听对象 | 监听接口 | 监听事件 |
---|---|---|
ServletRequest | ServletRequestListener | ServletRequestEvent |
ServletRequestAttributeListener | ServletRequestAttributeEnvent | |
HttpSession | HttpSessionListener | HttpSessionEvent |
HttpSessionActivationListener | ||
HttpSessionAttributeListener | HttpSessionBindingEvent | |
HttpSessionBindingListener | ||
ServletContext | ServletContextListener | ServletContextEvent |
ServletContextAttributeListener | ServletContextAttributeEvent |
对ServletContext对象实现监听,可以监听ServletContext对象中属性的变化(增加、删除、修改),也可以监听ServletContext对象本身的变化(创建与销毁)。常用的监听方法如下:
接口名称 | 接口方法 | 触发条件 |
---|---|---|
ServletContextAttribute | attributeAdded(ServletContextAttributeEvent scab) | 增加属性 |
attributeRemoved(ServletContextAttributeEvent scab) | 删除属性 | |
attributeReplaced(ServletContextAttributeEvent scab) | 修改属性 | |
ServletContextListener | contextInitialized(ServletContextAttributeEvent scab | 创建对象 |
contextDestroyed(ServletContextAttributeEvent scab) | 销毁对象 |
对HttpSession对象实现监听,可以监听HttpSession对象中属性的变化(增加、删除、修改),也可以监听HttpSession对象本身的变化(创建与销毁),还可以监听HttpSession对象是否绑定到监听器对象上。常用的监听方法如下:
接口名称 | 接口方法 | 触发条件 |
---|---|---|
HttpSessionAttributeListener | attributeAdded(HttpSessionBindingEvent hsbe) | 增加属性 |
attributeRemoved(HttpSessionBindingEvent hsbe) | 删除属性 | |
attributeReplaced(HttpSessionBindingEvent hsbe) | 修改属性 | |
HttpSessionListener | sessionCreate(HttpSessionEvent hse | 创建对象 |
sessionDestroyed(HttpSessionEvent hse) | 销毁对象 | |
HttpSessionActivationListener | sessionDidActivate(HttpSessionEvent hse) | 会话刚被激活 |
sessionWillPssivate(HttpSessionEvent hse) | 会话将要被钝化 | |
HttpSessionBindingListener | valueBound(HttpSessionBindingEvent hsbe) | 调用setAttribute()方法 |
valueBound(HttpSessionBindingEvent) | 调用removeAttribute()方法 |
活化(Activate)和钝化(Passivate)是web容器为了更好的利用系统资源。会话对象的钝化是指暂时将会话对象通过序列化的方法存储到硬盘上。活化则是将硬盘上存储的会话对象重新加载到Web容器中。
对ServletRequest对象监听,可以监听对象中属性的变化(增加、删除、修改),也可以监听本身的变化(创建与销毁)。常用监听方法如下:
接口名称 | 接口方法 | 触发条件 |
---|---|---|
ServletContextAttribute | attributeAdded(ServletRequestAttributeEvent srae) | 增加属性 |
attributeRemoved(ServletRequestAttributeEvent srae) | 删除属性 | |
attributeReplaced(ServletRequestAttributeEvent srae) | 修改属性 | |
ServletRequestListener | requestInitialized(ServletRequestEvent sre | 创建对象 |
requestDestroyed(ServletRequestEvent sre) | 销毁对象 |
创建一个类,实现合适的接口
重写有关事件的方法
配置监听器
监听器的配置信息同样在web.xml文件中配置,不需要配置地址。
当登陆的用户会将用户添加到HttpSession对象的属性中,触发对象的attributeAdded()方法,当关闭浏览器,或退出登陆,则会触发对象的attributeRemoved()方法。
设计监听类:OnlineListener.java
配置web.xml文件:
统计人数网页:online.jsp
@syl 2021/07/01 16:50 晴 32° 吃饭