KickPerson

package demo2;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

//监听用户的登录
public class KickPerson implements HttpSessionAttributeListener {

    public void attributeAdded(HttpSessionBindingEvent sbe) {

        //得到context对象,看看context对象是否有容器装载Session
        ServletContext context = sbe.getSession().getServletContext();

        //如果没有,就创建一个呗
        Map map = (Map) context.getAttribute("map");
        if (map == null) {
            map = new HashMap();
            context.setAttribute("map", map);
        }

        //---------------------------------------------------------------------------------------
        
        //得到Session属性的值
        Object o = sbe.getValue();

        //判断属性的内容是否是User对象
        if (o instanceof User) {
            User user = (User) o;
            map.put(user.getName(), sbe.getSession());
            System.out.println(user.getName());
        }
    }

}

KickPersonServlet

package demo2;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

//接收用户踢人
@WebServlet("/KickPersonServlet")
public class KickPersonServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	    String username = request.getParameter("username");

        //得到装载所有的Session的容器
        Map map = (Map) this.getServletContext().getAttribute("map");

        //通过名字得到Session
        HttpSession httpSession = (HttpSession) map.get(username);
        httpSession.invalidate();
        map.remove(username);

        //摧毁完Session后,返回列出在线用户页面
        request.getRequestDispatcher("/WEB-INF/page/message.jsp").forward(request, response);
	}


}

LoginServlet

package demo2;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//用户登录
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		//得到传递过来的数据
        String username = request.getParameter("username");

        User user = new User();
        user.setName(username);

        //标记该用户登陆了!
        request.getSession().setAttribute("user", user);
        
        //提供界面,告诉用户登陆是否成功
        request.setAttribute("message", "恭喜你,登陆成功了!");
        request.getRequestDispatcher("/WEB-INF/page/message.jsp").forward(request, response);
	}

}

User

package demo2;

//用户类
public class User {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
}

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
	<form action="${pageContext.request.contextPath }/LoginServlet" method="post">
    用户名:<input type="text" name="username">
    <input type="submit" value="登陆">
</form>
</body>
</html>

message.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>主页面</title>
</head>
<body>
	<c:forEach items="${map}" var="me">
    	${me.key} <a href="${pageContext.request.contextPath}/KickPersonServlet?username=${me.key}">踢了他吧</a>
    	<br>
	</c:forEach>
</body>
</html>

JSTL包下载

Web.xml里面别忘记配置

<listener>
  		<listener-class>demo2.KickPerson</listener-class>
</listener>

 

最后修改于 2021-09-17 19:10:06
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇