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/DeptQueryTeaPunchByIdServle...

229 lines
16 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.entity.TeaPunch;
// 导入自定义的 TeaPunch 实体类,用于封装教师打卡的相关信息,
// 如教师编号、教师姓名、是否打卡、打卡日期、打卡时间、身体状况等。后续会将从数据库查询到的教师打卡信息存储到该实体类对象中。
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 javax.servlet.http.HttpSession;
// 导入 HttpSession 类,用于管理用户的会话状态,能够在用户的多次请求之间存储和共享数据,
// 例如用户的登录信息、权限信息、所属部门等。在本 Servlet 中,将使用它来获取用户所属部门等会话信息,作为查询条件之一。
import java.io.IOException;
// 导入输入输出异常类,当进行输入输出相关的操作(如网络数据传输、文件读写等)时,
// 如果出现错误,就会抛出 IOException 异常,以便进行相应的错误处理,保证系统在面对异常情况时能够做出合理的响应。
import java.sql.ResultSet;
// 导入 ResultSet 类,用于表示数据库查询结果集。当执行 SQL 查询语句后,
// 数据库返回的数据会被封装在 ResultSet 对象中,通过它可以遍历和获取查询结果的每一行数据,
// 以便进行进一步的处理和分析,如将查询到的教师打卡信息存储到 TeaPunch 对象中。
@WebServlet("/DeptQueryTeaPunchByIdServlet1")
// 使用 WebServlet 注解将 DeptQueryTeaPunchByIdServlet1 类标记为一个 Servlet
// 并指定其访问路径为 /DeptQueryTeaPunchByIdServlet1这样客户端就可以通过这个路径向该 Servlet 发送请求,
// 从而触发该 Servlet 中的业务逻辑处理,实现根据教师编号和打卡日期查询教师打卡信息的功能。
public class DeptQueryTeaPunchByIdServlet1 extends HttpServlet {
// 定义一个名为 DeptQueryTeaPunchByIdServlet1 的类,继承自 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 tpunchdate = req.getParameter("tpunchdate");
// 从 HTTP 请求中获取名为 "tpunchdate" 的参数值,并将其赋值给字符串变量 tpunchdate。
// 这里的 tpunchdate 代表教师打卡日期,用于后续根据该日期查询教师的打卡信息。
//获取登录时的session会话对象
HttpSession session = req.getSession();
// 获取当前请求对应的 HttpSession 对象,如果会话不存在则会创建一个新的会话。
// 通过会话对象可以存储和获取用户在会话期间的相关信息,如用户所属部门等。
// String userName = (String) session.getAttribute("userName");
// 注释掉的代码,原本用于从会话中获取名为 "userName" 的属性值,
// 但在当前代码中未被使用,可能是根据实际需求进行了调整或暂时不需要该功能。
// String sno = (String) session.getAttribute("sno");
// 注释掉的代码,原本用于从会话中获取名为 "sno" 的属性值,
// 这里的变量名与前面获取请求参数的 tno 不同,且在当前代码中未被使用,
// 可能是后续功能的预留或不再需要该属性值。
String belong = (String) session.getAttribute("belong");
// 从会话中获取名为 "belong" 的属性值,并将其赋值给字符串变量 belong。
// 这里的 belong 可能代表用户所属的部门信息,用于后续的数据库查询条件,
// 确保查询的教师打卡信息是该部门下的教师的记录。
System.out.println(belong);
// 在控制台打印 belong 的值,用于调试目的,方便开发人员查看从会话中获取的部门信息是否正确,
// 帮助进行问题排查和代码调试。
String sql = null;
// 声明一个字符串变量 sql用于存储即将执行的 SQL 语句,初始值设为 null
// 后续会根据业务逻辑动态地构建和赋值 SQL 语句。
Object[] objects = {tno, tpunchdate, belong};
// 创建一个 Object 类型的数组 objects将 tno、tpunchdate 和 belong 作为元素存储在数组中,
// 这个数组将作为参数传递给数据库操作方法,用于绑定 SQL 语句中的占位符,
// 以提高 SQL 语句的安全性和灵活性。
//查询是否存在此人
sql = "select count(*) as num from teacher t,teapunchin tp where t.tno = tp.tno and tp.tno = ? and tp.tpunchdate = ? and t.tdept = ?";
// 定义一个 SQL 查询语句,用于查询 teacher 表和 teapunchin 表中,
// 满足教师编号关联、教师编号为 tno、打卡日期为 tpunchdate 且教师所属部门为 belong 的记录数量。
// 使用占位符? 来提高 SQL 语句的安全性,防止 SQL 注入攻击,并将查询结果的数量别名为 num。
int count = DeptAdminDao.findTotalCount(sql, objects);
// 调用 DeptAdminDao 类的 findTotalCount 方法,执行上述 SQL 查询语句,
// 并将查询结果(符合条件的记录数量)赋值给整数变量 count
// 通过这个数量可以判断数据库中是否存在该教师在指定部门、指定日期的打卡记录。
if (count > 0){ //有则继续操作
// 如果查询到的记录数量 count 大于 0说明数据库中存在该教师在指定部门、指定日期的打卡记录
// 可以继续执行后续的查询和处理操作。
sql = "select t.tname,tp.* from teacher t,teapunchin tp where t.tno = tp.tno and tp.tno = ? and tp.tpunchdate = ? and t.tdept = ?";
// 定义一个新的 SQL 查询语句,用于查询 teacher 表和 teapunchin 表关联后的信息,
// 选取教师姓名t.tname和 teapunchin 表的所有字段tp.*
// 条件是教师编号匹配、教师编号为 tno、打卡日期为 tpunchdate 且教师所属部门为 belong。
// 同样使用占位符? 来确保 SQL 语句的安全性。
ResultSet resultSet = DeptAdminDao.qureyInfo(sql, objects);
// 调用 DeptAdminDao 类的 qureyInfo 方法,执行上述 SQL 查询语句,
// 并将查询结果存储在 ResultSet 对象 resultSet 中,以便后续遍历和处理。
TeaPunch teaPunch = new TeaPunch();
// 创建一个 TeaPunch 对象 teaPunch用于存储从数据库中查询到的教师打卡信息。
try {
while (resultSet.next()){
// 遍历 ResultSet 对象,每次移动到下一行数据。
// 如果有数据resultSet.next() 返回 true则将当前行的数据赋值给 teaPunch 对象的相应属性。
teaPunch.setTno(resultSet.getString("tno"));
// 将查询结果中 "tno" 字段的值(教师编号)设置为 teaPunch 对象的 tno 属性。
teaPunch.setTname(resultSet.getString("tname"));
// 将查询结果中 "tname" 字段的值(教师姓名)设置为 teaPunch 对象的 tname 属性。
teaPunch.setTispunch(resultSet.getString("tispunch"));
// 将查询结果中 "tispunch" 字段的值(是否打卡)设置为 teaPunch 对象的 tispunch 属性。
teaPunch.setTpunchdate(resultSet.getDate("tpunchdate"));
// 将查询结果中 "tpunchdate" 字段的值(打卡日期)设置为 teaPunch 对象的 tpunchdate 属性,
// 并将其转换为 java.sql.Date 类型。
teaPunch.setTpunchtime(resultSet.getString("tpunchtime"));
// 将查询结果中 "tpunchtime" 字段的值(打卡时间)设置为 teaPunch 对象的 tpunchtime 属性。
teaPunch.setTishot(resultSet.getString("tishot"));
// 将查询结果中 "tishot" 字段的值(是否发热)设置为 teaPunch 对象的 tishot 属性。
teaPunch.setTiscough(resultSet.getString("tiscough"));
// 将查询结果中 "tiscough" 字段的值(是否咳嗽)设置为 teaPunch 对象的 tiscough 属性。
teaPunch.setTisseem(resultSet.getString("tisseem"));
// 将查询结果中 "tisseem" 字段的值(是否有疑似症状)设置为 teaPunch 对象的 tisseem 属性。
teaPunch.setTisdiagnose(resultSet.getString("tisdiagnose"));
// 将查询结果中 "tisdiagnose" 字段的值(是否确诊)设置为 teaPunch 对象的 tisdiagnose 属性。
teaPunch.setTstatus(resultSet.getString("tstatus"));
// 将查询结果中 "tstatus" 字段的值(教师状态)设置为 teaPunch 对象的 tstatus 属性。
}
} catch (Exception e) {
e.printStackTrace();
// 如果在遍历和设置属性的过程中出现异常,打印异常堆栈信息,
// 以便开发人员进行调试和错误排查。
}finally {
JDBCUtils.close(resultSet);
// 无论是否发生异常,都要关闭 ResultSet 对象,释放数据库资源,
// 调用 JDBCUtils 类的 close 方法来关闭 resultSet。
}
System.out.println(teaPunch.getTno());
// 在控制台打印教师打卡对象的教师编号属性,用于调试目的,方便开发人员查看查询结果是否正确。
System.out.println(teaPunch.getTname());
// 在控制台打印教师打卡对象的教师姓名属性,用于调试目的,方便开发人员查看查询结果是否正确。
req.setAttribute("teaPunch", teaPunch);
// 将 teaPunch 对象设置为请求的属性,键为 "teaPunch"
// 这样在后续的页面中可以通过这个键获取到 teaPunch 对象,从而展示教师打卡信息。
req.getRequestDispatcher("/view/deptadmin/alterteapunch.jsp").forward(req, resp);
// 将请求转发到 /view/deptadmin/alterteapunch.jsp 页面,
// 并将包含教师打卡信息的 teaPunch 对象传递到该页面,以便进行教师打卡信息的修改操作。
}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 请求的处理逻辑相同,
// 这样可以避免重复编写相似的代码,提高代码的复用性和可维护性。
}
}