监听器实例:

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. EasyUI_Datagrid学习总结

    EasyUI_Datagrid学习总结 2016年7月25日星期一 一.简介 Easyui中的datagrid从总的作用上讲,就是在列表上显示数据,类似于table,但是在table的基础上,此控件更 ...

  2. JS重写alert,保证弹窗错误的友好性

    // ------------------------------------------------------------- // 重写alert,保证弹窗错误的友好性 var j_oldAler ...

  3. 例题6-3 Matrix Chain Multiplication ,Uva 442

    这个题思路没有任何问题,但还是做了近三个小时,其中2个多小时调试 得到的经验有以下几点: 一定学会调试,掌握输出中间量的技巧,加强gdb调试的学习 有时候代码不对,得到的结果却是对的(之后总结以下常见 ...

  4. API地图坐标转化(批量转换坐标)

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. Oracle内存组件理论篇一

    目标 1.SGA结构 2.PGA结构 1.SGA Shared pool 1).共享池是对SQL.PL/SQL程序进行语法分析.编译.执行的内存区域. 在执行SELECT * FROM emp语句时, ...

  6. SQL多表连接

    在KS系统中分配好权限以后,在用户登录的时候就要通过用户查到角色,通过角色查到界面,界面又属于某个菜单,一共要查4个表.并且不能有重复的记录这个时候就用到了SQL的内连接.SQL的多表连接很方便,以前 ...

  7. MySQL 5.7.9多源复制报错修复

    版本:5.7.9 用5.7.9的版本搭建MySQL多源复制测试环境 开发说复制出现问题,上去看了一下: mysql> show slave status\G******************* ...

  8. css 动画效果

    要搞就搞明白,一知半解时停止研究 损失最大     css3意义: CSS3 动画 通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片.Flash 动画以及 JavaScript. 重点 ...

  9. Asp.Net MVC使用ViewData导致双引号被转义的解决方法

    使用以下方法进行输出 @Html.Raw(ViewData["jsonString"].ToString())

  10. How to create jar for Android Library Project

    http://stackoverflow.com/questions/17063826/how-to-create-jar-for-android-library-project This works ...