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/DeptQueryTeaByPageServlet.java

285 lines
17 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 查询、插入、更新和删除等操作。后续代码会使用这些方法来实现对教师信息的查询和统计等功能。
import com.dao.StuDao;
// 导入自定义的 StuDao 类,虽然类名是 StuDao学生数据访问对象
// 但在本代码中用于执行教师信息的分页查询操作(调用了其 QureyInfoByPage 方法),
// 可能该类也包含一些通用的分页查询方法。
import com.entity.PageBean;
// 导入自定义的 PageBean 实体类,用于封装分页相关的信息,
// 如当前页码、每页显示的记录数、总记录数、总页数以及数据列表等,
// 用于管理和传递教师信息分页查询的结果。
import com.entity.Student;
// 导入自定义的 Student 实体类,在当前代码中未使用该类,
// 可能是项目中其他部分会用到,或者是在代码的扩展过程中预留的。
import com.entity.Teacher;
// 导入自定义的 Teacher 实体类,用于封装教师的相关信息,
// 如教师编号、姓名、性别、年龄、所属部门、联系电话、密码等,
// 后续会用它来存储从数据库查询到的教师信息。
import com.utils.JDBCUtils;
// 导入自定义的 JDBCUtils 工具类,一般包含与 JDBCJava Database Connectivity
// 相关的通用方法,如获取数据库连接、关闭数据库连接、处理结果集等,
// 用于简化数据库操作流程,提高代码的可维护性和复用性。在本代码中,
// 会使用该类的方法来关闭数据库查询结果集ResultSet释放数据库资源。
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 javax.servlet.http.HttpSession;
// 导入 HttpSession 类,用于管理用户的会话状态,能够在用户的多次请求之间存储和共享数据,
// 例如用户的登录信息、权限信息、所属部门等。在本 Servlet 中,将使用它来获取用户所属部门等会话信息,
// 作为教师信息查询的条件之一。
import java.io.IOException;
// 导入输入输出异常类,当进行输入输出相关的操作(如网络数据传输、文件读写等)时,
// 如果出现错误,就会抛出 IOException 异常,以便进行相应的错误处理,
// 保证系统在面对异常情况时能够做出合理的响应。
import java.sql.ResultSet;
// 导入 ResultSet 类,用于表示数据库查询结果集。当执行 SQL 查询语句后,
// 数据库返回的数据会被封装在 ResultSet 对象中,通过它可以遍历和获取查询结果的每一行数据,
// 以便进行进一步的处理和分析,如将查询到的教师信息存储到 Teacher 对象中。
import java.util.ArrayList;
// 导入 ArrayList 类,它是 Java 集合框架中的一种动态数组实现。
// 可以用来存储和管理一组对象,并且可以根据需要动态地增加或减少元素数量。
// 在本 Servlet 中,将使用 ArrayList 来存储从数据库查询到的教师对象Teacher
@WebServlet("/DeptQueryTeaByPageServlet")
// 使用 WebServlet 注解将 DeptQueryTeaByPageServlet 类标记为一个 Servlet
// 并指定其访问路径为 /DeptQueryTeaByPageServlet这样客户端就可以通过这个路径向该 Servlet 发送请求,
// 从而触发该 Servlet 中的业务逻辑处理,实现教师信息的分页查询功能。
public class DeptQueryTeaByPageServlet extends HttpServlet {
// 定义一个名为 DeptQueryTeaByPageServlet 的类,继承自 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 tno = req.getParameter("tno");
// 从 HTTP 请求中获取名为 "tno" 的参数值,并将其赋值给字符串变量 tno。
// 这里的 tno 代表教师编号,用于后续根据教师编号进行模糊查询教师信息。
String tname = req.getParameter("tname");
// 从 HTTP 请求中获取名为 "tname" 的参数值,并将其赋值给字符串变量 tname。
// 这里的 tname 代表教师姓名,用于后续根据教师姓名进行模糊查询教师信息。
String tsex = req.getParameter("tsex");
// 从 HTTP 请求中获取名为 "tsex" 的参数值,并将其赋值给字符串变量 tsex。
// 这里的 tsex 代表教师性别,用于后续根据教师性别进行模糊查询教师信息。
//如果传入的参数为null则置为空字符串
if (tno == null){
tno = "";
}
// 如果获取到的教师编号参数 tno 为 null则将其设置为空字符串
// 以确保后续的模糊查询能够正常进行,避免空指针异常。
if (tname == null){
tname = "";
}
// 如果获取到的教师姓名参数 tname 为 null则将其设置为空字符串
// 以确保后续的模糊查询能够正常进行,避免空指针异常。
if (tsex == null){
tsex = "";
}
// 如果获取到的教师性别参数 tsex 为 null则将其设置为空字符串
// 以确保后续的模糊查询能够正常进行,避免空指针异常。
//变为like查询所需的字符串参数
String tno1 = "%" + tno + "%";
// 将教师编号参数 tno 转换为适合 SQL 模糊查询LIKE 语句)的字符串格式,
// 在 tno 的前后添加通配符 "%",以便查询包含该编号片段的教师记录。
String tname1 = "%" + tname + "%";
// 将教师姓名参数 tname 转换为适合 SQL 模糊查询LIKE 语句)的字符串格式,
// 在 tname 的前后添加通配符 "%",以便查询包含该姓名片段的教师记录。
String tsex1 = "%" + tsex + "%";
// 将教师性别参数 tsex 转换为适合 SQL 模糊查询LIKE 语句)的字符串格式,
// 在 tsex 的前后添加通配符 "%",以便查询包含该性别片段的教师记录。
//设置请求的属性参数,后面需要用
req.setAttribute("tno",tno);
// 将原始的教师编号参数 tno 设置为请求的属性,键为 "tno"
// 以便在后续的页面中可以通过这个键获取到该参数值,用于展示查询条件或进行其他操作。
req.setAttribute("tname",tname);
// 将原始的教师姓名参数 tname 设置为请求的属性,键为 "tname"
// 以便在后续的页面中可以通过这个键获取到该参数值,用于展示查询条件或进行其他操作。
req.setAttribute("tsex", tsex);
// 将原始的教师性别参数 tsex 设置为请求的属性,键为 "tsex"
// 以便在后续的页面中可以通过这个键获取到该参数值,用于展示查询条件或进行其他操作。
System.out.println(tno1);
// 在控制台打印转换后的教师编号模糊查询参数 tno1用于调试目的
// 方便开发人员查看转换后的参数是否正确。
System.out.println(tname1);
// 在控制台打印转换后的教师姓名模糊查询参数 tname1用于调试目的
// 方便开发人员查看转换后的参数是否正确。
System.out.println(tsex1);
// 在控制台打印转换后的教师性别模糊查询参数 tsex1用于调试目的
// 方便开发人员查看转换后的参数是否正确。
//获取登录时的session会话对象
HttpSession session = req.getSession();
// 获取当前请求对应的 HttpSession 对象,如果会话不存在则会创建一个新的会话。
// 通过会话对象可以存储和获取用户在会话期间的相关信息,如用户所属部门等。
// String userName = (String) session.getAttribute("userName");
// 注释掉的代码,原本用于从会话中获取名为 "userName" 的属性值,
// 但在当前代码中未被使用,可能是根据实际需求进行了调整或暂时不需要该功能。
// String sno = (String) session.getAttribute("sno");
// 注释掉的代码,原本用于从会话中获取名为 "sno" 的属性值,
// 这里的变量名与前面获取请求参数的 tno、tname、tsex 等不同,
// 且在当前代码中未被使用,可能是后续功能的预留或不再需要该属性值。
String belong = (String) session.getAttribute("belong");
// 从会话中获取名为 "belong" 的属性值,并将其赋值给字符串变量 belong。
// 这里的 belong 可能代表用户所属的部门信息,用于后续的数据库查询条件,
// 确保查询的教师信息是该部门下的教师记录。
String sql = null;
// 声明一个字符串变量 sql用于存储即将执行的 SQL 语句,初始值设为 null
// 后续会根据业务逻辑动态地构建和赋值 SQL 语句。
// System.out.println(userName);
// 注释掉的代码,原本用于在控制台打印从会话中获取的用户名 userName
// 但由于该变量未被使用,所以此打印语句也被注释掉。
// System.out.println(sno);
// 注释掉的代码,原本用于在控制台打印从会话中获取的学生编号 sno
// 但由于该变量未被使用,所以此打印语句也被注释掉。
System.out.println(belong);
// 在控制台打印从会话中获取的用户所属部门信息 belong用于调试目的
// 方便开发人员查看获取到的部门信息是否正确。
System.out.println("hdghghjg");
// 在控制台打印字符串 "hdghghjg",可能是开发人员用于调试或标记的输出内容,
// 可以帮助确定代码执行到的位置。
String currentPage = req.getParameter("currentPage");//从请求对象中获取当前页码
// 从 HTTP 请求中获取名为 "currentPage" 的参数值,并将其赋值给字符串变量 currentPage。
// 这里的 currentPage 代表当前页码,用于实现分页查询功能。
String rows = req.getParameter("rows");//从请求获取对象中每页显示的行数
// 从 HTTP 请求中获取名为 "rows" 的参数值,并将其赋值给字符串变量 rows。
// 这里的 rows 代表每页显示的记录数,用于实现分页查询功能。
//如果未设请求参数,此处自动设置参数为第一页
if (currentPage == null || "".equals(currentPage)){
currentPage = "1";
}
// 如果获取到的当前页码参数 currentPage 为 null 或空字符串,则将其设置为 "1"
// 即默认显示第一页的教师信息,确保分页查询的正常进行。
//如果没有设置rows的请求参数此处自动设置
if (rows == null || "".equals(rows)){
rows = "7";
}
// 如果获取到的每页显示行数参数 rows 为 null 或空字符串,则将其设置为 "7"
// 即默认每页显示 7 条教师记录,确保分页查询的正常进行。
//获取条件查询的参数
int currentPage1 = Integer.parseInt(currentPage);
// 将字符串类型的当前页码参数 currentPage 转换为整数类型,并赋值给变量 currentPage1
// 以便后续进行计算和处理。
int rows1 = Integer.parseInt(rows);
// 将字符串类型的每页显示行数参数 rows 转换为整数类型,并赋值给变量 rows1
// 以便后续进行计算和处理。
//如果当前页数小于1则设置当前页数为1
if (currentPage1 <= 0){
currentPage1 = 1;
}
// 如果转换后的当前页码 currentPage1 小于等于 0则将其设置为 1
// 确保当前页码是有效的,避免出现负数或零页码的情况。
//设置StuPunch类的对象类型
PageBean<Teacher> pageBean = new PageBean<Teacher>();
// 创建一个 PageBean 对象 pageBean泛型类型为 Teacher用于封装分页查询教师信息的相关信息
//设置当前页码
pageBean.setCurrentPage(currentPage1);
// 将当前页码 currentPage1 设置到 pageBean 对象中,以便在后续处理中使用。
//设置每页的记录数
pageBean.setRows(rows1);
// 将每页显示的记录数 rows1 设置到 pageBean 对象中,以便在后续处理中使用。
sql = " select count(*) as num from teacher where tno like ? and tname like ? and tsex like ? and tdept = ?";
// 定义一个 SQL 查询语句,用于查询 teacher 表中,满足教师编号模糊匹配、
// 教师姓名模糊匹配、教师性别模糊匹配且所属部门为 belong 的记录数量。
// 使用占位符? 来提高 SQL 语句的安全性,防止 SQL 注入攻击,并将查询结果的数量别名为 num。
Object[] objects = {tno1, tname1, tsex1, belong};
// 创建一个 Object 类型的数组 objects将转换后的模糊查询参数 tno1、tname1、tsex1
// 和所属部门信息 belong 作为元素存储在数组中,这个数组将作为参数传递给数据库操作方法,
// 用于绑定 SQL 语句中的占位符。
/* sql = " select count(*) as num from teacher where tdept = ?";
Object[] objects = {belong};*/
// 注释掉的代码,原本是一个简单的 SQL 查询语句,用于查询所属部门为 belong 的教师记录数量,
// 可能由于业务需求的变化,现在使用更复杂的带模糊查询条件的语句,所以将其注释掉。
//计算总记录数,并设置
int totalCount = DeptAdminDao.findTotalCount(sql, objects);
// 调用 DeptAdminDao 类的 findTotalCount 方法,执行上述 SQL 查询语句,
// 并将查询结果(符合条件的记录数量)赋值给