package com.qiku.yrc.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter(filterName = "loginFilter",urlPatterns = "*.html")
// 过滤所有网页
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request=( HttpServletRequest) servletRequest;
HttpSession session = request.getSession();
Object username =session.getAttribute("username");
// 获取请求路径
String servletPath = request.getServletPath();
System.out.println("servlet"+servletPath);
// 如果没登录则跳转 登录页面
if (username==null&& !servletPath.contains("login")){
request.getRequestDispatcher("login.jsp").forward(servletRequest,servletResponse);
}
//方形
else{
filterChain.doFilter(servletRequest,servletResponse);
}
}
@Override
public void destroy() {
Filter.super.destroy();
}
}
package com.qiku.yrc.listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class OnlineLoginUser implements HttpSessionListener, ServletContextListener{
//声明一个ServletContext 类型的变量 作为全局对象记录当前在线人数的数量 通过属性记录
private ServletContext servletContext=null;
@Override
public void contextInitialized(ServletContextEvent sce) {
//初始化ServletContext
servletContext= sce.getServletContext();
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
servletContext=null;//销毁servletContext
}
@Override
public void sessionCreated(HttpSessionEvent se) {
Object count = servletContext.getAttribute("count");
if (count==null&&servletContext.getAttribute("username")==null){
servletContext.setAttribute("count",0);
}else {
Integer number=(Integer) count;
number++;
servletContext.setAttribute("count",number);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// Integer count = (Integer)servletContext.getAttribute("count");
//servletContext.setAttribute("count",(count-1));
}
}
退出登录人数减1
退出登陆之后变为0 不知道实时刷新咋写



