package com.controller.deptadmin; // 声明该类所在的包为 com.controller.deptadmin,包用于组织和管理相关的类, // 有助于避免类名冲突,同时方便代码的维护和查找,体现了项目的逻辑结构。 import com.dao.DeptAdminDao; // 导入自定义的 DeptAdminDao 类,该类通常封装了与数据库交互的操作方法, // 如执行 SQL 查询、插入、更新、删除等操作,后续会使用它来查询教师信息。 import com.entity.Student; // 导入自定义的 Student 实体类,不过在当前代码中未使用该类,可能是后续扩展功能预留的。 import com.entity.Teacher; // 导入自定义的 Teacher 实体类,用于封装教师的相关信息,如教师编号、姓名、性别等, // 后续会用它来存储从数据库查询到的教师信息。 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 类继承它,从而具备处理 HTTP 请求的能力。 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("/DeptQueryTeaByIdServlet") // 使用 WebServlet 注解将 DeptQueryTeaByIdServlet 类标记为一个 Servlet, // 并指定其访问路径为 /DeptQueryTeaByIdServlet,客户端可以通过这个路径向该 Servlet 发送请求。 public class DeptQueryTeaByIdServlet extends HttpServlet { // 定义一个名为 DeptQueryTeaByIdServlet 的类,继承自 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 格式的内容,以便客户端正确解析和显示响应信息。 String tno = req.getParameter("tno"); // 从 HTTP 请求中获取名为 "tno" 的参数值,该参数代表教师编号, // 用于后续根据教师编号查询教师信息。 String sql = null; // 声明一个字符串变量 sql,用于存储即将执行的 SQL 语句,初始值设为 null, // 后续会根据业务逻辑动态地构建和赋值 SQL 语句。 Object[] objects = {tno}; // 创建一个 Object 类型的数组 objects,将 tno 作为元素存储在数组中, // 这个数组将作为参数传递给数据库操作方法,用于绑定 SQL 语句中的占位符。 System.out.println(tno); // 在控制台打印获取到的教师编号 tno,用于调试目的,方便开发人员查看参数值是否正确。 //查询是否存在此人 sql = "select count(*) as num from teacher where tno = ?"; // 定义一个 SQL 查询语句,用于查询 teacher 表中,教师编号为 tno 的记录数量。 // 使用占位符 ? 来提高 SQL 语句的安全性,防止 SQL 注入攻击,并将查询结果的数量别名为 num。 int count = DeptAdminDao.findTotalCount(sql, objects); // 调用 DeptAdminDao 类的 findTotalCount 方法,执行上述 SQL 查询语句, // 并将查询结果(符合条件的记录数量)赋值给整数变量 count, // 通过这个数量可以判断数据库中是否存在该教师编号对应的教师记录。 if (count > 0) { //有则继续操作 // 如果查询到的记录数量 count 大于 0,说明数据库中存在该教师编号对应的教师记录, // 可以继续执行后续的查询和处理操作。 sql = "select * from teacher where tno = ?"; // 定义一个新的 SQL 查询语句,用于查询 teacher 表中,教师编号为 tno 的所有字段信息。 // 同样使用占位符 ? 来确保 SQL 语句的安全性。 ResultSet resultSet = DeptAdminDao.qureyInfo(sql, objects); // 调用 DeptAdminDao 类的 qureyInfo 方法,执行上述 SQL 查询语句, // 并将查询结果存储在 ResultSet 对象 resultSet 中,以便后续遍历和处理。 Teacher teacher = new Teacher(); // 创建一个 Teacher 对象 teacher,用于存储从数据库中查询到的教师信息。 try { while (resultSet.next()){ // 遍历 ResultSet 对象,每次移动到下一行数据。 // 如果有数据(resultSet.next() 返回 true),则将当前行的数据赋值给 teacher 对象的相应属性。 teacher.setTno(resultSet.getString("tno")); // 将查询结果中 "tno" 字段的值(教师编号)设置为 teacher 对象的 tno 属性。 teacher.setTname(resultSet.getString("tname")); // 将查询结果中 "tname" 字段的值(教师姓名)设置为 teacher 对象的 tname 属性。 teacher.setTsex(resultSet.getString("tsex")); // 将查询结果中 "tsex" 字段的值(教师性别)设置为 teacher 对象的 tsex 属性。 teacher.setTage(resultSet.getInt("tage")); // 将查询结果中 "tage" 字段的值(教师年龄)设置为 teacher 对象的 tage 属性, // 并将其转换为整数类型。 teacher.setTdept(resultSet.getString("tdept")); // 将查询结果中 "tdept" 字段的值(教师所属部门)设置为 teacher 对象的 tdept 属性。 teacher.setTphone(resultSet.getString("tphone")); // 将查询结果中 "tphone" 字段的值(教师联系电话)设置为 teacher 对象的 tphone 属性。 teacher.setTpsw(resultSet.getString("tpsw")); // 将查询结果中 "tpsw" 字段的值(教师密码)设置为 teacher 对象的 tpsw 属性。 } } catch (Exception e) { e.printStackTrace(); // 如果在遍历和设置属性的过程中出现异常,打印异常堆栈信息, // 以便开发人员进行调试和错误排查。 }finally { JDBCUtils.close(resultSet); // 无论是否发生异常,都要关闭 ResultSet 对象,释放数据库资源, // 调用 JDBCUtils 类的 close 方法来关闭 resultSet。 } System.out.println(teacher.getTsex()); // 在控制台打印教师对象的性别属性,用于调试目的,方便开发人员查看查询结果是否正确。 req.setAttribute("teacher", teacher); // 将 teacher 对象设置为请求的属性,键为 "teacher", // 这样在后续的页面中可以通过这个键获取到 teacher 对象,从而展示教师信息。 req.getRequestDispatcher("/view/deptadmin/altertea.jsp").forward(req, resp); // 将请求转发到 /view/deptadmin/altertea.jsp 页面, // 并将包含教师信息的 teacher 对象传递到该页面,以便进行教师信息的修改操作。 }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 请求的处理逻辑相同, // 这样可以避免重复编写相似的代码,提高代码的复用性和可维护性。 } }