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

过滤器:

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消除,再次点击需要重新登录:

 

posted @ 2019-12-11 08:56  sakura-yxf  阅读(403)  评论(0)    收藏  举报