Web中的监听器【Listener】与过滤器【Filter】 实例
监听器实例:
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】 实例的更多相关文章
- Web中的监听器【Listener】
Servlet监听器:Servlet规范中定义的一种特殊类,它用于监听Web应用程序中的ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件,以及 ...
- 【Spring】1、Spring 中的监听器 Listener
一.接口 1.EventListener 2.HttpSessionAttributeListener 继承EventListener接口 HttpSessionAttributeListener ...
- java web中get请求中文乱码在filter中解决
之前已经讲过get或者post方法的中文乱码问题,之前都是在每个方法中编写设置编码.如果程序变大,就会很繁琐,使用filter可以避免这种繁琐. 1)写一个encodingFilter进行编码设置 p ...
- EL&Filter&Listener:EL表达式和JSTL,Servlet规范中的过滤器,Servlet规范中的监听器,观察着设计模式,监听器的使用,综合案例学生管理系统
EL&Filter&Listener-授课 1 EL表达式和JSTL 1.1 EL表达式 1.1.1 EL表达式介绍 *** EL(Expression Language):表达式语言 ...
- 过滤器Filter与监听器Listener
过滤器Filter 过滤器也是一种servlet 它也可以对用户的请求进行处理 , 但是他所做的处理,只是一些轻量级的处理.Fileter就好像jsp页面与servlet之间的一道关卡,如果这个 ...
- web.xml之context-param,listener,filter,servlet加载顺序及其周边
先以加载spring为例子看看加载顺序的作用: Spring加载可以利用ServletContextListener 实现,也可以采用load-on-startup Servlet 实现,但比如fil ...
- java Servlet中的过滤器Filter
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- Servlet中的过滤器Filter用法
1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对Http ...
- Servlet中的过滤器Filter详解
加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...
随机推荐
- 汇编语言-求X的阶乘
1. 题目:求X的阶乘值 2. 要求:输入一个整型数(不超过10),求出其阶乘值后输出,求阶乘的算法用子程序来实现. 3. 提示:可以用递归来实现,也可以用简单的循环来实现. 这里使用循环来实现: 对 ...
- java.lang.NoClassDefFoundError Adding a jar to an RCP application
给RCP中加入jar包与一般的java工程是有些个区别的,否则会出现"java.lang.NoClassDefFoundError" Open plug-in.xmlGo to R ...
- CentOS 6.4 安装搭建 Scrapy 0.22 环境
一.安装Python2.7.6 更新CentOS lib库文件 yum -y update 安装开发工具包 yum groupinstall -y development 安装扩展包 yum inst ...
- 用开源AOP简化MVVM框架
本文的前提是知晓基于Xaml开发,本文以WPF为例 一 .简化属性通知事件 普通的属性通知会写一个基于INotifyPropertyChanged接口的类 public class RasieProp ...
- MyEclipse反编译Class文件
对于需要查看Java Class文件源码的筒子们来说,必须在项目中导入Java源码才能查看Class文件的具体实现,这不仅十分的麻烦,因为有时我们并不可以获得Class文件对应的Java源码.今天就给 ...
- [css]兼容性
div +input 输入框 , 在微信中 有问题 块级元素 行内元素
- phpstorm8 设置及license key
phpstorm8 license key Learn Programming ===== LICENSE BEGIN ===== 63758-12042010 00000Ryqh0NCC73lpRm ...
- UML中的六大关系
转自:http://www.cnblogs.com/shengtianlong/archive/2010/10/23/1858953.html UML定义的关系主要有六种:依赖.类属.关联.实现.聚合 ...
- 如何在mysql中退出当前窗口界面而不关闭窗口的方法
CTRL+Cexit;quit ;
- inputstream与其他格式的转换
1.InputStream 转换成InputSource . InputStream inputStream = request.getInputStream(); InputSource input ...