雨-林-沐-风 2023-07-08 11:33 采纳率: 50%
浏览 60
已结题

我在idea中写了一个jsp和servlet想实现随机分组功能,但结果显然不尽人意。



<%@ 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,我实在不明白该怎么修改,非常感谢您的指导,谢谢。
我希望实现连接数据库中的表格,然后对学生进行随机分组,每组人数由用户自行指定,并在前端页面显示分组结果,请注意余数的处理,再次感谢。

  • 写回答

4条回答 默认 最新

  • 竹山全栈 2023-07-08 12:38
    关注

    后端有报错信息否,能确保连上sqlserver数据库否,在后端打印一下关键信息,

    img

    在这数据打印一下,看看到底有没有结果出来

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月8日
  • 已采纳回答 7月8日
  • 赞助了问题酬金15元 7月8日
  • 创建了问题 7月8日