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
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

