过滤器:

package com.bjsxt.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; public class InfoFilter implements Filter { @Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub } @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//设置编码格式
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//强转成httpservlet
HttpServletRequest req=((HttpServletRequest)request);
HttpServletResponse resp=((HttpServletResponse)response);
//获取当前请求的URI
String uri = req.getRequestURI();
System.out.println("当前请求的URI:"+uri);
//获取此次请求的method
String method = req.getParameter("method");
//放行登录页面:继续放行登录请求,静态资源
if ("/55/login.jsp".equals(uri) || ("/55/data".equals(uri))&& "userLogin".equals(method) ||uri.startsWith("/55/css/") ||uri.startsWith("/55/js/") ||uri.startsWith("/55/images/")) {
//放行
chain.doFilter(request, response);
}else {
// 获取session对象
HttpSession session = req.getSession();
Object obj = session.getAttribute("User");
//判断
if (obj!=null) {
//放行
chain.doFilter(request, response); }else {
resp.sendRedirect("/55/login.jsp"); }
}
} @Override
public void destroy() {
// TODO Auto-generated method stub } }

监听器:

package com.bjsxt.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener; public class MyListener implements HttpSessionListener,ServletContextListener{
//监听application对象
@Override
public void contextInitialized(ServletContextEvent sce) {
int count=0;
//获取application对象
ServletContext sc = sce.getServletContext();
sc.setAttribute("count", count);
} @Override
public void contextDestroyed(ServletContextEvent sce) { } //监听session对象
@Override
public void sessionCreated(HttpSessionEvent se) {
//获取application对象中的计数器
ServletContext sc = se.getSession().getServletContext();
int count=(int)sc.getAttribute("count");
//计数器自增
++count;
//将计数器存储到application中
sc.setAttribute("count", count); } @Override
public void sessionDestroyed(HttpSessionEvent se) {
//获取application对象中的计数器
ServletContext sc = se.getSession().getServletContext();
int count=(int)sc.getAttribute("count");
//计数器自减
--count;
//将计数器存储到application中
sc.setAttribute("count", count); } }

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<filter>
<filter-name>MyFiltet</filter-name>
<filter-class>com.bjsxt.filter.InfoFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFiltet</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.bjsxt.servlet.MyListener</listener-class>
</listener>
<display-name>15-project</display-name>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.bjsxt.servlet.UserServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>OutServlet</servlet-name>
<servlet-class>com.bjsxt.servlet.OutServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>RegServlet</servlet-name>
<servlet-class>com.bjsxt.servlet.RegServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>BaseServlet</servlet-name>
<servlet-class>com.bjsxt.servlet.BaseServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/use</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>OutServlet</servlet-name>
<url-pattern>/out</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>RegServlet</servlet-name>
<url-pattern>/reg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>BaseServlet</servlet-name>
<url-pattern>/data</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>

在十秒之后session消除,再次点击需要重新登录:

过滤器和监听器实现用户的在线登录人数,以及设置session时长。的更多相关文章

  1. Servlet监听器——实现在线登录人数统计小例子

    一.概念 servlet监听器的主要目的是给web应用增加事件处理机制,以便更好的监视和控制web应用的状态变化,从而在后台调用相应处理程序. 二.监听器的类型 1.根据监听对象的类型和范围,分为3类 ...

  2. [转]MVC 检测用户是否已经登录

    本文转自:http://blog.csdn.net/jayzai/article/details/41252137 当我们访问某个网站的时候需要检测用户是否已经登录(通过Session是否为null) ...

  3. Django之Auth模块 实现登录,退出,自带session 与认证功能的一个重要的模块

    Auth模板 1. 什么是Auth模块,有什么用? django的auth的模块的使用: auth 是集合注册,登录,注销,session 多个功能集合在一起的模块 2. 使用Auth组件的默认aut ...

  4. 第16 天 JavaWEB过滤器和监听器技术

    Day16 JavaWEB过滤器和监听器技术 复习: 1.大结果集分页mysql的实现,是使用那个关键字,从user表中取第一页的数据,长度为10,sql语句怎么写? 2.分页查询的起始位置(star ...

  5. Servlet过滤器和监听器知识总结(转)

    Servlet过滤器和监听器知识总结(转)  Servlet过滤器是 Servlet 程序的一种特殊用法,主要用来完成一些通用的操作,如编码的过滤.判断用户的登录状态.过滤器使得Servlet开发者能 ...

  6. springBoot(6)---过滤器,监听器,拦截器

    过滤器,监听器,拦截器 一.理解它们 看里十几篇博客,总算有点小明白,总的来讲,两张图可以让我看明白点. 通过两幅图我们可以理解拦截器和过滤器的特点 1.过滤器 过滤器是在请求进入tomcat容器后, ...

  7. Javaweb三大组件-过滤器、监听器

    1. 过滤器 [filter] 作用: 对单个获取多个servlet起到增强[advice]的作用. 用于在所有的servlet执行前,做一些预处理.例如:做编码处理, 访问量统计[servletCo ...

  8. SpringBoot | 第七章:过滤器、监听器、拦截器

    前言 在实际开发过程中,经常会碰见一些比如系统启动初始化信息.统计在线人数.在线用户数.过滤敏高词汇.访问权限控制(URL级别)等业务需求.这些对于业务来说一般上是无关的,业务方是无需关系的,业务只需 ...

  9. Servlet过滤器和监听器知识总结

    Servlet过滤器是 Servlet 程序的一种特殊用法,主要用来完成一些通用的操作,如编码的过滤.判断用户的登录状态.过滤器使得Servlet开发者能够在客户端请求到达 Servlet资源之前被截 ...

随机推荐

  1. Java nio 空轮询bug到底是什么

    编者注:Java nio 空轮询bug也就是Java nio在Linux系统下的epoll空轮询问题. epoll机制是Linux下一种高效的IO复用方式,相较于select和poll机制来说.其高效 ...

  2. PHP 格式化公钥私钥(pem文件)

    <?php header("Content-Type: text/html; charset=utf-8"); $filename = dirname(__FILE__).& ...

  3. 通过ESP8266调节继电器时间

    通过ESP8266调节继电器时间 1.继电器选择(可调节时间的继电器) 2.继电器与esp8266的接线[set --- D6,UP --- D5,DOWN --- D1] 3.Arduino 程序 ...

  4. nyoj 84-阶乘的0 (规律题)

    84-阶乘的0 内存限制:64MB 时间限制:3000ms 特判: No 通过数:7 提交数:9 难度:3 题目描述: 计算n!的十进制表示最后有多少个0 输入描述: 第一行输入一个整数N表示测试数据 ...

  5. Arduino驱动ILI9341彩屏(一)——颜色问题

    最近在淘宝的店铺上淘到了一块ILI9341的彩色液晶屏,打算研究一下如何使用. 淘宝店铺购买屏幕之后有附源代码可供下载,代码质量惨不忍睹,各种缩进不规范就不说了,先拿来试一下吧. 这是淘宝店铺代码的核 ...

  6. Composer依赖管理 – PHP的利器

    别再到处搜PHP类扩展包了,对于现代语言而言,包管理器基本上是标配.Java 有 Maven,Python 有 pip,Ruby 有 gem,Nodejs 有 npm.PHP 的则是 PEAR,不过 ...

  7. PHP 的 self 关键字用法

    之前有人询问 self 关键字的用法,答案是比较明显的:静态成员函数内不能用 this 调用非成员函数,但可以用 self 调用静态成员函数/变量/常量:其他成员函数可以用 self 调用静态成员函数 ...

  8. Java基础知识总结之1.8新特性lambda表达式

    函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.lang.Runnab ...

  9. PHP安全之道学习笔记2:编码安全指南

    编码安全指南 编程本身就应该是一门艺术,而安全编程更是一种在刀尖上舞蹈的艺术,不仅要小心脚下的锋利寒刃,更要小心来自网络黑客或攻击者的狂轰乱炸. - by code artist 1.hash比较的缺 ...

  10. Python3 之 with语句(高效、便捷)

    在实际的编码过程中,有时有一些任务,需要事先做一些设置,事后做一些清理,这时就需要python3 with出场了,with能够对这样的需求进行一个比较优雅的处理,最常用的例子就是对访问文件的处理. 文 ...