|
|
package com.controller.deptadmin;
|
|
|
// 声明该类所属的包为 com.controller.deptadmin,包机制用于对相关类进行组织管理,
|
|
|
// 方便代码的维护与查找,避免类名冲突,体现项目的逻辑结构层次。
|
|
|
|
|
|
import com.dao.DeptAdminDao;
|
|
|
// 导入自定义的 DeptAdminDao 类,该类通常封装了与数据库交互的操作方法,
|
|
|
// 例如执行 SQL 查询、插入、更新和删除等操作。后续代码会利用该类的方法实现对教师打卡信息的数据库查询。
|
|
|
|
|
|
import com.entity.TeaPunch;
|
|
|
// 导入自定义的 TeaPunch 实体类,用于封装教师打卡的相关信息,
|
|
|
// 如教师编号、教师姓名、是否打卡、打卡日期、打卡时间、身体状况等。后续会将从数据库查询到的教师打卡信息存储到该实体类对象中。
|
|
|
|
|
|
import com.utils.JDBCUtils;
|
|
|
// 导入自定义的 JDBCUtils 工具类,一般包含与 JDBC(Java 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 请求,即对于该 Servlet,POST 请求和 GET 请求的处理逻辑相同,
|
|
|
// 这样可以避免重复编写相似的代码,提高代码的复用性和可维护性。
|
|
|
}
|
|
|
} |