You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lsepidemicsituationsystem8/src/com/controller/deptadmin/DeptQueryStuByIdServlet.java

196 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.controller.deptadmin;
// 声明该类所属的包为 com.controller.deptadmin包机制用于对相关类进行组织管理
// 便于代码的维护和查找,避免类名冲突,同时也有助于构建清晰的项目结构,
// 使得同一包下的类在逻辑上具有相关性。
import com.dao.DeptAdminDao;
// 导入自定义的 DeptAdminDao 类,该类通常封装了与数据库交互的各种操作方法,
// 例如执行 SQL 查询语句(如 select、插入数据insert、更新数据update以及删除数据delete等操作。
// 在后续代码中,会使用该类的方法来实现对数据库中数据的查询和修改等功能。
import com.entity.Student;
// 导入自定义的 Student 实体类,该类用于封装学生的相关信息,
// 例如学生编号sno、学生姓名sname、性别ssex等。
// 在本 Servlet 中,会通过从数据库查询到的数据来实例化 Student 对象,并将其传递到后续的页面。
import com.utils.JDBCUtils;
// 导入自定义的 JDBCUtils 工具类,一般来说,这个类会包含与 JDBCJava Database Connectivity
// 相关的通用工具方法,比如获取数据库连接、关闭数据库连接、处理结果集等操作,
// 以简化数据库操作的流程,提高代码的可维护性和复用性。
import javax.servlet.ServletException;
// 导入 Servlet 异常类,当 Servlet 在运行过程中出现异常情况时,
// 例如请求处理失败、资源加载错误、内部逻辑错误等,会抛出 ServletException 异常,
// 以便进行相应的异常处理和错误恢复,确保系统的稳定性和可靠性。
import javax.servlet.annotation.WebServlet;
// 导入 WebServlet 注解,它是 Java EE 中用于将普通的 Java 类标记为 Servlet 的注解。
// 通过该注解可以方便地指定 Servlet 的访问路径,使得客户端能够通过特定的 URL 来访问该 Servlet
// 从而实现与服务器的交互。
import javax.servlet.http.HttpServlet;
// 导入 HttpServlet 类,它是所有 Servlet 类的基类,提供了处理 HTTP 请求的基本框架和方法。
// 我们定义的 Servlet 类需要继承 HttpServlet 类,从而获得处理 HTTP 请求的能力,
// 能够响应客户端发送的 GET 和 POST 请求。
import javax.servlet.http.HttpServletRequest;
// 导入 HttpServletRequest 类,用于封装客户端发送的 HTTP 请求信息,
// 包括请求参数、请求头、请求方法等内容。Servlet 可以通过这个类获取客户端传递的各种数据,
// 以便根据这些数据进行相应的业务逻辑处理。
import javax.servlet.http.HttpServletResponse;
// 导入 HttpServletResponse 类,用于封装服务器返回给客户端的 HTTP 响应信息,
// 如响应状态码、响应头、响应体等。Servlet 可以利用这个类来设置并返回给客户端相应的响应数据,
// 以满足客户端的需求。
import java.io.IOException;
// 导入输入输出异常类,当进行输入输出相关的操作(如网络数据传输、文件读写等)时,
// 如果出现错误,就会抛出 IOException 异常,以便进行相应的错误处理,
// 保证系统在面对异常情况时能够做出合理的响应。
import java.sql.ResultSet;
// 导入 ResultSet 类,它用于表示数据库查询结果集。当执行 SQL 查询语句后,
// 数据库返回的数据会被封装在 ResultSet 对象中,通过它可以遍历和获取查询结果的每一行数据,
// 以便进行进一步的处理和分析。
@WebServlet("/DeptQueryStuByIdServlet")
// 使用 WebServlet 注解将 DeptQueryStuByIdServlet 类标记为一个 Servlet
// 并指定其访问路径为 /DeptQueryStuByIdServlet这样客户端就可以通过这个路径向该 Servlet 发送请求,
// 从而触发该 Servlet 中的业务逻辑处理。
public class DeptQueryStuByIdServlet extends HttpServlet {
// 定义一个名为 DeptQueryStuByIdServlet 的类,继承自 HttpServlet 类,
// 使其成为一个可以处理 HTTP 请求的 Servlet能够响应客户端发送的 GET 和 POST 请求,
// 并实现根据学生编号查询学生信息的功能。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 重写 HttpServlet 类的 doGet 方法,该方法专门用于处理客户端发送的 HTTP GET 请求。
// 它接收 HttpServletRequest 对象 req 和 HttpServletResponse 对象 resp 作为参数,
// 并且在执行过程中可能会抛出 ServletException 和 IOException 异常,以处理可能出现的错误情况。
req.setCharacterEncoding("utf-8");
// 设置请求的字符编码为 UTF-8确保服务器能够正确处理包含中文等特殊字符的请求参数
// 避免出现乱码问题,保证请求数据的准确性和完整性。
resp.setCharacterEncoding("utf-8");
// 设置响应的字符编码为 UTF-8保证返回给客户端的内容能够正确显示中文等特殊字符
// 使得客户端能够准确地解析和展示响应信息,避免出现乱码。
resp.setContentType("text/html;charset=utf-8");
// 设置响应的内容类型为 text/html并指定字符编码为 UTF-8
// 告知客户端返回的是 HTML 格式的内容,并且按照 UTF-8 编码进行解析和显示,
// 以便客户端能够正确处理和展示响应数据。
String sno = req.getParameter("sno");
// 从 HTTP 请求中获取名为 "sno" 的参数值,并将其赋值给字符串变量 sno。
// 这里的 sno 代表学生编号,用于后续根据该编号查询学生的相关信息。
String sql = null;
// 声明一个字符串变量 sql用于存储即将执行的 SQL 语句,初始值设为 null
// 后续会根据业务逻辑动态地构建和赋值 SQL 语句。
Object[] objects = {sno};
// 创建一个 Object 类型的数组 objects将 sno 作为唯一元素存储在数组中,
// 这个数组将作为参数传递给数据库操作方法,用于绑定 SQL 语句中的占位符,
// 以提高 SQL 语句的安全性和灵活性。
//查询是否存在此人
sql = "select count(*) as num from student where sno = ?";
// 定义一个 SQL 查询语句,用于查询 student 表中学生编号为 sno 的记录数量。
// 使用占位符? 来提高 SQL 语句的安全性,防止 SQL 注入攻击,
// 并将查询结果的数量别名为 num。
int count = DeptAdminDao.findTotalCount(sql, objects);
// 调用 DeptAdminDao 类的 findTotalCount 方法,执行上述 SQL 查询语句,
// 并将查询结果(符合条件的记录数量)赋值给整数变量 count
// 通过这个数量可以判断数据库中是否存在该学生的记录。
if (count > 0){ //有则继续操作
// 如果查询到的记录数量 count 大于 0说明数据库中存在该学生的记录
// 可以继续执行后续的查询和处理操作。
sql = "select * from student where sno = ?";
// 定义一个新的 SQL 查询语句,用于查询 student 表中学生编号为 sno 的所有字段信息。
// 同样使用占位符? 来确保 SQL 语句的安全性。
ResultSet resultSet = DeptAdminDao.qureyInfo(sql, objects);
// 调用 DeptAdminDao 类的 qureyInfo 方法,执行上述 SQL 查询语句,
// 并将查询结果存储在 ResultSet 对象 resultSet 中,以便后续遍历和处理。
Student student = new Student();
// 创建一个 Student 对象 student用于存储从数据库中查询到的学生信息。
try {
while (resultSet.next()){
// 遍历 ResultSet 对象,每次移动到下一行数据。
// 如果有数据resultSet.next() 返回 true则将当前行的数据赋值给 student 对象的相应属性。
student.setSno(resultSet.getString("sno"));
// 将查询结果中 "sno" 字段的值(学生编号)设置为 student 对象的 sno 属性。
student.setSname(resultSet.getString("sname"));
// 将查询结果中 "sname" 字段的值(学生姓名)设置为 student 对象的 sname 属性。
student.setSsex(resultSet.getString("ssex"));
// 将查询结果中 "ssex" 字段的值(学生性别)设置为 student 对象的 ssex 属性。
student.setSage(resultSet.getInt("sage"));
// 将查询结果中 "sage" 字段的值(学生年龄)设置为 student 对象的 sage 属性,
// 并将其转换为整数类型。
student.setSclass(resultSet.getString("sclass"));
// 将查询结果中 "sclass" 字段的值(学生班级)设置为 student 对象的 sclass 属性。
student.setSpecialty(resultSet.getString("specialty"));
// 将查询结果中 "specialty" 字段的值(学生专业)设置为 student 对象的 specialty 属性。
student.setSdept(resultSet.getString("sdept"));
// 将查询结果中 "sdept" 字段的值(学生所属系部)设置为 student 对象的 sdept 属性。
student.setSphone(resultSet.getString("sphone"));
// 将查询结果中 "sphone" 字段的值(学生电话号码)设置为 student 对象的 sphone 属性。
student.setSpsw(resultSet.getString("spsw"));
// 将查询结果中 "spsw" 字段的值(学生密码)设置为 student 对象的 spsw 属性。
}
} catch (Exception e) {
e.printStackTrace();
// 如果在遍历和设置属性的过程中出现异常,打印异常堆栈信息,
// 以便开发人员进行调试和错误排查。
}finally {
JDBCUtils.close(resultSet);
// 无论是否发生异常,都要关闭 ResultSet 对象,释放数据库资源,
// 调用 JDBCUtils 类的 close 方法来关闭 resultSet。
}
System.out.println(student.getSsex());
// 在控制台打印 student 对象的 ssex 属性值,用于调试目的,
// 方便开发人员查看查询到的学生性别信息是否正确。
req.setAttribute("student", student);
// 将 student 对象设置为请求的属性,键为 "student"
// 这样在后续的页面中可以通过这个键获取到 student 对象,从而展示学生信息。
req.getRequestDispatcher("/view/deptadmin/alterstu.jsp").forward(req, resp);
// 将请求转发到 /view/deptadmin/alterstu.jsp 页面,
// 并将包含学生信息的 student 对象传递到该页面,以便进行学生信息的修改操作。
}else {
req.getRequestDispatcher("/view/alluse/noexistdataofalter.jsp").forward(req, resp);
// 如果查询到的记录数量 count 不大于 0即数据库中不存在该学生的记录
// 将请求转发到 /view/alluse/noexistdataofalter.jsp 页面,
// 该页面用于提示用户没有可修改的数据,给用户一个明确的反馈。
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 重写 HttpServlet 类的 doPost 方法,该方法用于处理客户端发送的 HTTP POST 请求。
// 它接收 HttpServletRequest 对象 req 和 HttpServletResponse 对象 resp 作为参数,
// 并且在执行过程中可能会抛出 ServletException 和 IOException 异常,以处理可能出现的错误情况。
doGet(req, resp);
// 调用 doGet 方法处理 POST 请求,即对于该 ServletPOST 请求和 GET 请求的处理逻辑相同,
// 这样可以避免重复编写相似的代码,提高代码的复用性和可维护性。
}
}