javaweb 连接MySQL监听在线人数代码
时间: 2023-10-27 18:04:40 浏览: 98
下面是一个简单的 Java Web 应用程序,用于连接 MySQL 数据库并监听在线人数:
1. 在 pom.xml 文件中添加 MySQL Connector/J 依赖:
```xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
```
2. 在 web.xml 文件中添加 MySQL 数据库连接池:
```xml
<resource-ref>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-env-ref>
<resource-env-ref-name>jdbc/mysql</resource-env-ref-name>
<resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
</resource-env-ref>
```
3. 在 context.xml 文件中配置 MySQL 数据库连接池:
```xml
<Context>
<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/yourdatabase?useSSL=false&serverTimezone=UTC"
username="yourusername" password="yourpassword"/>
</Context>
```
4. 编写 Java 代码,用于查询当前在线用户数量:
```java
package com.example;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.sql.DataSource;
@WebListener
public class OnlineUserListener implements ServletContextListener {
private DataSource dataSource;
private Connection connection;
public void contextInitialized(ServletContextEvent event) {
try {
Context context = new InitialContext();
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/mysql");
connection = dataSource.getConnection();
} catch (NamingException | SQLException e) {
e.printStackTrace();
}
// 每隔 10 秒钟查询一次在线用户数量
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
int count = getOnlineUserCount();
event.getServletContext().setAttribute("onlineUserCount", count);
}
}
});
thread.start();
}
public void contextDestroyed(ServletContextEvent event) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
private int getOnlineUserCount() {
int count = 0;
try (PreparedStatement statement = connection.prepareStatement("SELECT COUNT(*) FROM online_users");
ResultSet resultSet = statement.executeQuery()) {
if (resultSet.next()) {
count = resultSet.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return count;
}
}
```
这个监听器在应用程序启动时会创建一个 MySQL 数据库连接,并启动一个线程,每隔 10 秒钟查询一次在线用户数量,并将结果保存到 ServletContext 中。你可以在 JSP 或 Servlet 中使用以下代码来获取在线用户数量:
```java
int count = (int) getServletContext().getAttribute("onlineUserCount");
```
这样,你就可以在 Java Web 应用程序中连接 MySQL 数据库并监听在线人数了。
阅读全文