java写代码本实验需要编程操作 Session,并使用 ServletContext 保存在线人数和在线用户列表。
时间: 2024-02-22 16:59:37 浏览: 25
好的,以下是示例代码:
1. 在登录时把用户信息存入Session中。
```java
String username = request.getParameter("username");
String password = request.getParameter("password");
// 验证用户名和密码,通过则将用户信息存入Session中
if (validateUser(username, password)) {
HttpSession session = request.getSession();
session.setAttribute("username", username);
// ...
}
```
2. 在SessionListener中实现在线用户列表的维护。
```java
public class SessionListener implements HttpSessionListener {
// 在线用户列表
private static List<String> onlineUsers = new ArrayList<>();
public void sessionCreated(HttpSessionEvent se) {
// 新建Session时不做任何处理
}
public void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
String username = (String) session.getAttribute("username");
// 从在线用户列表中移除用户
onlineUsers.remove(username);
// 更新在线人数
ServletContext servletContext = session.getServletContext();
int onlineCount = (int) servletContext.getAttribute("onlineCount");
servletContext.setAttribute("onlineCount", onlineCount - 1);
servletContext.setAttribute("onlineUsers", onlineUsers);
}
public static List<String> getOnlineUsers() {
return onlineUsers;
}
public static void addOnlineUser(String username) {
onlineUsers.add(username);
}
}
```
3. 在登录成功后,将用户加入在线用户列表。
```java
HttpSession session = request.getSession();
String username = (String) session.getAttribute("username");
// 将用户加入在线用户列表
SessionListener.addOnlineUser(username);
// 更新在线人数
ServletContext servletContext = request.getServletContext();
int onlineCount = (int) servletContext.getAttribute("onlineCount");
servletContext.setAttribute("onlineCount", onlineCount + 1);
servletContext.setAttribute("onlineUsers", SessionListener.getOnlineUsers());
```
4. 在ServletContextListener中初始化在线人数。
```java
public class ServletContextListener implements javax.servlet.ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
ServletContext servletContext = sce.getServletContext();
servletContext.setAttribute("onlineCount", 0);
servletContext.setAttribute("onlineUsers", new ArrayList<String>());
}
public void contextDestroyed(ServletContextEvent sce) {
// ...
}
}
```
5. 在JSP页面中显示在线人数和在线用户列表。
```jsp
<!-- 显示在线人数 -->
在线人数:<%= application.getAttribute("onlineCount") %>
<!-- 显示在线用户列表 -->
<ul>
<% List<String> onlineUsers = (List<String>) application.getAttribute("onlineUsers");
for (String user : onlineUsers) { %>
<li><%= user %></li>
<% } %>
</ul>
```
这样就完成了使用Session和ServletContext保存在线人数和在线用户列表的实验。