diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..73f69e0958611ac6e00bde95641f6699030ad235
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/artifacts/homework_war.xml b/.idea/artifacts/homework_war.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0e455cc9725ac782d8e6d2c7ad17e9e9bd8dfc04
--- /dev/null
+++ b/.idea/artifacts/homework_war.xml
@@ -0,0 +1,14 @@
+
+
+ $PROJECT_DIR$/target
+
+
+ homework
+ war
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/homework_war_exploded.xml b/.idea/artifacts/homework_war_exploded.xml
new file mode 100644
index 0000000000000000000000000000000000000000..16c2ad39b7fb4d4c8e526e4c0e38b26854383593
--- /dev/null
+++ b/.idea/artifacts/homework_war_exploded.xml
@@ -0,0 +1,30 @@
+
+
+ $PROJECT_DIR$/target/homework
+
+
+ true
+ homework
+ war
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7b9d91b09e53f5e86286c3d0dfa58b146792978d
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f86397bd831957b518c1cc34263cc294da123438
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000000000000000000000000000000000000..712ab9d985c20018a0c97b93d2148ac1ffe588a5
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml b/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..925cf775e7627962f099e92352647f55e3545b2d
--- /dev/null
+++ b/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_11.xml b/.idea/libraries/Maven__junit_junit_4_11.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d0ef22c4de228fe594539dd9decf724de45bf4e2
--- /dev/null
+++ b/.idea/libraries/Maven__junit_junit_4_11.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_38.xml b/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_38.xml
new file mode 100644
index 0000000000000000000000000000000000000000..287f3d065c0fb7b289f835795edca97fefc78232
--- /dev/null
+++ b/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_38.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7957e463f3fbfcaf7a1d4b7eda9d12ea5781e3c5
--- /dev/null
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..48d56488f4bfc4923c916b55731f6aec0deb297a
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b5cd19b6dd322ed2ede8c657589a3294f0e27de2
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..94a25f7f4cb416c083d265558da75d457237d671
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/homework.iml b/homework.iml
new file mode 100644
index 0000000000000000000000000000000000000000..4bef5f98a26a91c14ab7fda5e4e488d68b2e7ac1
--- /dev/null
+++ b/homework.iml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..48a9ef09a4cd70835de710039de68b386f464087
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,70 @@
+
+
+
+ 4.0.0
+
+ org.example
+ homework
+ 1.0-SNAPSHOT
+ war
+
+ homework Maven Webapp
+
+ http://www.example.com
+
+
+ UTF-8
+ 1.7
+ 1.7
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+ provided
+
+
+
+
+ mysql
+ mysql-connector-java
+ 5.1.38
+
+
+
+
+ javax.servlet.jsp
+ jsp-api
+ 2.1
+
+
+
+ javax.servlet.jsp.jstl
+ jstl-api
+ 1.2
+
+
+
+ taglibs
+ standard
+ 1.1.2
+
+
+
+
+
+
+ homework
+
+
diff --git a/src/main/java/entity/User.java b/src/main/java/entity/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..a709a13813eda3dd7e0312cde1a6a7593f1ea44d
--- /dev/null
+++ b/src/main/java/entity/User.java
@@ -0,0 +1,31 @@
+package entity;
+
+public class User {
+ int id;
+ String username;
+ String password;
+
+ public int getId() {
+ return id;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
diff --git a/src/main/java/servlet/LoginServlet.java b/src/main/java/servlet/LoginServlet.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1249a4850e110a18f08c7a0f6522b0f086d41c0
--- /dev/null
+++ b/src/main/java/servlet/LoginServlet.java
@@ -0,0 +1,96 @@
+package servlet;
+
+import javax.servlet.ServletContext;
+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 java.io.IOException;
+import java.io.PrintWriter;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.HashSet;
+import java.util.Set;
+
+@WebServlet("/login")
+public class LoginServlet extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ response.setContentType("text/html");
+ PrintWriter out = response.getWriter();
+ response.setCharacterEncoding("UTF-8");
+ response.setContentType("text/html; charset=UTF-8");
+
+
+ String username = request.getParameter("username");
+ String password = request.getParameter("password");
+
+ // 数据库连接参数
+ String jdbcUrl = "jdbc:mysql://localhost:3306/myhomework?useSSL=false&useUnicode=true&characterEncoding=UTF-8";
+ String dbUser = "root";
+ String dbPassword = "root";
+
+ System.out.println("你好,这里是rebase分支测试");
+ System.out.println("你好,这里是cherry-pick测试");
+ System.out.println("cherry-pick测试");
+
+ try {
+ // 加载数据库驱动程序
+ Class.forName("com.mysql.jdbc.Driver");
+
+ // 建立数据库连接
+ Connection con = DriverManager.getConnection(jdbcUrl, dbUser, dbPassword);
+
+ // 准备 SQL 查询
+ String query = "SELECT * FROM user WHERE username=? AND password=?";
+ PreparedStatement ps = con.prepareStatement(query);
+ ps.setString(1, username);
+ ps.setString(2, password);
+
+ // 执行查询
+ ResultSet rs = ps.executeQuery();
+
+ if (rs.next()) {
+ // 用户名和密码匹配
+// out.println("
Login successful!
");
+
+ // 将用户名添加到在线用户集合中
+ ServletContext servletContext = request.getServletContext();
+ Object onlineUsersObj = servletContext.getAttribute("onlineUsers");
+
+ // 检查在线用户对象是否为空以及类型是否正确
+ if (onlineUsersObj != null && onlineUsersObj instanceof Set>) {
+ Set onlineUsers = (Set) onlineUsersObj;
+ // 将用户名添加到在线用户集合中
+ onlineUsers.add(username);
+ } else {
+ // 如果在线用户对象为空或类型不正确,则创建一个新的 HashSet,并将其存储在 ServletContext 中
+ Set onlineUsers = new HashSet<>();
+ onlineUsers.add(username);
+ servletContext.setAttribute("onlineUsers", onlineUsers);
+ }
+
+
+ // 使用重定向跳转到登录成功页面
+ response.sendRedirect("loginSuccess.jsp?username=" + username);
+ } else {
+ // 用户名或密码错误
+// out.println("Invalid username or password!
");
+ // 使用请求转发重新加载 index.jsp 页面,并显示错误消息
+ request.setAttribute("error", "true");
+ request.getRequestDispatcher("index.jsp").forward(request, response);
+ }
+
+ // 关闭连接
+ con.close();
+ } catch (Exception e) {
+ out.println("Error: " + e.getMessage() + "
");
+ }
+ }
+
+
+}
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7dd1ef794cac2743b94e91c472a03133189db34f
--- /dev/null
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ Archetype Created Web Application
+
+
+
+ listener.SessionListener
+
+
+
diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..910aff31d33dc5ee973961d5d6efa84991f3f2cc
--- /dev/null
+++ b/src/main/webapp/index.jsp
@@ -0,0 +1,89 @@
+
+
+
+
+
+ Login
+
+
+
+
+
Login
+
+ <% if ("true".equals(request.getAttribute("error"))) { %>
+
Invalid username or password!
+ <% } %>
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/loginSuccess.jsp b/src/main/webapp/loginSuccess.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..bf83b188f4ba15aae81e34968b5f5fd9641718b0
--- /dev/null
+++ b/src/main/webapp/loginSuccess.jsp
@@ -0,0 +1,28 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ page import="java.util.Set" %>
+
+
+
+
+ 在线用户列表
+
+
+<%
+ Set onlineUsers = (Set) application.getAttribute("onlineUsers");
+ int totalUsers = onlineUsers.size();
+%>
+当前在线用户总数: <%= totalUsers %>
+当前在线用户:
+
+ <%
+ for (String user : onlineUsers) {
+ %>
+ - <%= user %>
+ <% } %>
+
+
+
+
+
diff --git a/target/homework/META-INF/MANIFEST.MF b/target/homework/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..26075f990698e0fd19aeef9373e312559c5cd330
--- /dev/null
+++ b/target/homework/META-INF/MANIFEST.MF
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Created-By: IntelliJ IDEA
+Built-By: 16599
+Build-Jdk: version 17.0.10
+
diff --git a/target/homework/WEB-INF/web.xml b/target/homework/WEB-INF/web.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7dd1ef794cac2743b94e91c472a03133189db34f
--- /dev/null
+++ b/target/homework/WEB-INF/web.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ Archetype Created Web Application
+
+
+
+ listener.SessionListener
+
+
+
diff --git a/target/homework/index.jsp b/target/homework/index.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..910aff31d33dc5ee973961d5d6efa84991f3f2cc
--- /dev/null
+++ b/target/homework/index.jsp
@@ -0,0 +1,89 @@
+
+
+
+
+
+ Login
+
+
+
+
+
Login
+
+ <% if ("true".equals(request.getAttribute("error"))) { %>
+
Invalid username or password!
+ <% } %>
+
+
+
+
+
+
+
+
+
diff --git a/target/homework/loginSuccess.jsp b/target/homework/loginSuccess.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..bf83b188f4ba15aae81e34968b5f5fd9641718b0
--- /dev/null
+++ b/target/homework/loginSuccess.jsp
@@ -0,0 +1,28 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ page import="java.util.Set" %>
+
+
+
+
+ 在线用户列表
+
+
+<%
+ Set onlineUsers = (Set) application.getAttribute("onlineUsers");
+ int totalUsers = onlineUsers.size();
+%>
+当前在线用户总数: <%= totalUsers %>
+当前在线用户:
+
+ <%
+ for (String user : onlineUsers) {
+ %>
+ - <%= user %>
+ <% } %>
+
+
+
+
+