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/schoadmin/SchoQueryTeaPunchByPageServ...

284 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.schoadmin;
// 声明该类所在的包为 com.controller.schoadmin通过包的组织
// 可以将相关功能的类集中管理,避免类名冲突,方便代码的维护和查找,体现了项目的逻辑结构。
import com.dao.DeptAdminDao;
// 导入自定义的数据访问对象类 DeptAdminDao该类通常封装了与数据库交互的方法
// 如执行 SQL 查询、插入、更新、删除等操作。在本代码中,会使用该类的方法来计算满足条件的记录总数。
import com.dao.StuDao;
// 导入自定义的数据访问对象类 StuDao虽然类名包含“Stu”可能暗示与学生相关
// 但在本代码中用于执行分页查询教师打卡信息的操作(调用了其 QureyInfoByPage 方法),
// 推测该类可能包含一些通用的分页查询数据库的方法。
import com.entity.PageBean;
// 导入自定义的 PageBean 实体类,用于封装分页相关的信息,
// 例如当前页码、每页显示的记录数、总记录数、总页数以及数据列表等。
// 这里用于管理和传递教师打卡信息的分页查询结果。
import com.entity.TeaPunch;
// 导入自定义的 TeaPunch 实体类,用于封装教师打卡的相关信息,
// 包括教师编号、教师姓名、所属部门、是否打卡、打卡日期、打卡时间、身体状况等信息。
// 后续会用它来存储从数据库查询到的教师打卡记录。
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 对象中,通过它可以遍历和获取查询结果的每一行数据,
// 以便进行进一步的处理和分析,如将查询到的教师打卡信息存储到 TeaPunch 对象中。
import java.util.ArrayList;
// 导入 ArrayList 类,它是 Java 集合框架中的一种动态数组实现。
// 可以用来存储和管理一组对象,并且可以根据需要动态地增加或减少元素数量。
// 在本 Servlet 中,将使用 ArrayList 来存储从数据库查询到的教师打卡对象TeaPunch
@WebServlet("/SchoQueryTeaPunchByPageServlet")
// 使用 WebServlet 注解将 SchoQueryTeaPunchByPageServlet 类标记为一个 Servlet
// 并指定其访问路径为 /SchoQueryTeaPunchByPageServlet这样客户端就可以通过这个路径向该 Servlet 发送请求,
// 从而触发该 Servlet 中的业务逻辑处理,实现教师打卡信息的分页查询功能。
public class SchoQueryTeaPunchByPageServlet extends HttpServlet {
// 定义一个名为 SchoQueryTeaPunchByPageServlet 的类,继承自 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 tdept = req.getParameter("tdept");
// 从 HTTP 请求中获取名为 "tdept" 的参数值,并将其赋值给字符串变量 tdept。
// 这里的 tdept 代表教师所属部门,用于后续根据部门进行模糊查询教师打卡信息。
String tpunchdate = req.getParameter("tpunchdate");
// 从 HTTP 请求中获取名为 "tpunchdate" 的参数值,并将其赋值给字符串变量 tpunchdate。
// 这里的 tpunchdate 代表教师打卡日期,用于后续根据打卡日期进行模糊查询教师打卡信息。
System.out.println(tno);
// 在控制台打印获取到的教师编号参数 tno用于调试目的方便开发人员查看参数值是否正确。
System.out.println(tname);
// 在控制台打印获取到的教师姓名参数 tname用于调试目的方便开发人员查看参数值是否正确。
System.out.println(tdept);
// 在控制台打印获取到的教师所属部门参数 tdept用于调试目的方便开发人员查看参数值是否正确。
System.out.println(tpunchdate);
// 在控制台打印获取到的教师打卡日期参数 tpunchdate用于调试目的方便开发人员查看参数值是否正确。
//如果传入的参数为null则置为空字符串
if (tno == null){
tno = "";
}
// 如果获取到的教师编号参数 tno 为 null则将其设置为空字符串
// 以确保后续的模糊查询能够正常进行,避免空指针异常。
if (tname == null){
tname = "";
}
// 如果获取到的教师姓名参数 tname 为 null则将其设置为空字符串
// 以确保后续的模糊查询能够正常进行,避免空指针异常。
if (tdept == null){
tdept = "";
}
// 如果获取到的教师所属部门参数 tdept 为 null则将其设置为空字符串
// 以确保后续的模糊查询能够正常进行,避免空指针异常。
if (tpunchdate == null){
tpunchdate = "";
}
// 如果获取到的教师打卡日期参数 tpunchdate 为 null则将其设置为空字符串
// 以确保后续的模糊查询能够正常进行,避免空指针异常。
//变为like查询所需的字符串参数
String tno1 = "%" + tno + "%";
// 将教师编号参数 tno 转换为适合 SQL 模糊查询LIKE 语句)的字符串格式,
// 在 tno 的前后添加通配符 "%",以便查询包含该编号片段的教师打卡记录。
String tname1 = "%" + tname + "%";
// 将教师姓名参数 tname 转换为适合 SQL 模糊查询LIKE 语句)的字符串格式,
// 在 tname 的前后添加通配符 "%",以便查询包含该姓名片段的教师打卡记录。
String tdept1 = "%" + tdept + "%";
// 将教师所属部门参数 tdept 转换为适合 SQL 模糊查询LIKE 语句)的字符串格式,
// 在 tdept 的前后添加通配符 "%",以便查询包含该部门片段的教师打卡记录。
String tpunchdate1 = "%" + tpunchdate + "%";
// 将教师打卡日期参数 tpunchdate 转换为适合 SQL 模糊查询LIKE 语句)的字符串格式,
// 在 tpunchdate 的前后添加通配符 "%",以便查询包含该日期片段的教师打卡记录。
//设置请求的属性参数,后面需要用
req.setAttribute("tno", tno);
// 将原始的教师编号参数 tno 设置为请求的属性,键为 "tno"
// 以便在后续的页面中可以通过这个键获取到该参数值,用于展示查询条件或进行其他操作。
req.setAttribute("tname",tname);
// 将原始的教师姓名参数 tname 设置为请求的属性,键为 "tname"
// 以便在后续的页面中可以通过这个键获取到该参数值,用于展示查询条件或进行其他操作。
req.setAttribute("tdept", tdept);
// 将原始的教师所属部门参数 tdept 设置为请求的属性,键为 "tdept"
// 以便在后续的页面中可以通过这个键获取到该参数值,用于展示查询条件或进行其他操作。
req.setAttribute("tpunchdate",tpunchdate);
// 将原始的教师打卡日期参数 tpunchdate 设置为请求的属性,键为 "tpunchdate"
// 以便在后续的页面中可以通过这个键获取到该参数值,用于展示查询条件或进行其他操作。
System.out.println(tno1);
// 在控制台打印转换后的教师编号模糊查询参数 tno1用于调试目的
// 方便开发人员查看转换后的参数是否正确。
System.out.println(tname1);
// 在控制台打印转换后的教师姓名模糊查询参数 tname1用于调试目的
// 方便开发人员查看转换后的参数是否正确。
System.out.println(tdept1);
// 在控制台打印转换后的教师所属部门模糊查询参数 tdept1用于调试目的
// 方便开发人员查看转换后的参数是否正确。
System.out.println(tpunchdate1);
// 在控制台打印转换后的教师打卡日期模糊查询参数 tpunchdate1用于调试目的
// 方便开发人员查看转换后的参数是否正确。
//获取登录时的session会话对象
HttpSession session = req.getSession();
// 获取当前请求对应的 HttpSession 对象,如果会话不存在则会创建一个新的会话。
// 通过会话对象可以存储和获取用户在会话期间的相关信息,如用户所属部门等。
// String userName = (String) session.getAttribute("userName");
// 注释掉的代码,原本用于从会话中获取名为 "userName" 的属性值,
// 但在当前代码中未被使用,可能是根据实际需求进行了调整或暂时不需要该功能。
// String sno = (String) session.getAttribute("sno");
// 注释掉的代码,原本用于从会话中获取名为 "sno" 的属性值,
// 这里的变量名与前面获取请求参数的 tno、tname、tdept、tpunchdate 等不同,
// 且在当前代码中未被使用,可能是后续功能的预留或不再需要该属性值。
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
// 确保当前页码是有效的,避免出现负数或零页码的情况。
//设置St