程序开发中,经常需要对某些事件进行监听,比如个网站页 面可能要动态监听当前在线用户有哪些以及在线总人数,这个就可以使用到Servlet进行监听用户的登录退出。本案例简单模拟用户登录和退出来在页面定时刷新在线人数和在线人员名单
时间: 2024-05-16 19:16:36 浏览: 9
好的,这是一个常见的应用场景。你需要编写一个Servlet来监听用户的登录和退出,在用户登录时记录下用户的信息,退出时删除该用户信息,并在页面上显示当前在线人数和在线人员名单。具体实现步骤如下:
1. 定义一个JavaBean来存储用户信息,包括用户名和登录时间等。
```
public class User {
private String username;
private Date loginTime;
// 其他属性和方法
}
```
2. 编写一个Servlet来处理用户的登录和退出请求。在用户登录时创建一个新的User对象,并将其添加到一个在线用户列表中,在用户退出时从列表中删除该用户。
```
public class OnlineUserServlet extends HttpServlet {
private List<User> userList = new ArrayList<User>();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");
if ("login".equals(action)) {
String username = request.getParameter("username");
User user = new User();
user.setUsername(username);
user.setLoginTime(new Date());
userList.add(user);
response.sendRedirect("index.jsp");
} else if ("logout".equals(action)) {
String username = request.getParameter("username");
Iterator<User> it = userList.iterator();
while (it.hasNext()) {
User user = it.next();
if (user.getUsername().equals(username)) {
it.remove();
break;
}
}
response.sendRedirect("index.jsp");
}
}
}
```
3. 在页面上定时刷新在线人数和在线人员名单。可以使用JavaScript定时调用一个Servlet来获取在线用户列表,并更新页面上的在线人数和在线人员名单。
```
<script type="text/javascript">
function refreshOnlineUsers() {
$.get("OnlineUserListServlet", function(data) {
$("#onlineCount").text(data.length);
$("#onlineList").empty();
$.each(data, function(index, user) {
$("#onlineList").append("<li>" + user.username + "</li>");
});
});
}
setInterval(refreshOnlineUsers, 5000);
</script>
```
4. 编写一个Servlet来获取在线用户列表。
```
public class OnlineUserListServlet extends HttpServlet {
private List<User> userList = new ArrayList<User>();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json;charset=utf-8");
PrintWriter out = response.getWriter();
out.println(JSON.toJSONString(userList));
out.close();
}
}
```
以上就是一个简单的在线用户监听和显示的实现。需要注意的是,在实际应用中需要考虑并发访问和线程安全等问题。