<%@ page import="java.util.List" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<% List<List<String>> groups = (List<List<String>>) request.getAttribute("groups");%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Random Grouping</title>
<script>
function validateInput() {
var groupSize = document.getElementById("groupSizeInput").value;
var isValid = /^\d+$/.test(groupSize);
if (!isValid) {
alert("请输入一个有效的整数!");
return false; }
return true; }
</script>
<style> table {
border-collapse: collapse; }
th, td { border: 1px solid black; padding: 5px; }
</style>
</head>
<body>
<h1>Random Grouping Result</h1>
<form action="<%= request.getRequestURI() %>" method="get" onsubmit="return validateInput()"> <label for="groupSizeInput">每组人数要求:</label>
<input type="text" id="groupSizeInput" name="groupSize" required>
<input type="submit" value="分组">
</form>
<%
if (groups != null && !groups.isEmpty()) {%>
<table>
<thead>
<tr>
<th>Group</th>
<th>Members</th>
</tr>
</thead>
<tbody>
<%
for (int i = 0; i < groups.size(); i++) { List<String> group = groups.get(i); %>
<tr> <td>Group <%= i + 1 %></td>
<td> <% for (String member : group) { %>
<%= member %><br>
<% }
%>
</td>
</tr>
<% } %>
</tbody></table><%} else {%>
<% if (groups != null && !groups.isEmpty()) { out.println("Groups: " + groups); } else { out.println("No groups available."); }%><% }%></body>
</html>
servlet
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;import java.sql.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@WebServlet(name="RandomGroupServlet" , value = "/RandomGroupServlet")
public class RandomGroupServlet extends HttpServlet {
private static final long serialVersionUID = 1L; private List<String> elements;
@Override
public void init() throws ServletException { super.init();
elements = getElementsFromDatabase(); }
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // 获取每组个数
int groupSize = Integer.parseInt(request.getParameter("groupSize"));
// 计算分组数和余数
int groupCount = elements.size() / groupSize; int remainCount = elements.size() % groupSize; // 打乱元素顺序
Collections.shuffle(elements);
// 分组
List<List<String>> groups = new ArrayList<>();
int startIndex = 0;
for (int i = 0; i < groupCount; i++) {
List<String> group = elements.subList(startIndex, startIndex + groupSize);
groups.add(group);
startIndex += groupSize; }
if (remainCount > 0) {
List<String> group = elements.subList(startIndex, startIndex + remainCount);
groups.add(group); }
// 将分组结果存储到request对象中,以便在JSP中显示
request.setAttribute("groups", groups);
// 转发到JSP页面
request.getRequestDispatcher("randomgroup.jsp").forward(request, response); }
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response); /* out.println(request);*/ }
private List<String> getElementsFromDatabase() {
List<String> elements = new ArrayList<>();
// 加载JDBC驱动程序 try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); }
catch (ClassNotFoundException e) {
e.printStackTrace(); }
// 连接到数据库
String url = "jdbc:sqlserver://rm-2vc29v604h63b672yeo.mssql.cn-chengdu.rds.aliyuncs.com:3433;databaseName=testdb;useUnicode=true&characterEncoding=UTF-8&trustServerCertificate=true";
String user = "testuser";
String password = "Test_pw123";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
// 从数据库中查询姓名列表
String sql = "SELECT student name FROM Student_table";
// 查询语句
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) {
String name = rs.getString("student_name");
elements.add(name);
}
}
} } catch (SQLException e) {
e.printStackTrace(); }
return elements;
}
}
这是全部代码,但是运行的时候前端始终显示no groups available,我实在不明白该怎么修改,非常感谢您的指导,谢谢。
我希望实现连接数据库中的表格,然后对学生进行随机分组,每组人数由用户自行指定,并在前端页面显示分组结果,请注意余数的处理,再次感谢。
