监听器实例:

package com.gwssi.listener;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener; public class SessionListener implements HttpSessionListener { @Override
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
SessionBean sessionBean = SessionFactory.getInstance().getSessionBean();
System.out.println("sessionCreated session: " + (session.getId()));
System.out.println("sessionCreated accessCount: "
+ (sessionBean.getAccessCount()));
// 访问次数
sessionBean.setAccessCount(sessionBean.getAccessCount() + 1);
// 在线人数统计
sessionBean.getOnline().put(session.getId(), null);
} @Override
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
SessionFactory factory = SessionFactory.getInstance();
SessionBean sessionBean = factory.getSessionBean(); System.out.println("sessionDestroyed session: " + (session.getId()));
System.out.println("sessionDestroyed accessCount: "
+ (sessionBean.getAccessCount())); factory.removeLogin(session);
} }
package com.gwssi.listener;

import javax.servlet.http.HttpSession;

public class SessionFactory {
private SessionBean sessionBean = new SessionBean();
private static SessionFactory factory; private SessionFactory() { } static {
factory = new SessionFactory();
} public synchronized static SessionFactory getInstance() {
if (factory == null) {
factory = new SessionFactory();
}
return factory;
} public void addLogin(HttpSession session, String user) {
this.getSessionBean().getOnline().put(session.getId(), user);
this.getSessionBean().getLogin().add(user);
} public void removeLogin(HttpSession session) {
this.getSessionBean().getLogin()
.remove(this.getSessionBean().getOnline().get(session.getId()));
this.getSessionBean().getOnline().remove(session.getId());
} public boolean isOnline(String user) {
return this.getSessionBean().getLogin().contains(user);
} public SessionBean getSessionBean() {
return sessionBean;
} public void setSessionBean(SessionBean sessionBean) {
this.sessionBean = sessionBean;
} }
package com.gwssi.listener;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set; public class SessionBean { private Map<String, String> online = new HashMap<String, String>(); private int accessCount = 0; private Set<String> login = new HashSet<String>(); /**
*
* 返回当前系统在线人数
*
* @return int
*/
public int getOnlineCount() {
return this.online.size();
} /**
* 返回当前系统登录人数
*
* @return int
*/
public int getLoginCount() {
return this.getLogin().size();
} public Map<String, String> getOnline() {
return online;
} public void setOnline(Map<String, String> online) {
this.online = online;
} public int getAccessCount() {
return accessCount;
} public void setAccessCount(int accessCount) {
this.accessCount = accessCount;
} public Set<String> getLogin() {
return login;
} public void setLogin(Set<String> login) {
this.login = login;
} }

在web.xml中增加

 <session-config>
<session-timeout>10</session-timeout>
</session-config> <listener>
<listener-class>com.gwssi.listener.SessionListener</listener-class>
</listener>

在登录时

	//添加进入SessionFactory,以供记录是否在线
SessionFactory.getInstance().addLogin(session, userInfo.getUserId());

页面调用:
import="com.oddel.listener.SessionFactory;
SessionFactory.getInstance().isOnline(userid)
返回true表示用户当前是在线的。
返回false表示用户当前是不在线的。

参考博客:

http://www.cnblogs.com/sherryueda/p/4273169.html

过滤器:

package com.gwssi.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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import cn.gwssi.csdb.fbk.util.StringUtil; public class SessionCheckFilter implements Filter { @Override
public void destroy() {
} @Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
String userid = request.getParameter("userid");
// System.out.println(request.getServletPath() + "===SessionCheckFilter====" + userid);
if (StringUtil.isEmpty(userid) || "null".equals(userid)) {
// 当请求中没有userid参数时,由后台进行判断
chain.doFilter(req, res);
} else {
HttpSession session = request.getSession();
UserInfo userInfo = (UserInfo) session.getAttribute("userInfo");
HttpServletResponse response = (HttpServletResponse) res;
if (userInfo == null) {
// session过期
redirect(request, response);
} else { System.out.println(userInfo.getUserId() + "========" + userid);
if (userid.equals(userInfo.getUserId())) {
chain.doFilter(req, res);
} else {
// 登录名不一致
redirect(request, response);
}
}
}
} private void redirect(HttpServletRequest request,
HttpServletResponse response) throws IOException {
String requestType = request.getHeader("X-Requested-With");
if (requestType != null && requestType.equals("XMLHttpRequest")) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
} else {
String href = request.getContextPath()
+ "/pages/sessionTimeOut.jsp";
response.sendRedirect(href);
}
} @Override
public void init(FilterConfig config) throws ServletException {
} }

在web.xml中

<filter>
<filter-name>sessionCheckFilter</filter-name>
<filter-class>com.gwssi.csdb.fbk.authority.SessionCheckFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionCheckFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>

参考博客:

http://www.cnblogs.com/sherryueda/p/4275805.html

Web中的监听器【Listener】与过滤器【Filter】 实例的更多相关文章

  1. Web中的监听器【Listener】

    Servlet监听器:Servlet规范中定义的一种特殊类,它用于监听Web应用程序中的ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件,以及 ...

  2. 【Spring】1、Spring 中的监听器 Listener

    一.接口 1.EventListener 2.HttpSessionAttributeListener   继承EventListener接口 HttpSessionAttributeListener ...

  3. java web中get请求中文乱码在filter中解决

    之前已经讲过get或者post方法的中文乱码问题,之前都是在每个方法中编写设置编码.如果程序变大,就会很繁琐,使用filter可以避免这种繁琐. 1)写一个encodingFilter进行编码设置 p ...

  4. EL&Filter&Listener:EL表达式和JSTL,Servlet规范中的过滤器,Servlet规范中的监听器,观察着设计模式,监听器的使用,综合案例学生管理系统

    EL&Filter&Listener-授课 1 EL表达式和JSTL 1.1 EL表达式 1.1.1 EL表达式介绍 *** EL(Expression Language):表达式语言 ...

  5. 过滤器Filter与监听器Listener

    过滤器Filter 过滤器也是一种servlet   它也可以对用户的请求进行处理  , 但是他所做的处理,只是一些轻量级的处理.Fileter就好像jsp页面与servlet之间的一道关卡,如果这个 ...

  6. web.xml之context-param,listener,filter,servlet加载顺序及其周边

    先以加载spring为例子看看加载顺序的作用: Spring加载可以利用ServletContextListener 实现,也可以采用load-on-startup Servlet 实现,但比如fil ...

  7. java Servlet中的过滤器Filter

    web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...

  8. Servlet中的过滤器Filter用法

    1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对Http ...

  9. Servlet中的过滤器Filter详解

    加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...

随机推荐

  1. js中隐式类型转换测试

    javascript数据类型: 使用typeof可以返回的数据类型有六种 "number" , "string" ,  "boolean" ...

  2. Memcached 配置 和项目应用

    Memcached 配置 http://blog.csdn.net/sup_heaven/article/details/32337711 memcached真实项目中的应用 http://blog. ...

  3. HTML:form表单总结,input,select,option,textarea,label

    <form>标签是块级元素. form标签的标准属性有id,class,style,title,lang,xml:lang. 表单能够包含input元素(包含button,checkbox ...

  4. Google Chrome七大新特性

    Google Chrome 在日常生活中扮演的角色不只是一个功能强大的网络浏览器,它内置的 DevTools 同样也是网络开发者进行网络开发的重要工具. DevTools 在不断的进行版本更新,其中有 ...

  5. 【译】Android系统简介

    简介  本文主要介绍Android的基础知识和体系结构,本文主题: 简介什么是Android,为什么开发者需要关注Android: Android体系结构(如Linux Kernel, Librari ...

  6. SVM入门

    前言: 又有很长的一段时间没有更新博客了,距离上次更新已经有两个月的时间了.其中一个很大的原因是,不知道写什么好-_-,最近一段时间看了看关于SVM(Support Vector Machine)的文 ...

  7. 表达式语言之EL表达式

    1.EL的用法EL的起源:起源于JSTL.EL运算符: 算术型:+.-.*./.div.%.mod.其中/和div都表示求除.%和mod表示求余数. 逻辑型:and或&&.or或||. ...

  8. ORACLE 11G 配置DG 报ORA-10458、ORA-01152、ORA-01110

    操作系统: Oracle Linux Server release 5.7 数据库版本: Oracle Database 11g Enterprise Edition Release 11.2.0.3 ...

  9. 提高Linux上socket性能

    在 开发 socket 应用程序时,首要任务通常是确保可靠性并满足一些特定的需求.利用本文中给出的 4 个提示,您就可以从头开始为实现最佳性能来设计并开发 socket 程序.本文内容包括对于 Soc ...

  10. 折腾了好久的macos+apache+php+phpmyadmin 终于成功了!

    由于最近需要布置mantis用来进行bug追踪,在此记录其过程. 由于PHP apache环境在Mac OS上是自带的,所以不需要另处下安装包,只需要简单配置一下即可. 首先打开终端输入命令: sud ...