diff --git a/src/web/servlet/teacher/AddOptionalCourseServlet.java b/src/web/servlet/teacher/AddOptionalCourseServlet.java index 45a4b70..9c5f5e9 100644 --- a/src/web/servlet/teacher/AddOptionalCourseServlet.java +++ b/src/web/servlet/teacher/AddOptionalCourseServlet.java @@ -1,51 +1,85 @@ -package web.servlet.teacher; +// 包声明,表明该Servlet类所属的包名,用于组织和管理Java类 +package web.servlet.teacher; import domain.Course; import domain.Teacher; -import service.CourseService; -import service.impl.CourseServiceImpl; +// 导入课程相关的业务逻辑接口,用于后续调用相关业务方法 +import service.CourseService; +// 导入课程业务逻辑接口的具体实现类,用于创建具体的业务对象来处理课程相关操作 +import service.impl.CourseServiceImpl; import javax.servlet.ServletException; -import javax.servlet.annotation.WebServlet; -import javax.servlet.http.HttpServlet; +// 用于标注该类是一个Servlet,并配置其访问的URL路径 +import javax.servlet.annotation.WebServlet; +// 继承自HttpServlet,是Java Web中处理HTTP请求的基础类 +import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +// 用于表示HTTP会话,可在其中存储和获取用户相关的会话信息 +import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.Date; -@WebServlet("/addOptionalCourseServlet") +// 使用@WebServlet注解配置该Servlet的访问路径为 "/addOptionalCourseServlet", +// 意味着当客户端通过此路径发起请求时,会由该Servlet进行处理 +@WebServlet("/addOptionalCourseServlet") public class AddOptionalCourseServlet extends HttpServlet { + + // 重写doPost方法,用于处理HTTP POST请求 + // 参数request表示客户端发来的请求对象,包含请求的各种信息 + // 参数response表示要返回给客户端的响应对象,用于设置响应内容等 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",确保能正确解析包含中文等多字节字符的请求参数 + request.setCharacterEncoding("utf-8"); - HttpSession session = request.getSession(); - Teacher teacher = (Teacher) session.getAttribute("teacher"); + // 获取当前请求对应的会话对象,如果不存在则创建一个新的会话 + HttpSession session = request.getSession(); + // 从会话中获取名为"teacher"的属性值,并转换为Teacher类型, + // 通常这里存储的是当前登录教师的相关信息 + Teacher teacher = (Teacher) session.getAttribute("teacher"); - String cid = request.getParameter("cid"); - String cname = request.getParameter("course-name"); - String cinfo = request.getParameter("course-info"); + // 从请求参数中获取课程ID,对应HTML表单中名为"cid"的输入项 + String cid = request.getParameter("cid"); + // 从请求参数中获取课程名称,对应HTML表单中名为"course-name"的输入项 + String cname = request.getParameter("course-name"); + // 从请求参数中获取课程详细信息,对应HTML表单中名为"course-info"的输入项 + String cinfo = request.getParameter("course-info"); - CourseService service = new CourseServiceImpl(); - Course course = service.findSelectCourseByCourseId(cid); - if (course != null) { - request.setAttribute("update_msg","课程ID冲突,请重新添加!"+String.format("%tT",new Date())); + // 创建课程业务逻辑层的具体实现类对象,用于调用具体的课程相关业务方法 + CourseService service = new CourseServiceImpl(); + // 通过业务层方法,根据课程ID查找对应的课程对象,查看是否已存在该课程 + Course course = service.findSelectCourseByCourseId(cid); + if (course!= null) { + // 如果课程已存在(即查找结果不为空),则向请求对象中设置一个属性"update_msg", + // 提示课程ID冲突,并附带当前时间信息,然后将请求转发到指定的JSP页面进行展示 + request.setAttribute("update_msg","课程ID冲突,请重新添加!" + String.format("%tT",new Date())); request.getRequestDispatcher("/WEB-INF/teacher/addOptionalCourse.jsp").forward(request,response); - }else { - Course newCourse = new Course(); - newCourse.setC_id(cid); - newCourse.setC_name(cname); - newCourse.setC_info(cinfo); - newCourse.setT_id(teacher.getT_id()); - newCourse.setT_name(teacher.getT_name()); - - service.addOptionalCourse(newCourse); - request.setAttribute("update_msg","课程添加成功!"+String.format("%tT",new Date())); + } else { + // 如果课程不存在,则创建一个新的Course对象,用于封装要添加的课程信息 + Course newCourse = new Course(); + // 设置新课程的ID + newCourse.setC_id(cid); + // 设置新课程的名称 + newCourse.setC_name(cname); + // 设置新课程的详细信息 + newCourse.setC_info(cinfo); + // 设置新课程所属教师的ID,从之前从会话中获取的教师对象中获取教师ID + newCourse.setT_id(teacher.getT_id()); + // 设置新课程所属教师的姓名,从之前从会话中获取的教师对象中获取教师姓名 + newCourse.setT_name(teacher.getT_name()); + + // 通过业务层对象调用添加可选课程的方法,将新创建的课程信息保存到数据库等存储介质中 + service.addOptionalCourse(newCourse); + // 向请求对象中设置一个属性"update_msg",提示课程添加成功,并附带当前时间信息 + request.setAttribute("update_msg","课程添加成功!" + String.format("%tT",new Date())); + // 将请求转发到指定的JSP页面(通常用于展示添加课程后的相关提示信息等) request.getRequestDispatcher("/WEB-INF/teacher/addOptionalCourse.jsp").forward(request,response); } } + // 重写doGet方法,在该Servlet中直接调用doPost方法来处理GET请求, + // 意味着GET请求的处理逻辑和POST请求一样(实际应用中可根据需求单独定制处理逻辑) protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/AddSelectCourseServlet.java b/src/web/servlet/teacher/AddSelectCourseServlet.java index 4143a74..6712dc0 100644 --- a/src/web/servlet/teacher/AddSelectCourseServlet.java +++ b/src/web/servlet/teacher/AddSelectCourseServlet.java @@ -1,4 +1,5 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于web.servlet.teacher包下,用于对类进行合理的组织和管理,方便在项目中区分不同功能模块的类。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -6,15 +7,35 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +// 导入必要的Java EE相关的类库。 +// ServletException用于处理Servlet执行过程中出现的异常情况。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,方便容器识别并进行相关配置和管理。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法。 +// HttpServletRequest用于获取来自客户端的HTTP请求信息,例如请求参数、请求头信息等。 +// HttpServletResponse用于向客户端发送HTTP响应,例如设置响应状态码、响应头以及返回响应内容等。 +// IOException用于处理输入输出相关的异常,比如读写文件、网络传输等出现问题时抛出。 @WebServlet("/addSelectCourseServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定该Servlet对应的访问路径为"/addSelectCourseServlet"。当客户端通过这个路径发起HTTP请求时,容器就会找到并调用这个Servlet来处理请求。 public class AddSelectCourseServlet extends HttpServlet { + // 定义一个名为AddSelectCourseServlet的类,它继承自HttpServlet类,表明这个类是一个用于处理HTTP请求的Servlet,继承HttpServlet可以方便地重写相关方法来处理不同类型的HTTP请求(如GET、POST等)。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet中的doPost方法,用于处理HTTP POST请求。当客户端通过POST方式访问此Servlet对应的路径时,容器会调用这个方法来处理请求。 + // 参数request包含了客户端发送过来的请求信息,response用于向客户端返回响应信息。 + request.setCharacterEncoding("utf-8"); - request.getRequestDispatcher("/WEB-INF/teacher/addOptionalCourse.jsp").forward(request,response); + // 设置请求的字符编码为"utf-8",确保从客户端接收到的请求参数等数据能够正确地按照UTF-8编码进行解析,避免中文等特殊字符出现乱码问题。 + + request.getRequestDispatcher("/WEB-INF/teacher/addOptionalCourse.jsp").forward(request, response); + // 获取一个请求转发器,指定转发的目标页面为"/WEB-INF/teacher/addOptionalCourse.jsp"。 + // 然后使用forward方法将当前请求转发到指定的JSP页面,这样在处理完Servlet中的业务逻辑后,可以让服务器端渲染并返回对应的JSP页面内容给客户端,整个过程对客户端来说是一次请求响应的过程,地址栏中的URL不会发生变化。 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet中的doGet方法,用于处理HTTP GET请求。当客户端通过GET方式访问此Servlet对应的路径时,容器会调用这个方法来处理请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即都会将请求转发到"/WEB-INF/teacher/addOptionalCourse.jsp"这个JSP页面进行后续处理。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/AddTeacherInfoServlet.java b/src/web/servlet/teacher/AddTeacherInfoServlet.java index 62ece8d..610bc8a 100644 --- a/src/web/servlet/teacher/AddTeacherInfoServlet.java +++ b/src/web/servlet/teacher/AddTeacherInfoServlet.java @@ -1,8 +1,11 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于web.servlet.teacher包下,按照功能模块对类进行分类管理,方便在项目结构中组织代码。 import domain.Teacher; import service.TeacherService; import service.impl.TeacherServiceImpl; +// 导入与教师相关的领域模型类(Teacher),教师业务逻辑的服务接口(TeacherService)以及该接口的具体实现类(TeacherServiceImpl)。 +// Teacher类通常用于封装教师相关的属性和业务逻辑,TeacherService定义了教师业务操作的抽象方法,TeacherServiceImpl则是这些方法的具体实现类。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -11,25 +14,63 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Date; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作和异常。 +// ServletException用于处理Servlet执行过程中出现的异常情况。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并配置其相关的访问路径等属性。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法。 +// HttpServletRequest用于获取客户端发送过来的HTTP请求中的各种信息,如请求参数等。 +// HttpServletResponse用于向客户端发送HTTP响应,比如设置响应状态码、响应头以及返回响应内容等。 +// IOException用于处理输入输出相关的异常,例如读写文件或者网络传输等出现问题时抛出。 +// Date类用于获取当前的日期和时间信息,在这里可能用于记录操作的时间等用途。 @WebServlet("/addTeacherInfoServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定其对应的访问路径为"/addTeacherInfoServlet"。当客户端通过这个URL路径发起HTTP请求时,Web容器就会找到并调用这个Servlet来处理请求。 public class AddTeacherInfoServlet extends HttpServlet { + // 定义一个名为AddTeacherInfoServlet的类,它继承自HttpServlet类,意味着这个类是一个用于处理HTTP请求的Servlet,通过继承HttpServlet可以方便地重写相应方法来处理不同类型的HTTP请求(如GET、POST等)。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,用于处理HTTP POST请求。当客户端通过POST方式访问此Servlet对应的URL路径时,容器会调用这个方法来处理请求。 + // 参数request包含了客户端发送过来的所有请求信息,response则用于向客户端返回响应信息。 + request.setCharacterEncoding("utf-8"); - TeacherService service= new TeacherServiceImpl(); - //先进行判断是否已存在该教师 + // 设置请求的字符编码为"utf-8",确保从客户端接收到的请求参数等数据能够按照UTF-8编码格式正确解析,避免中文等特殊字符出现乱码问题,保证数据的准确性。 + + TeacherService service = new TeacherServiceImpl(); + // 创建一个TeacherServiceImpl类的实例,通过多态的方式将其赋值给TeacherService接口类型的变量service。这样后续就可以调用TeacherService接口中定义的教师业务相关方法,而具体的实现则由TeacherServiceImpl类来完成。 + + // 先进行判断是否已存在该教师 String tid = request.getParameter("teacher-id"); + // 从客户端发送的HTTP请求中获取名为"teacher-id"的参数值,该参数值通常代表教师的编号,用于后续判断是否已经存在具有该编号的教师记录。 + Teacher t = new Teacher(); + // 创建一个Teacher类的实例t,用于封装教师相关的信息,此处先创建一个空的教师对象,后续会设置相应的属性值。 + t.setT_id(tid); + // 通过调用Teacher类的setT_id方法,将从请求中获取到的教师编号(tid)设置到教师对象t中,以便后续根据这个编号进行数据库查询等操作来判断教师是否已存在。 + Teacher newTeacher = service.findTeacherById(t); - if (newTeacher != null) { - request.setAttribute("update_msg","已存在该教师,请重新添加!"+String.format("%tT",new Date())); + // 调用service(实际是TeacherServiceImpl类的实例)的findTeacherById方法,传入刚才设置好编号的教师对象t,该方法应该是根据教师编号去数据库等存储介质中查询是否存在对应的教师记录,并返回查询到的教师对象(如果存在的话),将查询结果赋值给newTeacher变量。 + + if (newTeacher!= null) { + // 判断查询到的教师对象newTeacher是否不为空,即是否已经存在具有该编号的教师记录。 + request.setAttribute("update_msg", "已存在该教师,请重新添加!" + String.format("%tT", new Date())); + // 如果教师已存在,使用request对象的setAttribute方法设置一个名为"update_msg"的属性,属性值是提示信息,告知用户该教师已存在,并拼接上当前的时间(通过String.format结合%tT格式化Date对象,得到具体的时间格式字符串),以便用户了解操作的时间情况。 request.getRequestDispatcher("addTeacherServlet").forward(request, response); - }else { + // 获取一个请求转发器,将请求转发到名为"addTeacherServlet"的资源(可能是另一个Servlet或者JSP页面等),这样服务器端会接着处理转发后的请求,并向客户端返回相应的响应内容,整个过程对客户端来说是一次完整的请求响应过程,地址栏中的URL不会发生改变。 + } else { + // 如果教师不存在,则执行以下添加教师信息的逻辑。 + String name = request.getParameter("teacher-name"); + // 从客户端请求中获取名为"teacher-name"的参数值,该值代表教师的姓名,用于后续设置到要添加的教师对象中。 + String sex = request.getParameter("teacher-sex"); + // 从请求中获取名为"teacher-sex"的参数值,代表教师的性别,同样用于设置教师对象的属性。 + String education = request.getParameter("teacher-education"); + // 获取"teacher-education"参数值,对应教师的文化程度信息,用于后续操作。 + String title = request.getParameter("teacher-title"); + // 获取"teacher-title"参数值,代表教师的职称信息,准备设置到教师对象里。 // String college = request.getParameter("selectCollege"); // String department = request.getParameter("selectDepartment"); @@ -43,25 +84,46 @@ public class AddTeacherInfoServlet extends HttpServlet { // if ("".equals(cclass)) { // cclass = "待分配"; // } + // 上述代码段被注释掉了,但原本的意图可能是从请求中获取教师所属的学院、系别、班级信息,如果获取到的值为空字符串,就将其设置为"待分配",表示该教师在这些方面暂未明确分配相应的归属。 Teacher updateTeacher = new Teacher(); + // 创建一个新的Teacher类实例updateTeacher,用于封装要添加的教师的完整信息,后续将各项参数值设置到这个对象中。 updateTeacher.setT_id(tid); + // 将之前获取到的教师编号设置到updateTeacher对象中,确保添加的教师具有正确的编号信息。 + updateTeacher.setT_name(name); + // 设置教师的姓名到updateTeacher对象中。 + updateTeacher.setT_sex(sex); + // 设置教师的性别信息到对象中。 + updateTeacher.setT_education(education); + // 设置教师的文化程度信息到对象中。 + updateTeacher.setT_title(title); + // 设置教师的职称信息到对象中。 + // updateTeacher.setT_college(college); // updateTeacher.setT_department(department); // updateTeacher.setT_class(cclass); + // 同样,上述被注释掉的代码原本是要设置教师所属的学院、系别、班级信息到updateTeacher对象中。 service.addTeacherAllInfo(updateTeacher); + // 调用service(TeacherServiceImpl的实例)的addTeacherAllInfo方法,将封装好教师所有信息的updateTeacher对象传入,该方法应该会将教师信息保存到数据库等存储介质中,完成教师信息的添加操作。 + request.setAttribute("update_msg", "添加成功!" + String.format("%tT", new Date())); + // 设置名为"update_msg"的属性,属性值为添加成功的提示信息,并拼接当前时间,方便用户知晓操作完成的时间情况。 + request.getRequestDispatcher("addTeacherServlet").forward(request, response); + // 再次使用请求转发器将请求转发到"addTeacherServlet"资源,进行后续的页面展示或者其他相关业务处理,保持整个请求响应流程的连贯性,客户端看到的URL不变。 } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,用于处理HTTP GET请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即都会按照doPost方法中的逻辑进行处理,比如判断教师是否存在、添加教师信息等操作。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/AddTeacherServlet.java b/src/web/servlet/teacher/AddTeacherServlet.java index 671691a..eec729d 100644 --- a/src/web/servlet/teacher/AddTeacherServlet.java +++ b/src/web/servlet/teacher/AddTeacherServlet.java @@ -1,8 +1,13 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于web.servlet.teacher包下,通过包名对类进行分类管理,有助于在项目中清晰地组织代码结构,方便区分不同功能模块对应的类。 import domain.CDC; import service.CDCService; import service.impl.CDCServiceImpl; +// 导入与CDC(可能是某种机构、部门等相关的领域模型类,具体含义取决于业务场景)相关的类和接口。 +// domain.CDC表示CDC类所在的包名和类名,该类通常用于封装CDC相关的属性和业务逻辑。 +// service.CDCService是定义CDC业务操作的服务接口,规定了可以对CDC进行的各种业务方法,比如查询、添加、删除等操作(这里从名字推测可能主要涉及查询相关操作)。 +// service.impl.CDCServiceImpl则是CDCService接口的具体实现类,实现了接口中定义的方法,具体完成与数据库或其他数据源交互来实现业务逻辑的功能。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -12,26 +17,60 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.List; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及可能出现的异常情况。 +// ServletException用于处理Servlet执行过程中出现的异常情况,比如配置错误、业务逻辑执行出错等。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并配置其相关的访问路径等属性,方便Web容器识别和管理。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法,我们可以通过重写它的方法来实现具体的业务逻辑处理。 +// HttpServletRequest用于获取客户端发送过来的HTTP请求中的各种信息,例如请求参数、请求头信息等,是处理请求数据的重要入口。 +// HttpServletResponse用于向客户端发送HTTP响应,比如设置响应状态码、响应头以及返回响应内容等,用于构建返回给客户端的信息。 +// HttpSession用于在服务器端管理用户会话信息,通过它可以在不同的请求之间共享数据,比如保存用户的登录状态、购物车信息等(这里可能用于保存一些与添加教师页面相关的数据)。 +// IOException用于处理输入输出相关的异常,像读写文件、网络传输等出现问题时会抛出该异常。 +// List是Java集合框架中的接口,表示一个有序的、可重复元素的集合,这里用于存放从数据库等数据源查询出来的CDC相关数据列表(例如学院、系别、班级列表等)。 @WebServlet("/addTeacherServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定其对应的访问路径为"/addTeacherServlet"。当客户端通过这个URL路径发起HTTP请求时,Web容器(如Tomcat等)就会找到并调用这个Servlet来处理请求。 public class AddTeacherServlet extends HttpServlet { + // 定义一个名为AddTeacherServlet的类,它继承自HttpServlet类,意味着这个类是一个用于处理HTTP请求的Servlet,通过继承HttpServlet可以方便地重写相应方法来处理不同类型的HTTP请求(如GET、POST等),以实现具体的业务逻辑。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,用于处理HTTP POST请求。当客户端通过POST方式访问此Servlet对应的URL路径时,容器会调用这个方法来处理请求。 + // 参数request包含了客户端发送过来的所有请求信息,response则用于向客户端返回响应信息。 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",确保从客户端接收到的请求参数等数据能够按照UTF-8编码格式正确解析,避免中文等特殊字符出现乱码问题,保证后续获取和处理请求数据的准确性。 + HttpSession session = request.getSession(); + // 获取当前请求对应的HttpSession对象,如果不存在则创建一个新的会话对象。HttpSession可以用于在多个请求之间保存和共享数据,方便实现一些需要跨请求保持状态的功能,比如登录后的用户信息保存等。在这里主要用于存放一些后续要在页面中展示的数据列表。 CDCService service = new CDCServiceImpl(); + // 创建一个CDCServiceImpl类的实例,通过多态的方式将其赋值给CDCService接口类型的变量service。这样后续就可以调用CDCService接口中定义的与CDC相关的业务方法,而具体的实现则由CDCServiceImpl类来完成,例如查询学院、系别、班级等列表信息的操作。 + List collegeList = service.findAllCollege(); + // 调用service(实际是CDCServiceImpl的实例)的findAllCollege方法,该方法应该是从数据库或者其他数据源中查询出所有学院的信息,并以CDC对象的列表形式返回,将查询到的学院信息列表赋值给collegeList变量。 + List departmentList = service.findAllDepartment(); + // 同样地,调用findAllDepartment方法,从数据源中获取所有系别的信息,以CDC对象列表形式返回,赋值给departmentList变量,用于后续在页面上展示系别相关的下拉选项等操作。 + List classList = service.findAllClass(); + // 调用findAllClass方法,查询并获取所有班级的信息,以CDC对象列表形式返回,赋值给classList变量,方便在页面中展示班级相关的下拉选择内容等。 + + session.setAttribute("collegeLists", collegeList); + // 使用HttpSession对象的setAttribute方法,将查询到的学院信息列表(collegeList)保存到会话中,设置的属性名为"collegeLists",这样在后续的请求处理或者页面渲染过程中(只要是同一个会话内),就可以获取到这个学院列表数据进行展示或其他操作。 - session.setAttribute("collegeLists",collegeList); - session.setAttribute("departmentLists",departmentList); - session.setAttribute("classLists",classList); + session.setAttribute("departmentLists", departmentList); + // 类似地,将系别信息列表(departmentList)保存到会话中,属性名为"departmentLists",以便在相关页面中使用这些系别数据,例如构建下拉菜单选项等。 - request.getRequestDispatcher("/WEB-INF/admin/addTeacher.jsp").forward(request,response); + session.setAttribute("classLists", classList); + // 把班级信息列表(classList)保存到会话中,属性名为"classLists",便于后续页面展示班级相关的选择内容等操作。 + + request.getRequestDispatcher("/WEB-INF/admin/addTeacher.jsp").forward(request, response); + // 获取一个请求转发器,将当前请求转发到"/WEB-INF/admin/addTeacher.jsp"这个页面(通常是一个JSP页面,用于展示添加教师的表单等相关内容)。这样服务器端会接着处理转发后的请求,并向客户端返回相应的JSP页面渲染后的内容,整个过程对客户端来说是一次完整的请求响应过程,地址栏中的URL不会发生改变。 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,用于处理HTTP GET请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即都会按照doPost方法中的逻辑进行处理,比如查询相关数据列表、保存到会话中以及转发请求到添加教师的JSP页面等操作。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/DeleteOptionalCourseServlet.java b/src/web/servlet/teacher/DeleteOptionalCourseServlet.java index f516500..8c1496c 100644 --- a/src/web/servlet/teacher/DeleteOptionalCourseServlet.java +++ b/src/web/servlet/teacher/DeleteOptionalCourseServlet.java @@ -1,7 +1,11 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于web.servlet.teacher包下,通过包来对类进行分类管理,使项目代码结构更加清晰,便于区分不同功能模块对应的代码。 import service.TeacherService; import service.impl.TeacherServiceImpl; +// 导入教师相关业务逻辑的服务接口(TeacherService)以及该接口的具体实现类(TeacherServiceImpl)。 +// TeacherService接口定义了一系列针对教师业务操作的抽象方法,例如这里可能涉及到对课程相关操作的方法声明等。 +// TeacherServiceImpl类则是对TeacherService接口的具体实现,里面包含了与数据库或其他数据源交互,来实际完成业务逻辑的代码,比如具体的课程删除操作实现等。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -10,18 +14,44 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及可能出现的异常情况。 +// ServletException用于处理Servlet执行过程中出现的异常情况,比如业务逻辑执行出错、配置错误等。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并配置其相关的访问路径等属性,方便Web容器识别并进行管理。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法,我们可以通过重写它的方法来实现具体的业务逻辑处理。 +// HttpServletRequest用于获取客户端发送过来的HTTP请求中的各种信息,像请求参数、请求头信息等,是后续处理请求数据的重要依据。 +// HttpServletResponse用于向客户端发送HTTP响应,例如设置响应状态码、响应头以及返回响应内容等,用于构建返回给客户端的信息。 +// HttpSession用于在服务器端管理用户会话信息,通过它可以在不同的请求之间共享数据,不过在这段代码里暂时没有明显体现出对会话信息的复杂使用场景。 +// IOException用于处理输入输出相关的异常,例如读写文件、网络传输等出现问题时会抛出该异常。 @WebServlet("/deleteOptionalCourseServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定其对应的访问路径为"/deleteOptionalCourseServlet"。当客户端通过这个URL路径发起HTTP请求时,Web容器(如Tomcat等)就会找到并调用这个Servlet来处理请求。 public class DeleteOptionalCourseServlet extends HttpServlet { + // 定义一个名为DeleteOptionalCourseServlet的类,它继承自HttpServlet类,意味着这个类是一个用于处理HTTP请求的Servlet,通过继承HttpServlet可以方便地重写相应方法来处理不同类型的HTTP请求(如GET、POST等),以实现具体的业务逻辑,这里主要是实现删除可选课程的业务逻辑。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,用于处理HTTP POST请求。当客户端通过POST方式访问此Servlet对应的URL路径时,容器会调用这个方法来处理请求。 + // 参数request包含了客户端发送过来的所有请求信息,response则用于向客户端返回响应信息。 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",确保从客户端接收到的请求参数等数据能够按照UTF-8编码格式正确解析,避免中文等特殊字符出现乱码问题,保证后续获取和处理请求数据的准确性,特别是这里要获取课程编号等信息,防止乱码很重要。 + String cid = request.getParameter("cid"); + // 从客户端发送的HTTP请求中获取名为"cid"的参数值,该参数值通常代表要删除的课程的编号(具体含义取决于业务逻辑中的定义),将获取到的课程编号赋值给cid变量,以便后续根据这个编号进行课程删除操作。 + TeacherService service = new TeacherServiceImpl(); + // 创建一个TeacherServiceImpl类的实例,通过多态的方式将其赋值给TeacherService接口类型的变量service。这样后续就可以调用TeacherService接口中定义的业务方法,而具体的删除课程操作的实现则由TeacherServiceImpl类来完成。 + service.deleteCourseById(cid); - request.getRequestDispatcher("/teacherOptionalCourseServlet").forward(request,response); + // 调用service(实际是TeacherServiceImpl的实例)的deleteCourseById方法,传入刚才获取到的课程编号cid,该方法应该是在数据库或其他存储课程信息的数据源中,根据课程编号来删除对应的课程记录,实现课程删除的业务逻辑操作。 + + request.getRequestDispatcher("/teacherOptionalCourseServlet").forward(request, response); + // 获取一个请求转发器,将当前请求转发到"/teacherOptionalCourseServlet"这个资源(可能是另一个Servlet或者JSP页面等)。这样服务器端会接着处理转发后的请求,并向客户端返回相应的响应内容,整个过程对客户端来说是一次完整的请求响应过程,地址栏中的URL不会发生改变,通过转发可以继续后续的页面展示或者其他相关业务处理。 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,用于处理HTTP GET请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即都会按照doPost方法中的逻辑进行处理,比如获取课程编号、删除课程以及转发请求等操作。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/DeleteTeacherServlet.java b/src/web/servlet/teacher/DeleteTeacherServlet.java index 3cd1739..3b61eae 100644 --- a/src/web/servlet/teacher/DeleteTeacherServlet.java +++ b/src/web/servlet/teacher/DeleteTeacherServlet.java @@ -1,7 +1,11 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于web.servlet.teacher包下,利用包来对类进行分类组织,使项目的代码结构更加清晰有条理,便于区分不同功能模块对应的类。 import service.TeacherService; import service.impl.TeacherServiceImpl; +// 导入教师业务相关的服务接口(TeacherService)以及该接口对应的具体实现类(TeacherServiceImpl)。 +// TeacherService接口通常会定义一系列针对教师相关业务操作的抽象方法,比如删除教师、查询教师信息等操作的方法声明。 +// TeacherServiceImpl类则是对TeacherService接口的具体实现,其内部包含了与数据库或者其他数据源进行交互的代码,以此来实际完成相应的业务逻辑,例如这里涉及的根据教师编号删除教师信息的具体实现就在这个类中。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -10,18 +14,44 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及可能出现的异常情况。 +// ServletException用于处理Servlet在执行过程中出现的各种异常,像业务逻辑出错、配置不正确等情况引发的异常都会通过它来处理。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并且可以配置这个Servlet对应的访问路径等相关属性,方便Web容器(例如Tomcat等服务器)识别并对其进行管理和调度。 +// HttpServlet是所有基于HTTP协议的Servlet的基础类,它提供了处理HTTP请求的基本结构和相关方法,开发人员可以通过重写它里面的方法来实现具体的业务逻辑,以应对不同类型的HTTP请求(如GET、POST等)。 +// HttpServletRequest主要用于获取客户端发送过来的HTTP请求中包含的各种信息,比如请求参数、请求头里的数据等,它是后续在Servlet中处理请求数据的重要入口。 +// HttpServletResponse用于向客户端发送HTTP响应,例如设置响应的状态码、响应头的相关信息以及返回具体的响应内容等,以此构建完整的返回给客户端的信息。 +// HttpSession用于在服务器端管理用户的会话信息,通过它能够实现在不同的请求之间共享数据,不过在当前这段代码里暂时没有复杂的针对会话信息的操作体现。 +// IOException用于处理输入输出相关的异常情况,像读写文件过程中、网络传输数据时等出现问题就会抛出该异常。 @WebServlet("/deleteTeacherServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定这个Servlet对应的访问路径为"/deleteTeacherServlet"。当客户端通过这个特定的URL路径发起HTTP请求时,Web容器就会找到并调用这个Servlet来处理请求。 public class DeleteTeacherServlet extends HttpServlet { + // 定义了一个名为DeleteTeacherServlet的类,它继承自HttpServlet类,这就表明这个类是一个专门用于处理HTTP请求的Servlet,借助继承HttpServlet类的特性,可以方便地重写其中的方法来实现具体的业务逻辑,此处重点在于实现删除教师的相关业务逻辑。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写了HttpServlet类中的doPost方法,该方法主要用于处理HTTP POST请求。当客户端通过POST方式访问此Servlet对应的"/deleteTeacherServlet"这个URL路径时,Web容器会自动调用这个方法来处理相应的请求。 + // 方法中的参数request包含了客户端发送过来的全部请求信息,而response则是用于向客户端返回响应信息的对象。 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",这一步操作很关键,它能确保从客户端接收到的请求参数等各类数据可以按照UTF-8编码格式被准确地解析出来,有效避免中文或者其他特殊字符出现乱码的问题,从而保障后续获取和处理请求数据时的准确性,在这里特别重要的是保证获取教师编号等关键信息不出错。 + String teacherid = request.getParameter("tid"); + // 从客户端发送的HTTP请求中获取名为"tid"的参数值,按照业务逻辑推测,这个参数值通常代表着要删除的教师的编号,然后将获取到的教师编号赋值给teacherid变量,方便后续依据这个编号进行删除教师的具体操作。 + TeacherService service = new TeacherServiceImpl(); + // 创建一个TeacherServiceImpl类的实例,通过多态的方式将其赋值给TeacherService接口类型的变量service。如此一来,后续就能调用TeacherService接口里定义的各种业务方法了,而具体的删除教师操作的实际代码实现则是由TeacherServiceImpl类来完成的。 + service.deleteTeacherById(teacherid); - request.getRequestDispatcher("/teacherListServlet").forward(request,response); + // 调用service(实际上就是TeacherServiceImpl的实例)的deleteTeacherById方法,将前面获取到的教师编号teacherid作为参数传入进去。这个方法应该是在数据库或者其他存储教师信息的数据源中,依据传入的教师编号来查找并删除对应的教师记录,以此实现删除教师的业务逻辑操作。 + + request.getRequestDispatcher("/teacherListServlet").forward(request, response); + // 获取一个请求转发器,把当前的请求转发到"/teacherListServlet"这个资源(它可能是另一个Servlet或者是一个JSP页面等)。通过这样的转发操作,服务器端会接着去处理转发后的请求,并向客户端返回相应的响应内容,而且整个过程对于客户端来说就像是一次完整的请求响应过程,客户端浏览器地址栏中的URL并不会发生改变,转发后可以继续进行后续的页面展示或者其他相关业务处理,例如重新展示教师列表等。 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,该方法主要用于处理HTTP GET请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,这意味着对于GET请求的处理逻辑和POST请求的处理逻辑是完全一样的,也就是都会按照doPost方法里所定义的逻辑去进行相应的处理,比如获取教师编号、删除教师以及转发请求等操作都会同样执行。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/FindStudentCourseScoreServlet.java b/src/web/servlet/teacher/FindStudentCourseScoreServlet.java index f5078b6..5d8f6ab 100644 --- a/src/web/servlet/teacher/FindStudentCourseScoreServlet.java +++ b/src/web/servlet/teacher/FindStudentCourseScoreServlet.java @@ -1,8 +1,13 @@ package web.servlet.teacher; +// 声明该类所属的包名,表明这个Servlet类位于"web.servlet.teacher"包下,通过包结构对类进行组织管理,有助于清晰地划分项目中的不同功能模块,方便代码的维护与扩展。 import domain.SelectCourse; import service.SelectCourseService; import service.impl.SelectCourseServiceImpl; +// 导入相关的类和接口,用于处理选课相关的业务逻辑。 +// "domain.SelectCourse":通常是一个领域模型类,用于封装与选课相关的各种属性,比如学生所选课程的具体信息(课程编号、学生编号等)以及对应的成绩等内容,代表了业务领域中的选课这一概念实体在代码中的体现。 +// "service.SelectCourseService":这是定义了选课业务操作的服务接口,规定了可以在选课业务方面进行的各种操作方法,例如查询学生选课信息、更新选课记录等,是对选课业务逻辑抽象出来的统一操作入口。 +// "service.impl.SelectCourseServiceImpl":是"SelectCourseService"接口的具体实现类,里面包含了实际与数据库或其他数据源进行交互的代码,以此来真正完成接口中定义的那些选课业务操作,比如按照特定条件查询数据库获取选课信息等具体实现细节就在这个类中。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -11,26 +16,55 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; +// 导入Java EE中Servlet相关的基础类和接口以及处理输入输出异常、使用集合框架所需的类。 +// "ServletException":用于处理Servlet在执行过程中出现的各种异常情况,比如配置错误、业务逻辑执行出错、请求处理过程中遇到不符合预期的情况等,都可以通过抛出这个异常来进行相应的处理。 +// "WebServlet":是一个注解类,用于将一个普通的Java类标注为Servlet,并可以通过它配置该Servlet对应的访问路径等相关属性,方便Web容器(像Tomcat等应用服务器)识别并对其进行管理和调度,决定何时以及如何调用这个Servlet来处理客户端的请求。 +// "HttpServlet":是所有基于HTTP协议的Servlet的基类,它提供了处理HTTP请求的基础架构和一系列默认方法,开发人员通过重写它里面的特定方法(如doGet、doPost等)来实现具体的业务逻辑,以应对不同类型的HTTP请求。 +// "HttpServletRequest":主要用于获取客户端发送过来的HTTP请求中包含的各种详细信息,例如请求参数(通过类似getParameter方法获取表单提交的数据等)、请求头信息(如浏览器相关的一些标识信息等)以及其他和请求相关的内容,是在Servlet中处理请求数据的关键入口。 +// "HttpServletResponse":负责向客户端发送HTTP响应,包括设置响应的状态码(比如200表示成功、404表示未找到资源等)、响应头(设置如内容类型、缓存控制等相关的头部信息)以及返回具体的响应内容(如HTML页面、JSON数据等),用于构建完整的返回给客户端的信息。 +// "IOException":用于处理输入输出相关的异常情况,例如在读取或写入文件、进行网络传输(像从数据库获取数据或者向客户端发送响应数据等涉及到数据传输的操作)等过程中如果出现问题,就会抛出这个异常,方便进行相应的错误处理。 +// "List":是Java集合框架中的接口,表示一个有序的、可包含重复元素的集合,在这里用于存放查询出来的多个选课相关信息(以SelectCourse对象的形式),方便后续对这些数据进行遍历、处理以及传递给其他组件(如JSP页面用于展示等)。 @WebServlet("/findStudentCourseScoreServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定这个Servlet对应的访问路径为"/findStudentCourseScoreServlet"。意味着当客户端通过浏览器等工具,向服务器发起的HTTP请求的URL路径为该指定路径时,Web容器(服务器端负责管理Servlet的环境,如Tomcat)就会找到并调用这个Servlet类来处理相应的请求。 public class FindStudentCourseScoreServlet extends HttpServlet { + // 定义了一个名为"FindStudentCourseScoreServlet"的类,它继承自"HttpServlet"类,这表明该类是一个专门用于处理HTTP请求的Servlet,借助继承"HttpServlet"类的机制,可以方便地重写其中相应的方法(比如doGet、doPost等)来实现具体的、与业务相关的请求处理逻辑,在这个类中主要是实现查询学生课程成绩相关的业务逻辑。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写了"HttpServlet"类中的"doPost"方法,此方法专门用于处理HTTP POST请求。当客户端通过POST方式(例如表单提交等情况常用POST方式向服务器发送数据)访问此Servlet对应的"/findStudentCourseScoreServlet"这个URL路径时,Web容器会自动调用这个重写后的方法来处理相应的请求。 + // 方法中的两个参数"request"和"response"分别代表客户端发送过来的请求信息以及用于向客户端返回响应信息的对象,它们在整个请求处理过程中起着关键作用,通过它们可以获取请求数据、设置响应内容等。 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",这一步非常重要,因为客户端发送过来的数据可能包含各种字符(特别是如果有中文等非ASCII字符时),如果不设置正确的编码,在获取请求参数等数据时可能会出现乱码问题,无法正确解析数据内容。通过设置为"utf-8"编码格式,能确保后续从请求中获取到的参数等数据可以按照正确的编码规范进行解析,保障数据的准确性和完整性,在这里对于获取要查询成绩的课程编号等关键信息尤为重要。 + String cid = request.getParameter("cid"); + // 从客户端发送的HTTP请求中获取名为"cid"的参数值,按照业务逻辑推测,这个参数值通常代表要查询成绩的课程的编号,它是后续进行查询学生该课程成绩相关操作的重要依据,将获取到的课程编号赋值给"cid"变量,方便后续在代码中使用这个变量来调用相应的业务方法进行查询操作。 + System.out.println(cid); + // 将获取到的课程编号(cid)输出打印到控制台,这一般是出于调试目的,方便开发人员在运行程序时查看实际接收到的课程编号是否符合预期,比如检查前端页面传递过来的参数是否正确,或者在排查程序出现问题(例如查询不到数据等情况)时,通过查看这个参数值来确认是否是传入参数的问题,有助于快速定位和解决问题。 SelectCourseService service = new SelectCourseServiceImpl(); + // 创建一个"SelectCourseServiceImpl"类的实例,通过多态的方式将其赋值给"SelectCourseService"接口类型的变量"service"。这样做的好处是,代码后续调用"SelectCourseService"接口中定义的方法时,实际上执行的是"SelectCourseServiceImpl"类中对这些方法的具体实现代码,使得代码的结构更加灵活,便于替换不同的实现方式或者进行单元测试等操作,在这里就是为了调用选课业务相关的方法来查询学生选课及成绩信息。 + List scs = service.findStudentSelectedCourseByCourseId(cid); + // 调用"service"(实际上就是"SelectCourseServiceImpl"的实例)的"findStudentSelectedCourseByCourseId"方法,将前面获取到的课程编号"cid"作为参数传入进去。这个方法应该是在数据库或者其他存储选课信息的数据源中,依据传入的课程编号来查询出选修该课程的所有学生的选课信息(这些信息会被封装到"SelectCourse"对象中,可能包含学生的学号、所选课程的具体信息以及对应的成绩等内容),并以"SelectCourse"对象组成的列表形式返回,然后将查询到的学生选课信息列表赋值给"scs"变量,方便后续对这些查询结果进行进一步的处理和展示。 + for (int i = 0; i < scs.size(); i++) { System.out.println(scs.get(i)); } + // 使用循环遍历查询到的学生选课信息列表(scs),通过调用"scs.get(i)"方法获取列表中的每一个"SelectCourse"对象,并将其输出打印到控制台。同样,这一步大概率也是出于调试目的,方便开发人员查看查询出来的每一条选课信息是否准确完整,例如查看学生的信息、课程信息以及成绩等是否符合预期,有助于在出现数据问题时排查是查询逻辑错误还是数据源本身数据有误等情况,进一步辅助定位和解决问题。 - request.setAttribute("scs",scs); - request.getRequestDispatcher("/WEB-INF/teacher/findSelectCourseListByCourseId.jsp").forward(request,response); + request.setAttribute("scs", scs); + // 使用"request"对象的"setAttribute"方法,将查询到的学生选课信息列表(scs)保存到请求对象中,设置的属性名为"scs",这样在后续将请求转发到JSP页面等操作时,在目标JSP页面中就可以通过这个属性名("scs")来获取到该选课信息列表,进而可以在页面中进行数据展示等相关操作,例如通过JSP的标签或者脚本语言将这些选课信息以表格等形式展示给用户查看。 + request.getRequestDispatcher("/WEB-INF/teacher/findSelectCourseListByCourseId.jsp").forward(request, response); + // 获取一个请求转发器,将当前请求转发到"/WEB-INF/teacher/findSelectCourseListByCourseId.jsp"这个JSP页面(通常该JSP页面会用于展示查询到的学生选课及成绩信息等相关内容,可能会通过循环遍历获取到的选课信息列表,然后将学生的学号、课程名、成绩等信息以合适的HTML元素展示出来)。这样服务器端会接着处理转发后的请求,并向客户端返回相应的JSP页面经过渲染后的内容,整个过程对于客户端来说就像是一次完整的请求响应过程,客户端浏览器地址栏中的URL并不会发生改变,通过这种转发机制可以顺利地进行后续的页面展示操作,将查询到的学生课程成绩等信息呈现给用户查看。 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写了"HttpServlet"类中的"doGet"方法,此方法主要用于处理HTTP GET请求,例如当客户端通过在浏览器地址栏直接输入URL或者点击链接等方式(通常这些情况会发起GET请求)访问此Servlet对应的路径时,Web容器会调用这个方法来处理相应的请求。 + + doPost(request, response); + // 在"doGet"方法中直接调用了"doPost"方法,这意味着对于GET请求的处理逻辑和POST请求的处理逻辑是完全一样的,也就是不管客户端是通过POST方式还是GET方式访问这个Servlet对应的路径,都会按照"doPost"方法里所定义的逻辑去进行相应的处理,比如获取课程编号、查询选课信息、输出调试信息以及转发请求到JSP页面等操作都会同样执行,这样做可能是在业务逻辑上对于这两种请求方式获取和展示学生课程成绩信息的要求是一致的,所以进行了这样的复用处理。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/TeacherInfomationServlet.java b/src/web/servlet/teacher/TeacherInfomationServlet.java index 0b5aaba..d5ad44f 100644 --- a/src/web/servlet/teacher/TeacherInfomationServlet.java +++ b/src/web/servlet/teacher/TeacherInfomationServlet.java @@ -1,6 +1,8 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于web.servlet.teacher包下,利用包结构来对类进行分类组织,使项目代码结构更清晰,便于区分不同功能模块对应的代码。 import domain.Teacher; +// 导入领域模型类Teacher,这个类通常用于封装教师相关的各种属性(比如教师编号、姓名、所属院系等信息)以及可能的业务逻辑方法(如果有定义的话),在这里虽然暂时看不出具体使用情况,但可能后续会涉及到和教师信息相关的操作。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -9,14 +11,32 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及应对可能出现的异常情况。 +// ServletException用于处理Servlet执行过程中出现的异常,像业务逻辑执行出错、配置错误等引发的异常都会通过它来处理。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并且可以配置这个Servlet对应的访问路径等属性,方便Web容器(如Tomcat等服务器)识别并进行管理。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法,开发人员可以通过重写它里面的方法来实现具体的业务逻辑,以应对不同类型的HTTP请求(如GET、POST等)。 +// HttpServletRequest用于获取客户端发送过来的HTTP请求中的各种信息,例如请求参数、请求头信息等,是后续在Servlet中处理请求数据的重要依据。 +// HttpServletResponse用于向客户端发送HTTP响应,比如设置响应状态码、响应头以及返回响应内容等,以此构建完整的返回给客户端的信息。 +// HttpSession用于在服务器端管理用户会话信息,通过它能够实现在不同请求之间共享数据,不过在这段代码里暂时没有明显体现出对会话信息的使用场景。 +// IOException用于处理输入输出相关的异常,像读写文件、网络传输等出现问题时会抛出该异常。 @WebServlet("/teacherInfomationServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定其对应的访问路径为"/teacherInfomationServlet"。当客户端通过这个特定的URL路径发起HTTP请求时,Web容器(如Tomcat服务器)就会找到并调用这个Servlet来处理请求。 public class TeacherInfomationServlet extends HttpServlet { + // 定义了一个名为TeacherInfomationServlet的类,它继承自HttpServlet类,这意味着这个类是一个用于处理HTTP请求的Servlet,借助继承HttpServlet类的特性,可以方便地重写其中的方法来实现具体的业务逻辑,在这里主要用于实现和教师信息相关的某种业务逻辑(从转发的JSP页面推测可能是展示教师信息之类的功能)。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - request.getRequestDispatcher("/WEB-INF/teacher/tInformation.jsp").forward(request,response); + // 重写HttpServlet类中的doPost方法,该方法主要用于处理HTTP POST请求。当客户端通过POST方式(比如表单提交等情况常用POST方式向服务器发送数据)访问此Servlet对应的"/teacherInfomationServlet"这个URL路径时,Web容器会自动调用这个方法来处理相应的请求。 + // 参数request包含了客户端发送过来的所有请求信息,response则是用于向客户端返回响应信息的对象。 + + request.getRequestDispatcher("/WEB-INF/teacher/tInformation.jsp").forward(request, response); + // 获取一个请求转发器,将当前请求转发到"/WEB-INF/teacher/tInformation.jsp"这个JSP页面。通常这个JSP页面会用于展示教师相关的信息(比如教师的个人基本信息、授课情况等,具体取决于页面的实现)。这样服务器端会接着处理转发后的请求,并向客户端返回相应的JSP页面经过渲染后的内容,整个过程对客户端来说就像是一次完整的请求响应过程,客户端浏览器地址栏中的URL并不会发生改变,通过转发请求可以进行后续的页面展示等业务操作,实现向用户展示教师信息的功能。 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,该方法主要用于处理HTTP GET请求,例如当客户端通过在浏览器地址栏直接输入URL或者点击链接等方式(这些情况通常会发起GET请求)访问此Servlet对应的路径时,Web容器会调用这个方法来处理相应的请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,这意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即不管客户端是通过POST方式还是GET方式访问这个Servlet对应的路径,都会按照doPost方法里所定义的逻辑去进行相应的处理,也就是都会将请求转发到"/WEB-INF/teacher/tInformation.jsp"这个JSP页面进行后续处理,可能是因为在业务逻辑上对于这两种请求方式展示教师信息的操作是相同的,所以进行了这样的复用处理。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/TeacherListServlet.java b/src/web/servlet/teacher/TeacherListServlet.java index 856f96d..03ddff0 100644 --- a/src/web/servlet/teacher/TeacherListServlet.java +++ b/src/web/servlet/teacher/TeacherListServlet.java @@ -1,4 +1,5 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于web.servlet.teacher包下,通过包名对类进行分类管理,有助于在项目中清晰地组织代码结构,方便区分不同功能模块对应的类。 import domain.Admin; import domain.Student; @@ -7,6 +8,14 @@ import service.StudentService; import service.TeacherService; import service.impl.StudentServiceImpl; import service.impl.TeacherServiceImpl; +// 导入不同领域模型类以及相关的服务接口和实现类。 +// domain.Admin:通常用于封装管理员相关的属性和业务逻辑,代表了系统中管理员这一角色对应的实体信息。 +// domain.Student:用于封装学生相关的属性和业务逻辑,包含学生的学号、姓名等各种信息,是对学生这一业务实体在代码中的体现。 +// domain.Teacher:类似地,用于封装教师相关的属性和业务逻辑,比如教师的工号、姓名、授课信息等内容,代表教师这一业务实体。 +// service.StudentService:定义了针对学生业务操作的服务接口,规定了可以进行的各种学生相关业务方法,例如查询学生信息、添加学生等操作的抽象方法声明。 +// service.TeacherService:是针对教师业务操作的服务接口,明确了如查询教师信息、更新教师资料等相关业务操作的接口方法。 +// service.impl.StudentServiceImpl:是StudentService接口的具体实现类,里面包含了与数据库或其他数据源交互来实际完成学生业务逻辑的代码,比如具体的查询所有学生信息、根据学号查询某个学生等操作的实现就在这个类里。 +// service.impl.TeacherServiceImpl:同样,是TeacherService接口的具体实现类,负责实现教师业务相关操作的具体代码逻辑,像这里要调用的查询所有教师信息的方法就在这个类中实现。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -16,33 +25,73 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.List; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及可能出现的异常情况,同时导入用于处理集合数据和会话相关操作的类。 +// ServletException用于处理Servlet执行过程中出现的异常情况,例如业务逻辑执行出错、配置错误等引发的异常都会通过它来处理。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并配置其相关的访问路径等属性,方便Web容器(如Tomcat等服务器)识别并进行管理。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法,开发人员可以通过重写它里面的方法来实现具体的业务逻辑,以应对不同类型的HTTP请求(如GET、POST等)。 +// HttpServletRequest用于获取客户端发送过来的HTTP请求中的各种信息,像请求参数、请求头信息等,是后续处理请求数据的重要依据。 +// HttpServletResponse用于向客户端发送HTTP响应,例如设置响应状态码、响应头以及返回响应内容等,用于构建返回给客户端的信息。 +// HttpSession用于在服务器端管理用户会话信息,通过它可以在不同的请求之间共享数据,比如保存用户的登录状态、用户相关的一些临时数据等,在这里用于判断当前登录用户的角色类型。 +// IOException用于处理输入输出相关的异常,像读写文件、网络传输等出现问题时会抛出该异常。 +// List是Java集合框架中的接口,表示一个有序的、可重复元素的集合,这里用于存放查询出来的教师信息列表(多个Teacher对象组成的列表)。 @WebServlet("/teacherListServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定其对应的访问路径为"/teacherListServlet"。当客户端通过这个URL路径发起HTTP请求时,Web容器(如Tomcat等)就会找到并调用这个Servlet来处理请求。 public class TeacherListServlet extends HttpServlet { + // 定义一个名为TeacherListServlet的类,它继承自HttpServlet类,意味着这个类是一个用于处理HTTP请求的Servlet,通过继承HttpServlet可以方便地重写相应方法来处理不同类型的HTTP请求(如GET、POST等),以实现具体的业务逻辑,这里主要是实现查询教师列表并根据不同用户角色进行页面转发的业务逻辑。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - //调用TeacherService完成查询 + // 重写HttpServlet类中的doPost方法,用于处理HTTP POST请求。当客户端通过POST方式访问此Servlet对应的URL路径时,容器会调用这个方法来处理请求。 + // 参数request包含了客户端发送过来的所有请求信息,response则用于向客户端返回响应信息。 + + // 调用TeacherService完成查询 TeacherService teacherService = new TeacherServiceImpl(); + // 创建一个TeacherServiceImpl类的实例,通过多态的方式将其赋值给TeacherService接口类型的变量teacherService。这样后续就可以调用TeacherService接口中定义的业务方法,而具体的查询所有教师信息的操作实现则由TeacherServiceImpl类来完成。 + List teachers = teacherService.findAll(); - //将list存入request域 - request.setAttribute("teachers",teachers); + // 调用teacherService(实际是TeacherServiceImpl的实例)的findAll方法,该方法应该是从数据库或其他存储教师信息的数据源中,查询出所有教师的信息,并以Teacher对象的列表形式返回,将查询到的教师信息列表赋值给teachers变量,以便后续使用这些数据进行页面展示等操作。 + + // 将list存入request域 + request.setAttribute("teachers", teachers); + // 使用request对象的setAttribute方法,将查询到的教师信息列表(teachers)保存到请求对象中,设置的属性名为"teachers",这样在后续转发请求到JSP页面等操作时,在目标页面中就可以通过这个属性名获取到该教师信息列表,用于展示教师信息的相关操作,比如在JSP页面中通过循环遍历列表展示每个教师的具体信息。 request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",确保从客户端接收到的请求参数等数据能够按照UTF-8编码格式正确解析,避免中文等特殊字符出现乱码问题,保证后续获取和处理请求数据的准确性,虽然在这里暂时没有明显体现出获取参数的操作,但这是一个良好的编码习惯,防止后续可能的扩展或者其他地方出现乱码情况。 + HttpSession session = request.getSession(); - Student student= (Student)session.getAttribute("student"); - Admin admin= (Admin)session.getAttribute("admin"); - Teacher teacher= (Teacher)session.getAttribute("teacher"); - if (student != null && admin == null && teacher == null) { + // 获取当前请求对应的HttpSession对象,如果不存在则创建一个新的会话对象。HttpSession用于在服务器端管理用户的会话信息,在这里主要是为了获取会话中保存的当前登录用户的相关信息,以此来判断用户的角色类型,进而决定转发到哪个合适的页面进行教师列表展示。 + + Student student = (Student) session.getAttribute("student"); + // 从HttpSession对象中尝试获取名为"student"的属性值,并将其强制转换为Student类型,该属性值通常是在用户登录成功后(如果是学生角色登录)保存到会话中的学生对象,通过这样的获取操作可以判断当前登录用户是否是学生角色。 + + Admin admin = (Admin) session.getAttribute("admin"); + // 类似地,从会话中获取名为"admin"的属性值并转换为Admin类型,用于判断当前登录用户是否是管理员角色,若获取到的admin对象不为null,则表示当前是管理员登录状态。 + + Teacher teacher = (Teacher) session.getAttribute("teacher"); + // 同样,从会话中获取名为"teacher"的属性值并转换为Teacher类型,用于判断当前登录用户是否是教师角色,若获取到的teacher对象不为null,则说明当前是教师登录状态。 + + if (student!= null && admin == null && teacher == null) { + // 判断如果从会话中获取到的学生对象不为null,同时管理员对象和教师对象都为null,即当前登录用户是学生角色,那么执行以下逻辑。 request.getRequestDispatcher("/WEB-INF/student/sFindTeacherList.jsp").forward(request, response); - } else if (admin != null && student == null && teacher == null) { + // 获取一个请求转发器,将当前请求转发到"/WEB-INF/student/sFindTeacherList.jsp"这个JSP页面,该页面应该是专门为学生角色设计的用于展示教师列表信息的页面,服务器端会接着处理转发后的请求,并向客户端返回相应的JSP页面经过渲染后的内容,整个过程对客户端来说是一次完整的请求响应过程,客户端浏览器地址栏中的URL不会发生改变。 + } else if (admin!= null && student == null && teacher == null) { + // 如果管理员对象不为null,而学生对象和教师对象都为null,即当前登录用户是管理员角色,则执行以下转发操作。 request.getRequestDispatcher("/WEB-INF/admin/aFindTeacherList.jsp").forward(request, response); - } else if (teacher != null && admin == null && student == null) { + // 将请求转发到"/WEB-INF/admin/aFindTeacherList.jsp"这个JSP页面,这大概率是为管理员设计的用于展示教师列表的页面,方便管理员进行相应的管理操作等查看教师信息。 + } else if (teacher!= null && admin == null && student == null) { + // 若教师对象不为null,管理员对象和学生对象都为null,也就是当前登录用户是教师角色,执行如下转发操作。 request.getRequestDispatcher("/WEB-INF/teacher/tFindTeacherList.jsp").forward(request, response); + // 把请求转发到"/WEB-INF/teacher/tFindTeacherList.jsp"这个JSP页面,此页面应该是适合教师查看教师列表信息的页面,可能会展示一些与教师自身相关视角下的教师信息内容。 } else { request.getRequestDispatcher("error.jsp").forward(request, response); + // 如果以上几种判断条件都不满足,说明可能出现了不符合预期的会话状态或者用户角色情况,此时将请求转发到"error.jsp"页面,该页面通常用于展示错误信息,提示用户出现了未知的系统状态等问题。 } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - this.doPost(request,response); + // 重写HttpServlet类中的doGet方法,用于处理HTTP GET请求。 + + this.doPost(request, response); + // 在doGet方法中直接调用了doPost方法,意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即都会按照doPost方法中的逻辑进行处理,比如查询教师列表、判断用户角色以及根据角色转发请求到相应的JSP页面等操作。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/TeacherOptionalCourseServlet.java b/src/web/servlet/teacher/TeacherOptionalCourseServlet.java index 20b1a33..dbeefef 100644 --- a/src/web/servlet/teacher/TeacherOptionalCourseServlet.java +++ b/src/web/servlet/teacher/TeacherOptionalCourseServlet.java @@ -1,4 +1,5 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于“web.servlet.teacher”包下,通过包结构对类进行分类管理,使项目代码的组织结构更加清晰,便于区分不同功能模块对应的代码所在位置。 import domain.Course; import domain.Student; @@ -7,6 +8,14 @@ import service.StudentService; import service.TeacherService; import service.impl.StudentServiceImpl; import service.impl.TeacherServiceImpl; +// 导入不同的领域模型类以及相关的服务接口与实现类,用于处理业务逻辑中涉及到的数据和操作。 +// domain.Course:通常用于封装课程相关的各种属性(例如课程编号、课程名称、课程学分等信息)以及可能的业务逻辑方法(如果有针对课程对象自身的操作需求),代表了业务领域里课程这一实体在代码中的体现。 +// domain.Student:用于封装学生相关的各种属性(如学号、姓名、班级等)以及对应的业务逻辑,是对学生这个业务实体在代码层面的抽象表示,不过在当前这个Servlet中,从代码逻辑来看对学生相关操作体现并不明显,可能只是整体项目结构中涉及到的相关领域类导入。 +// domain.Teacher:类似地,用于封装教师相关的所有属性(像教师编号、姓名、所在院系等信息)和业务逻辑,在这个Servlet里会用于获取当前登录教师的信息以及后续和教师相关的业务操作关联。 +// service.StudentService:定义了针对学生业务操作的服务接口,规定了可以进行的各种学生相关业务操作的抽象方法,例如查询学生信息、添加学生、修改学生资料等方法声明,虽然此处不一定直接使用,但可能是项目中整体服务层接口的一部分被引入进来。 +// service.TeacherService:是专门针对教师业务操作所定义的服务接口,明确了像查询教师授课课程、更新教师信息等与教师业务相关的各种操作方法,为后续调用具体业务逻辑提供统一的接口规范。 +// service.impl.StudentServiceImpl:是StudentService接口的具体实现类,里面包含了与数据库或其他数据源进行实际交互的代码,以此来真正完成StudentService接口中定义的那些学生业务逻辑操作,比如具体的从数据库查询学生信息、往数据库插入新学生记录等实现细节都在这个类里,不过在此Servlet中暂时未直接调用其方法。 +// service.impl.TeacherServiceImpl:同样,它是TeacherService接口的具体实现类,负责实现教师业务相关操作的具体代码逻辑,例如这里要调用的根据教师编号查询该教师可选课程的方法就在这个类中进行具体实现。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -16,25 +25,58 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.List; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及应对可能出现的异常情况,同时导入用于处理集合数据类型和会话相关操作的类。 +// ServletException:用于处理Servlet在执行过程中出现的各种异常情况,比如业务逻辑执行出错、配置错误、请求处理不符合预期等情况引发的异常都会通过这个类来处理,方便进行统一的异常管理和错误提示。 +// WebServlet:是一个注解类,通过它可以将一个普通的Java类标注为Servlet,并配置该Servlet对应的访问路径等相关属性,方便Web容器(像Tomcat等应用服务器)能够识别并对其进行合适的管理与调度,决定何时以及如何调用这个Servlet来处理客户端的请求。 +// HttpServlet:是所有基于HTTP协议的Servlet的基类,它提供了处理HTTP请求的基础架构和一系列默认的方法,开发人员通过重写它里面特定的方法(如doGet、doPost等)来实现具体的业务逻辑,以应对不同类型的HTTP请求。 +// HttpServletRequest:主要用于获取客户端发送过来的HTTP请求中包含的各种详细信息,例如通过相关方法获取请求参数(像表单提交的数据等)、请求头信息(如浏览器相关的一些标识、请求的一些元数据等)以及其他和请求相关的内容,是在Servlet中处理请求数据的关键入口。 +// HttpServletResponse:负责向客户端发送HTTP响应,包括设置响应的状态码(比如常见的200表示成功、404表示未找到资源等)、响应头(例如设置响应内容的类型、缓存控制相关的信息等)以及返回具体的响应内容(像HTML页面、JSON数据等),以此构建完整的返回给客户端的信息。 +// HttpSession:用于在服务器端管理用户的会话信息,通过它可以实现在不同的请求之间共享数据,比如保存用户的登录状态、用户相关的一些临时数据等,在这个Servlet里主要用于获取当前登录教师的对象信息,以判断登录状态以及后续基于教师身份进行相关业务操作。 +// IOException:用于处理输入输出相关的异常情况,例如在读取或写入文件、进行网络传输(像从数据库获取数据或者向客户端发送响应数据等涉及到数据传输的操作过程中)如果出现问题,就会抛出这个异常,方便进行相应的错误处理和恢复机制实现。 +// List:是Java集合框架中的接口,表示一个有序的、可包含重复元素的集合,在这里用于存放查询出来的课程相关信息(以Course对象的形式),方便后续对这些数据进行遍历、展示或者其他相关的业务处理操作。 @WebServlet("/teacherOptionalCourseServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定这个Servlet对应的访问路径为“/teacherOptionalCourseServlet”。这意味着当客户端通过浏览器等工具向服务器发起的HTTP请求的URL路径为该指定路径时,Web容器(服务器端负责管理Servlet的环境,如Tomcat)就会找到并调用这个Servlet类来处理相应的请求。 public class TeacherOptionalCourseServlet extends HttpServlet { + // 定义了一个名为TeacherOptionalCourseServlet的类,它继承自HttpServlet类,这表明该类是一个专门用于处理HTTP请求的Servlet,借助继承HttpServlet类的机制,可以方便地重写其中相应的方法(比如doGet、doPost等)来实现具体的、与业务相关的请求处理逻辑,在这个类中主要是实现与教师可选课程相关的业务逻辑,例如查询并展示教师能够选择教授的课程信息等。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写了HttpServlet类中的doPost方法,此方法专门用于处理HTTP POST请求。当客户端通过POST方式(例如表单提交等情况常用POST方式向服务器发送数据)访问此Servlet对应的“/teacherOptionalCourseServlet”这个URL路径时,Web容器会自动调用这个重写后的方法来处理相应的请求。 + // 方法中的两个参数“request”和“response”分别代表客户端发送过来的请求信息以及用于向客户端返回响应信息的对象,它们在整个请求处理过程中起着关键作用,通过它们可以获取请求数据、设置响应内容等。 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为“utf-8”,这是非常重要的一步操作,因为客户端发送过来的数据可能包含各种字符(特别是如果存在中文等非ASCII字符时),若不设置正确的编码,在获取请求参数等数据时可能会出现乱码问题,导致无法正确解析数据内容。通过将编码格式设置为“utf-8”,能确保后续从请求中获取到的参数等数据可以按照正确的编码规范进行解析,保障数据的准确性和完整性,在这里对于后续可能涉及到的各种参数获取以及业务操作都有重要意义。 + HttpSession session = request.getSession(); + // 获取当前请求对应的HttpSession对象,如果不存在则创建一个新的会话对象。HttpSession在服务器端用于管理用户的会话信息,在这里主要是为了从会话中获取当前登录教师的相关信息,以此来确定登录状态以及进行后续基于教师身份的业务操作,例如获取教师编号来查询其可选课程等。 + Teacher t = (Teacher) session.getAttribute("teacher"); - if (t != null) { - //调用StudentService完成查询 + // 从HttpSession对象中尝试获取名为“teacher”的属性值,并将其强制转换为Teacher类型。通常情况下,在用户(这里指教师)登录成功后,会将教师对象保存到会话中,对应的属性名为“teacher”,通过这样的获取操作可以得到当前登录教师的对象信息,后续就能基于这个对象进行相关业务逻辑操作,比如获取教师编号去查询该教师可教授的课程等。 + + if (t!= null) { + // 判断获取到的教师对象t是否不为null,即判断当前是否有教师登录,如果有教师登录,才执行下面的业务逻辑操作,若为null则可能表示没有合法登录的教师,就不会进行后续的课程查询和页面展示等操作。 + + // 调用StudentService完成查询 TeacherService service = new TeacherServiceImpl(); + // 创建一个TeacherServiceImpl类的实例,通过多态的方式将其赋值给TeacherService接口类型的变量“service”。这样做的好处是,代码后续调用TeacherService接口中定义的方法时,实际上执行的是TeacherServiceImpl类中对这些方法的具体实现代码,使得代码结构更加灵活,便于替换不同的实现方式或者进行单元测试等操作,在这里就是为了调用教师业务相关的方法来查询教师可选课程信息。 + List optionalcourses = service.findMySelfOptionalCourse(t.getT_id()); - //将list存入request域 - request.setAttribute("optionalcourses",optionalcourses); - //转发到list.jsp - request.getRequestDispatcher("/WEB-INF/teacher/teacherOptionalCourse.jsp").forward(request,response); + // 调用“service”(实际上就是TeacherServiceImpl的实例)的“findMySelfOptionalCourse”方法,将前面获取到的教师对象t的教师编号(通过t.getT_id()方法获取)作为参数传入进去。这个方法应该是在数据库或者其他存储课程信息的数据源中,依据传入的教师编号来查询出该教师能够选择教授的所有课程信息,并以Course对象组成的列表形式返回,然后将查询到的可选课程信息列表赋值给“optionalcourses”变量,方便后续对这些查询结果进行进一步的处理和展示操作,比如在页面上展示课程列表供教师查看选择等。 + + // 将list存入request域 + request.setAttribute("optionalcourses", optionalcourses); + // 使用“request”对象的“setAttribute”方法,将查询到的可选课程信息列表(optionalcourses)保存到请求对象中,设置的属性名为“optionalcourses”,这样在后续将请求转发到JSP页面等操作时,在目标JSP页面中就可以通过这个属性名(“optionalcourses”)来获取到该课程列表信息,进而可以在页面中进行数据展示等相关操作,例如通过循环遍历课程列表,将每个课程的名称、编号等信息以合适的HTML元素展示出来给教师查看。 + + // 转发到list.jsp + request.getRequestDispatcher("/WEB-INF/teacher/teacherOptionalCourse.jsp").forward(request, response); + // 获取一个请求转发器,将当前请求转发到“/WEB-INF/teacher/teacherOptionalCourse.jsp”这个JSP页面(通常该JSP页面会用于展示教师可选课程的相关信息,可能会通过循环遍历获取到的课程列表,然后将课程名、课程编号、课程学分等信息以合适的方式展示出来,方便教师进行查看和后续操作)。这样服务器端会接着处理转发后的请求,并向客户端返回相应的JSP页面经过渲染后的内容,整个过程对于客户端来说就像是一次完整的请求响应过程,客户端浏览器地址栏中的URL并不会发生改变,通过这种转发机制可以顺利地进行后续的页面展示操作,将教师可选课程信息呈现给教师查看。 } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - this.doPost(request,response); + // 重写了HttpServlet类中的doGet方法,此方法主要用于处理HTTP GET请求,例如当客户端通过在浏览器地址栏直接输入URL或者点击链接等方式(通常这些情况会发起GET请求)访问此Servlet对应的路径时,Web容器会调用这个方法来处理相应的请求。 + + this.doPost(request, response); + // 在“doGet”方法中直接调用了“doPost”方法,这意味着对于GET请求的处理逻辑和POST请求的处理逻辑是完全一样的,也就是不管客户端是通过POST方式还是GET方式访问这个Servlet对应的路径,都会按照“doPost”方法里所定义的逻辑去进行相应的处理,比如设置请求编码、获取教师登录信息、查询教师可选课程、将课程列表保存到请求对象以及转发请求到JSP页面等操作都会同样执行,这样做可能是在业务逻辑上对于这两种请求方式获取和展示教师可选课程信息的要求是一致的,所以进行了这样的复用处理。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/TeacherOptionalCourseUpdateServlet.java b/src/web/servlet/teacher/TeacherOptionalCourseUpdateServlet.java index ab22a08..d50d018 100644 --- a/src/web/servlet/teacher/TeacherOptionalCourseUpdateServlet.java +++ b/src/web/servlet/teacher/TeacherOptionalCourseUpdateServlet.java @@ -1,9 +1,15 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于web.servlet.teacher包下,通过包来对类进行分类管理,使项目的代码结构更加清晰,便于区分不同功能模块对应的类。 import domain.Course; import domain.Teacher; import service.TeacherService; import service.impl.TeacherServiceImpl; +// 导入与课程(Course)、教师(Teacher)相关的领域模型类,以及教师业务逻辑对应的服务接口(TeacherService)和该接口的具体实现类(TeacherServiceImpl)。 +// domain.Course类通常用于封装课程相关的各种属性,比如课程编号、课程名称、课程介绍等信息,代表了业务领域中课程这一实体在代码中的体现,方便对课程数据进行操作和传递。 +// domain.Teacher类用于封装教师相关的属性和业务逻辑,虽然在此处可能没有直接对教师对象进行过多复杂操作,但在整个业务场景中可能与教师操作课程等相关联。 +// service.TeacherService接口定义了针对教师业务操作中与课程相关(此处主要涉及课程更新相关操作)的抽象方法,为具体业务逻辑的调用提供了统一的规范。 +// service.impl.TeacherServiceImpl类则是TeacherService接口的具体实现,包含了与数据库或其他数据源交互,来实际完成更新课程信息等业务逻辑的代码。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -13,41 +19,79 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.Date; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及可能出现的异常情况,同时导入用于处理日期格式化相关的类。 +// ServletException用于处理Servlet执行过程中出现的异常情况,例如业务逻辑执行出错、配置错误等引发的异常都会通过它来处理。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并配置其相关的访问路径等属性,方便Web容器(如Tomcat等服务器)识别并进行管理。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法,开发人员可以通过重写它里面的方法来实现具体的业务逻辑,以应对不同类型的HTTP请求(如GET、POST等)。 +// HttpServletRequest用于获取客户端发送过来的HTTP请求中的各种信息,像请求参数、请求头信息等,是后续处理请求数据的重要依据。 +// HttpServletResponse用于向客户端发送HTTP响应,例如设置响应状态码、响应头以及返回响应内容等,用于构建返回给客户端的信息。 +// HttpSession用于在服务器端管理用户会话信息,通过它可以在不同的请求之间共享数据,不过在这段代码里暂时没有明显体现出复杂的会话信息使用场景,可能只是用于后续扩展等情况。 +// IOException用于处理输入输出相关的异常,像读写文件、网络传输等出现问题时会抛出该异常。 +// Date类用于获取当前的日期和时间信息,在这里主要是用于在给用户的提示信息中添加操作时间,方便用户知晓操作完成的时间情况。 @WebServlet("/teacherOptionalCourseUpdateServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定其对应的访问路径为"/teacherOptionalCourseUpdateServlet"。当客户端通过这个URL路径发起HTTP请求时,Web容器(如Tomcat等)就会找到并调用这个Servlet来处理请求。 public class TeacherOptionalCourseUpdateServlet extends HttpServlet { + // 定义一个名为TeacherOptionalCourseUpdateServlet的类,它继承自HttpServlet类,意味着这个类是一个用于处理HTTP请求的Servlet,通过继承HttpServlet可以方便地重写相应方法来处理不同类型的HTTP请求(如GET、POST等),以实现具体的业务逻辑,这里主要是实现更新教师可选课程信息的业务逻辑。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,用于处理HTTP POST请求。当客户端通过POST方式访问此Servlet对应的URL路径时,容器会调用这个方法来处理请求。 + // 参数request包含了客户端发送过来的所有请求信息,response则用于向客户端返回响应信息。 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",确保从客户端接收到的请求参数等数据能够按照UTF-8编码格式正确解析,避免中文等特殊字符出现乱码问题,保证后续获取和处理请求数据的准确性,特别是这里要获取课程相关参数,防止乱码很重要。 - String cid =request.getParameter("cid"); + String cid = request.getParameter("cid"); + // 从客户端发送的HTTP请求中获取名为"cid"的参数值,按照业务逻辑推测,这个参数值通常代表要更新的课程的编号,将获取到的课程编号赋值给cid变量,以便后续根据这个编号进行课程信息更新等操作。 - //保存输入内容 + // 保存输入内容 String name = request.getParameter("course-name"); + // 从请求中获取名为"course-name"的参数值,该值对应要更新的课程的名称信息,将其赋值给name变量,用于后续封装到课程对象中,以更新课程在数据库等数据源中的名称信息。 + String info = request.getParameter("course-info"); + // 同样,从请求中获取名为"course-info"的参数值,这个值代表要更新的课程的详细介绍等相关信息,赋值给info变量,准备后续封装进课程对象,用于更新课程的详细信息。 Course updateCourse = new Course(); + // 创建一个Course类的实例updateCourse,用于封装要更新的课程的相关信息,后续会将从请求中获取到的课程编号、名称、详细信息等设置到这个对象中,再通过业务层方法将更新后的课程对象保存到数据库等数据源中。 - //判断输入位数是否大于数据库位数 + // 判断输入位数是否大于数据库位数 if (cid.contains("<") || name.contains("<") || info.contains("<")) { - request.setAttribute("update_msg","格式错误,请重新提交!"+String.format("%tT",new Date())); - request.getRequestDispatcher("updateTeacherOptionalCourseServlet?cid="+cid).forward(request, response); - }else { - //封装学生对象 + // 检查获取到的课程编号(cid)、课程名称(name)、课程信息(info)中是否包含字符"<",这里可能是基于安全或数据格式的考虑,防止输入的内容不符合数据库字段存储要求或者存在潜在的安全风险(比如SQL注入攻击等情况,虽然简单的这种判断不能完全杜绝,但能做一定程度防范),如果包含则认为格式错误。 + request.setAttribute("update_msg", "格式错误,请重新提交!" + String.format("%tT", new Date())); + // 使用request对象的setAttribute方法设置一个名为"update_msg"的属性,属性值是提示用户格式错误的信息,并拼接上当前的时间(通过String.format结合%tT格式化Date对象,得到具体的时间格式字符串),方便用户知晓出现格式错误的时间情况以及提示重新提交。 + request.getRequestDispatcher("updateTeacherOptionalCourseServlet?cid=" + cid).forward(request, response); + // 获取一个请求转发器,将当前请求转发到"updateTeacherOptionalCourseServlet"这个资源(可能是另一个Servlet或者JSP页面等),同时带上获取到的课程编号cid作为参数(通过URL拼接的方式传递参数),这样服务器端会接着处理转发后的请求,并向客户端返回相应的响应内容,整个过程对客户端来说是一次完整的请求响应过程,地址栏中的URL会根据转发情况发生相应改变,转发后可以继续后续的页面展示或者重新输入等操作。 + } else { + // 封装学生对象(此处应为封装课程对象,可能是注释的小失误) updateCourse.setC_id(cid); + // 通过调用Course类的setC_id方法,将前面获取到的课程编号设置到updateCourse对象中,确保更新的课程具有正确的编号信息,与数据库中要更新的记录对应起来。 + updateCourse.setC_name(name); + // 将获取到的课程名称设置到updateCourse对象中,用于更新课程在数据库中的名称信息。 + updateCourse.setC_info(info); + // 把获取到的课程详细信息设置到updateCourse对象中,完成课程对象的信息封装,准备进行更新操作。 + + // 调用studentUpdata服务(此处应为调用TeacherService服务,可能是注释书写错误) + TeacherService service = new TeacherServiceImpl(); + // 创建一个TeacherServiceImpl类的实例,通过多态的方式将其赋值给TeacherService接口类型的变量service。这样后续就可以调用TeacherService接口中定义的业务方法,而具体的更新课程信息的操作实现则由TeacherServiceImpl类来完成。 - //调用studentUpdata服务 - TeacherService service= new TeacherServiceImpl(); service.updateCourseInfo(updateCourse); + // 调用service(实际是TeacherServiceImpl的实例)的updateCourseInfo方法,将封装好的包含更新后信息的课程对象updateCourse传入,该方法应该是在数据库或其他存储课程信息的数据源中,根据课程对象中的信息(编号、名称、详细信息等)来更新对应的课程记录,实现课程信息的更新业务逻辑操作。 - //成功则返回并给提示 - request.setAttribute("update_msg", "修改成功!"+String.format("%tT",new Date())); - request.getRequestDispatcher("updateTeacherOptionalCourseServlet?cid="+cid).forward(request, response); + // 成功则返回并给提示 + request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); + // 设置名为"update_msg"的属性,属性值为修改成功的提示信息,并拼接当前时间,方便用户知晓操作完成且成功的时间情况。 + + request.getRequestDispatcher("updateTeacherOptionalCourseServlet?cid=" + cid).forward(request, response); + // 同样获取请求转发器,将请求转发到"updateTeacherOptionalCourseServlet"资源并带上课程编号cid作为参数,进行后续的页面展示或者其他相关业务处理,告知用户修改成功并可以进行后续查看等操作。 } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,用于处理HTTP GET请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即都会按照doPost方法中的逻辑进行处理,比如获取课程相关参数、判断格式、封装课程对象、更新课程信息以及转发请求等操作。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/TeacherPasswordIndexServlet.java b/src/web/servlet/teacher/TeacherPasswordIndexServlet.java index fc6da4f..fa56669 100644 --- a/src/web/servlet/teacher/TeacherPasswordIndexServlet.java +++ b/src/web/servlet/teacher/TeacherPasswordIndexServlet.java @@ -1,4 +1,5 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于“web.servlet.teacher”包下,通过包名对类进行分类管理,有助于在项目中清晰地组织代码结构,方便区分不同功能模块对应的类。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -6,14 +7,31 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及可能出现的异常情况。 +// ServletException用于处理Servlet执行过程中出现的异常情况,例如业务逻辑执行出错、配置错误等引发的异常都会通过它来处理。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并配置其相关的访问路径等属性,方便Web容器(如Tomcat等服务器)识别并进行管理。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法,开发人员可以通过重写它里面的方法来实现具体的业务逻辑,以应对不同类型的HTTP请求(如GET、POST等)。 +// HttpServletRequest用于获取客户端发送过来的HTTP请求中的各种信息,像请求参数、请求头信息等,是后续处理请求数据的重要依据。 +// HttpServletResponse用于向客户端发送HTTP响应,例如设置响应状态码、响应头以及返回响应内容等,用于构建返回给客户端的信息。 +// IOException用于处理输入输出相关的异常,像读写文件、网络传输等出现问题时会抛出该异常。 @WebServlet("/teacherPasswordIndexServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定其对应的访问路径为“/teacherPasswordIndexServlet”。当客户端通过这个URL路径发起HTTP请求时,Web容器(如Tomcat等)就会找到并调用这个Servlet来处理请求。 public class TeacherPasswordIndexServlet extends HttpServlet { + // 定义一个名为TeacherPasswordIndexServlet的类,它继承自HttpServlet类,意味着这个类是一个用于处理HTTP请求的Servlet,通过继承HttpServlet可以方便地重写相应方法来处理不同类型的HTTP请求(如GET、POST等),以实现具体的业务逻辑,这里主要是实现与教师更新密码相关的页面跳转逻辑(从转发的JSP页面推测)。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - request.getRequestDispatcher("/WEB-INF/teacher/teacherUpdatePassword.jsp").forward(request,response); + // 重写HttpServlet类中的doPost方法,用于处理HTTP POST请求。当客户端通过POST方式(比如表单提交等情况常用POST方式向服务器发送数据)访问此Servlet对应的“/teacherPasswordIndexServlet”这个URL路径时,Web容器会自动调用这个方法来处理相应的请求。 + // 参数request包含了客户端发送过来的所有请求信息,response则是用于向客户端返回响应信息的对象。 + + request.getRequestDispatcher("/WEB-INF/teacher/teacherUpdatePassword.jsp").forward(request, response); + // 获取一个请求转发器,将当前请求转发到“/WEB-INF/teacher/teacherUpdatePassword.jsp”这个JSP页面。通常这个JSP页面会用于展示教师更新密码的相关表单等内容,例如输入旧密码、新密码的输入框等,方便教师进行密码更新操作。这样服务器端会接着处理转发后的请求,并向客户端返回相应的JSP页面经过渲染后的内容,整个过程对客户端来说是一次完整的请求响应过程,客户端浏览器地址栏中的URL并不会发生改变,通过转发请求可以进行后续的页面展示等业务操作,引导教师进入密码更新页面。 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,该方法主要用于处理HTTP GET请求,例如当客户端通过在浏览器地址栏直接输入URL或者点击链接等方式(这些情况通常会发起GET请求)访问此Servlet对应的路径时,Web容器会调用这个方法来处理相应的请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,这意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即不管客户端是通过POST方式还是GET方式访问这个Servlet对应的路径,都会按照doPost方法里所定义的逻辑去进行相应的处理,也就是都会将请求转发到“/WEB-INF/teacher/teacherUpdatePassword.jsp”这个JSP页面进行后续处理,可能是因为在业务逻辑上对于这两种请求方式进入教师密码更新页面的操作是相同的,所以进行了这样的复用处理。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java b/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java index bf6ced2..d28af2b 100644 --- a/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java +++ b/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java @@ -1,11 +1,19 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于web.servlet.teacher包下,通过包结构对类进行分类管理,使项目代码更有条理,便于区分不同功能模块对应的代码。 import domain.Student; import domain.Teacher; +// 导入领域模型类Student和Teacher,Student类通常用于封装学生相关的属性(如学号、姓名、班级等)和业务逻辑,Teacher类用于封装教师相关的属性(如教师编号、姓名、所在院系等)以及业务逻辑,虽然此处主要围绕教师密码更新操作,但可能是整体项目结构中涉及到相关领域类的统一导入。 + import service.StudentService; import service.TeacherService; import service.impl.StudentServiceImpl; import service.impl.TeacherServiceImpl; +// 导入学生和教师相关业务逻辑的服务接口及对应的具体实现类。 +// StudentService定义了针对学生业务操作的抽象方法,例如查询学生信息、更新学生资料等相关操作的接口声明。 +// TeacherService是针对教师业务操作的服务接口,明确了如更新教师密码、查询教师信息等与教师业务相关的各种操作方法。 +// StudentServiceImpl是StudentService接口的具体实现类,包含了与数据库或其他数据源交互来实际完成学生业务逻辑的代码,不过在此处主要处理教师业务逻辑,该类暂时未直接使用。 +// TeacherServiceImpl则是TeacherService接口的具体实现类,负责实现教师业务相关操作的具体代码逻辑,像更新教师密码、根据教师编号查询教师等操作的具体实现就在这个类中。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -15,41 +23,91 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.Date; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及应对可能出现的异常情况,同时导入用于获取当前日期时间信息的Date类,用于在提示信息中添加时间戳等操作。 +// ServletException用于处理Servlet执行过程中出现的异常情况,像业务逻辑执行出错、配置错误等引发的异常都会通过它来处理。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并配置其相关的访问路径等属性,方便Web容器(如Tomcat等服务器)识别并进行管理。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法,开发人员通过重写它里面的方法来实现具体的业务逻辑,以应对不同类型的HTTP请求(如GET、POST等)。 +// HttpServletRequest用于获取客户端发送过来的HTTP请求中的各种信息,例如请求参数(像表单提交的数据等)、请求头信息等,是后续处理请求数据的重要依据。 +// HttpServletResponse用于向客户端发送HTTP响应,比如设置响应状态码、响应头以及返回响应内容等,以此构建完整的返回给客户端的信息。 +// HttpSession用于在服务器端管理用户会话信息,通过它可以在不同的请求之间共享数据,在这里主要用于获取当前登录教师的信息以及更新登录教师信息后重新保存到会话中,保持登录状态等操作。 +// IOException用于处理输入输出相关的异常,像读写文件、网络传输等出现问题时会抛出该异常。 +// Date类用于获取当前的日期和时间,方便在给用户反馈的提示信息中添加具体的操作时间,让用户知晓操作完成的时间情况。 @WebServlet("/teacherPasswordUpdateServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定其对应的访问路径为"/teacherPasswordUpdateServlet"。当客户端通过这个URL路径发起HTTP请求时,Web容器(如Tomcat等)就会找到并调用这个Servlet来处理请求。 public class TeacherPasswordUpdateServlet extends HttpServlet { - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 定义一个名为TeacherPasswordUpdateServlet的类,它继承自HttpServlet类,意味着这个类是一个用于处理HTTP请求的Servlet,通过继承HttpServlet可以方便地重写相应方法来处理不同类型的HTTP请求(如GET、POST等),以实现具体的业务逻辑,这里主要是实现教师更新密码的相关业务逻辑。 + + protected void doPost(HttpServletRequest request, HttpServletRequest response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,用于处理HTTP POST请求。当客户端通过POST方式(例如通过表单提交密码修改相关信息等情况常用POST方式向服务器发送数据)访问此Servlet对应的"/teacherPasswordUpdateServlet"这个URL路径时,Web容器会自动调用这个方法来处理相应的请求。 + // 方法中的两个参数request和response分别用于获取客户端发送过来的所有请求信息以及向客户端返回响应信息。 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",确保从客户端接收到的请求参数等数据能够按照UTF-8编码格式正确解析,避免中文等特殊字符出现乱码问题,保证后续获取和处理请求数据的准确性,特别是在获取新密码等文本信息时防止乱码很关键。 + HttpSession session = request.getSession(); - Teacher teacher = (Teacher)session.getAttribute("teacher"); + // 获取当前请求对应的HttpSession对象,如果不存在则创建一个新的会话对象。HttpSession在服务器端用于管理用户的会话信息,在这里主要是为了获取当前登录教师的对象信息,以便后续基于该教师信息进行密码更新等相关操作。 + + Teacher teacher = (Teacher) session.getAttribute("teacher"); + // 从HttpSession对象中尝试获取名为"teacher"的属性值,并将其强制转换为Teacher类型。通常在教师登录成功后,会将教师对象保存到会话中,对应的属性名为"teacher",通过这样的获取操作就能得到当前登录教师的对象实例,后续利用这个对象来获取教师编号等信息进行密码更新操作。 String teacherid = teacher.getT_id(); + // 通过调用Teacher类的getT_id方法,从获取到的教师对象teacher中获取教师编号信息,并赋值给teacherid变量,该教师编号将作为后续更新密码操作时识别具体教师记录的重要依据,用于准确更新对应教师的密码。 + String newpassword = request.getParameter("teacher-newpassword"); + // 从客户端发送的HTTP请求中获取名为"teacher-newpassword"的参数值,这个参数值代表教师输入的新密码信息,将其赋值给newpassword变量,用于后续对新密码格式的验证以及实际的密码更新操作。 + String ennewpassword = request.getParameter("teacher-ennewpassword"); + // 同样,从请求中获取名为"teacher-ennewpassword"的参数值,该值对应教师再次输入用于确认的新密码信息,赋值给ennewpassword变量,后续会将其和前面获取的新密码进行比对,以确保两次输入的密码一致。 + String regex = "^[\\w]{3,12}$"; + // 定义一个正则表达式字符串regex,用于验证密码格式是否符合要求。这里的正则表达式表示密码必须由3到12位的字母、数字或下划线组成,用于限制用户输入的新密码格式在合理范围内,提高安全性。 + boolean flag = newpassword.matches(regex); + // 使用String类的matches方法,将获取到的新密码newpassword与定义好的正则表达式regex进行匹配,返回的结果(true或false)赋值给flag变量,用于判断新密码的格式是否正确。 + if (!flag) { - request.setAttribute("update_msg", "密码格式错误,重新提交!"+String.format("%tT",new Date())); + // 如果flag为false,即新密码格式不符合定义的正则表达式要求,说明密码格式错误。 + request.setAttribute("update_msg", "密码格式错误,重新提交!" + String.format("%tT", new Date())); + // 使用request对象的setAttribute方法设置一个名为"update_msg"的属性,属性值是提示用户密码格式错误并告知需要重新提交的信息,同时通过String.format结合%tT格式化Date对象,将当前的时间信息添加到提示信息中,方便用户知晓出现格式错误的时间情况以及提示重新操作。 request.getRequestDispatcher("/WEB-INF/teacher/teacherUpdatePassword.jsp").forward(request, response); + // 获取一个请求转发器,将当前请求转发到"/WEB-INF/teacher/teacherUpdatePassword.jsp"这个JSP页面,通常该页面是用于展示教师更新密码的表单界面,这样服务器端会接着处理转发后的请求,并向客户端返回相应的JSP页面经过渲染后的内容,整个过程对客户端来说是一次完整的请求响应过程,客户端浏览器地址栏中的URL并不会发生改变,通过转发请求可以引导用户回到密码更新页面重新输入密码。 } else if (!newpassword.equals(ennewpassword)) { + // 如果新密码格式正确,但是新密码和确认密码不一致(通过equals方法进行比对),则执行以下逻辑。 request.setAttribute("update_msg", "密码确认错误,请重新提交!" + String.format("%tT", new Date())); + // 同样使用request对象的setAttribute方法设置"update_msg"属性,属性值为提示用户密码确认错误并需要重新提交的信息,同时添加当前时间信息,告知用户操作时间以及重新操作的提示。 request.getRequestDispatcher("/WEB-INF/teacher/teacherUpdatePassword.jsp").forward(request, response); + // 将请求转发到"/WEB-INF/teacher/teacherUpdatePassword.jsp"页面,让用户回到密码更新页面重新进行密码输入和确认操作。 } else { + // 如果新密码格式正确且两次输入的密码一致,执行以下密码更新及后续相关操作。 - TeacherService service= new TeacherServiceImpl(); - service.updatePassword(teacherid,newpassword); + TeacherService service = new TeacherServiceImpl(); + // 创建一个TeacherServiceImpl类的实例,通过多态的方式将其赋值给TeacherService接口类型的变量service,这样后续就可以调用TeacherService接口中定义的业务方法,而具体的更新教师密码的操作实现则由TeacherServiceImpl类来完成。 + + service.updatePassword(teacherid, newpassword); + // 调用service(实际是TeacherServiceImpl的实例)的updatePassword方法,传入前面获取到的教师编号teacherid和新密码newpassword作为参数,该方法应该是在数据库或其他存储教师信息的数据源中,根据教师编号找到对应的教师记录,并将密码更新为新密码,实现教师密码的更新业务逻辑操作。 Teacher newTeacher = service.findTeacherById(teacher); + // 调用service的findTeacherById方法,传入之前获取到的原教师对象teacher,该方法应该是根据教师对象中的相关标识信息(可能是教师编号等)去数据库等数据源中查询对应的教师记录,并返回更新后的教师对象(因为密码已经更新了,可能数据库中返回的教师对象包含最新的信息,比如更新时间等也会更新),将查询到的更新后的教师对象赋值给newTeacher变量。 + teacher = newTeacher; - session.setAttribute("teacher",teacher); + // 将更新后的教师对象newTeacher赋值给原来的教师对象teacher,这样可以保证当前代码中使用的教师对象是最新的信息,比如后续如果还有基于教师对象进行的其他操作(虽然这里暂时未体现更多后续操作),就是基于更新后的教师信息了。 + + session.setAttribute("teacher", teacher); + // 使用HttpSession对象的setAttribute方法,将更新后的教师对象teacher重新保存到会话中,覆盖原来会话中保存的教师对象,这样可以保证会话中保存的教师信息是最新的,例如保持登录状态等相关信息基于最新的教师数据,避免因为密码更新导致登录相关的一些验证等出现问题。 request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); + // 设置名为"update_msg"的属性,属性值为提示用户密码修改成功的信息,并通过格式化添加当前时间信息,让用户知晓操作完成且成功的时间情况。 + request.getRequestDispatcher("/WEB-INF/teacher/teacherUpdatePassword.jsp").forward(request, response); + // 再次获取请求转发器,将请求转发到"/WEB-INF/teacher/teacherUpdatePassword.jsp"这个JSP页面,可能是为了在页面上展示修改成功的提示信息,让用户知晓密码已经成功更新,或者可以继续进行其他相关操作(比如可能有刷新页面重新登录等后续引导操作,虽然这里代码未体现更多相关后续逻辑),整个过程对客户端来说是一次完整的请求响应过程,客户端浏览器地址栏中的URL不会发生改变。 } - } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,用于处理HTTP GET请求,例如当客户端通过在浏览器地址栏直接输入URL或者点击链接等方式(通常这些情况会发起GET请求)访问此Servlet对应的路径时,Web容器会调用这个方法来处理相应的请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即不管客户端是通过POST方式还是GET方式访问这个Servlet对应的路径,都会按照doPost方法里所定义的逻辑去进行相应的处理,比如获取教师信息、验证密码格式、更新密码以及转发请求到JSP页面等操作都会同样执行,这样做可能是在业务逻辑上对于这两种请求方式更新教师密码的操作要求是一致的,所以进行了这样的复用处理。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java b/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java index 0a73f0e..c5f5923 100644 --- a/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java +++ b/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java @@ -1,15 +1,29 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于web.servlet.teacher包下,通过包结构对类进行分类管理,使项目代码更有条理,便于区分不同功能模块对应的代码。 import domain.Course; import domain.SelectCourse; import domain.Student; import domain.Teacher; +// 导入不同的领域模型类,这些类通常用于封装业务相关实体的属性和业务逻辑(如果有定义)。 +// domain.Course类用于封装课程相关的各种属性,比如课程编号、课程名称、学分等信息,代表了业务领域里课程这一实体在代码中的体现,方便后续对课程相关数据进行操作和传递。 +// domain.SelectCourse类大概率是用于封装学生选课相关的信息,例如学生所选课程的对应关系、选课时间以及可能的成绩等信息,体现了学生选课这一业务概念在代码层面的抽象。 +// domain.Student类用于封装学生相关的属性(像学号、姓名、班级等)以及对应的业务逻辑,是对学生这个业务实体在代码层面的表示,会在后续涉及学生信息查询等操作中用到。 +// domain.Teacher类用于封装教师相关的属性(如教师编号、姓名、所在院系等)以及业务逻辑,虽然在此处当前的主要操作围绕课程分数修改,教师相关体现不多,但可能是整体项目结构中相关领域类的统一引入。 + import service.CourseService; import service.SelectCourseService; import service.StudentService; import service.impl.CourseServiceImpl; import service.impl.SelectCourseServiceImpl; import service.impl.StudentServiceImpl; +// 导入不同业务逻辑对应的服务接口以及它们的具体实现类,用于实现具体的业务操作功能。 +// service.CourseService接口定义了针对课程业务操作的抽象方法,例如查询课程信息、更新课程相关属性等操作的方法声明,为课程相关业务逻辑调用提供统一规范。 +// service.SelectCourseService接口明确了与学生选课业务相关的操作方法,比如根据课程和学生信息查询选课记录、更新选课成绩等相关业务逻辑的抽象方法定义。 +// service.StudentService接口规定了针对学生业务操作的各种方法,像查询学生信息、更新学生资料等相关操作的接口声明,便于后续调用相关学生业务功能。 +// service.impl.CourseServiceImpl是CourseService接口的具体实现类,里面包含了与数据库或其他数据源交互来实际完成课程业务逻辑的代码,例如实现从数据库查询、更新课程信息等具体功能的代码就在这个类里。 +// service.impl.SelectCourseServiceImpl是SelectCourseService接口的具体实现类,负责实现学生选课业务相关操作的具体代码逻辑,像根据特定条件更新选课成绩等操作就在此实现。 +// service.impl.StudentServiceImpl则是StudentService接口的具体实现类,包含了实现学生业务相关操作的具体代码,比如按照学号等条件查询学生信息的代码逻辑就在这个类中。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -19,36 +33,84 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.Date; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及应对可能出现的异常情况,同时导入用于获取当前日期时间信息的Date类,方便在提示信息中添加操作时间等。 +// ServletException用于处理Servlet执行过程中出现的异常情况,例如业务逻辑执行出错、配置错误等引发的异常都会通过它来处理。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并配置其相关的访问路径等属性,方便Web容器(如Tomcat等服务器)识别并进行管理。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法,开发人员通过重写它里面的方法来实现具体的业务逻辑,以应对不同类型的HTTP请求(如GET、POST等)。 +// HttpServletRequest用于获取客户端发送过来的HTTP请求中的各种信息,例如请求参数(像表单提交的数据等)、请求头信息等,是后续处理请求数据的重要依据。 +// HttpServletResponse用于向客户端发送HTTP响应,比如设置响应状态码、响应头以及返回响应内容等,以此构建完整的返回给客户端的信息。 +// HttpSession用于在服务器端管理用户会话信息,通过它可以在不同的请求之间共享数据,不过在这段代码里暂时没有明显体现出复杂的会话信息使用场景,可能只是整体项目框架下相关类的引入。 +// IOException用于处理输入输出相关的异常,像读写文件、网络传输等出现问题时会抛出该异常。 +// Date类用于获取当前的日期和时间,在这里主要是用于在给用户反馈的提示信息中添加具体的时间戳,让用户知晓分数修改操作完成的时间情况。 @WebServlet("/updateOptionalCourseScoreServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定其对应的访问路径为"/updateOptionalCourseScoreServlet"。当客户端通过这个URL路径发起HTTP请求时,Web容器(如Tomcat等)就会找到并调用这个Servlet来处理请求。 public class UpdateOptionalCourseScoreServlet extends HttpServlet { + // 定义一个名为UpdateOptionalCourseScoreServlet的类,它继承自HttpServlet类,意味着这个类是一个用于处理HTTP请求的Servlet,通过继承HttpServlet可以方便地重写相应方法来处理不同类型的HTTP请求(如GET、POST等),以实现具体的业务逻辑,这里主要是实现更新选修课程成绩的相关业务逻辑。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,用于处理HTTP POST请求。当客户端通过POST方式(比如通过表单提交修改课程分数相关信息等情况常用POST方式向服务器发送数据)访问此Servlet对应的"/updateOptionalCourseScoreServlet"这个URL路径时,Web容器会自动调用这个方法来处理相应的请求。 + // 参数request包含了客户端发送过来的所有请求信息,response则是用于向客户端返回响应信息的对象。 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",确保从客户端接收到的请求参数等数据能够按照UTF-8编码格式正确解析,避免中文等特殊字符出现乱码问题,保证后续获取和处理请求数据的准确性,特别是在获取课程编号、学生学号、成绩等文本信息时防止乱码很关键。 String cid = request.getParameter("cid"); + // 从客户端发送的HTTP请求中获取名为"cid"的参数值,按照业务逻辑推测,这个参数值通常代表要修改成绩的选修课程的编号,将获取到的课程编号赋值给cid变量,以便后续根据这个编号进行相关的课程成绩更新以及查询操作。 + String sid = request.getParameter("sid"); + // 同样,从请求中获取名为"sid"的参数值,该值对应要修改成绩的学生的学号信息,赋值给sid变量,后续会基于这个学号来查找对应的学生信息以及关联的选课记录等,用于准确更新该学生对应课程的成绩。 + String sScore = request.getParameter("student-score"); + // 从请求中获取名为"student-score"的参数值,这个值就是要更新的学生在选修课程上的成绩信息,赋值给sScore变量,准备用于后续的成绩更新操作。 + StudentService service = new StudentServiceImpl(); + // 创建一个StudentServiceImpl类的实例,通过多态的方式将其赋值给StudentService接口类型的变量service,这样后续就可以调用StudentService接口中定义的业务方法,而具体的查询学生信息等操作的实现则由StudentServiceImpl类来完成,在这里是为了后续查找对应学号的学生信息做准备。 + CourseService service1 = new CourseServiceImpl(); + // 创建一个CourseServiceImpl类的实例,赋值给CourseService接口类型的变量service1,方便后续调用CourseService接口里定义的业务方法,像查询课程相关信息等操作就可以通过这个变量来调用具体实现类的方法,这里是为了获取对应课程信息做准备。 + SelectCourseService service2 = new SelectCourseServiceImpl(); + // 创建一个SelectCourseServiceImpl类的实例,赋值给SelectCourseService接口类型的变量service2,以便后续调用SelectCourseService接口中定义的业务方法,例如根据课程编号和学生学号更新选课成绩、查询选课相关记录等操作都可以通过这个变量来调用具体实现类的方法,这里先是用于更新成绩操作。 - service2.upDateScoreByCidAndSid(cid,sid,sScore); + service2.upDateScoreByCidAndSid(cid, sid, sScore); + // 调用service2(实际是SelectCourseServiceImpl的实例)的upDateScoreByCidAndSid方法,传入前面获取到的课程编号cid、学生学号sid以及要更新的成绩sScore作为参数,该方法应该是在数据库或其他存储选课信息的数据源中,根据课程编号和学生学号找到对应的选课记录,并将成绩更新为传入的新成绩,实现选修课程成绩的更新业务逻辑操作。 Student student = new Student(); + // 创建一个Student类的实例student,用于封装学生相关信息,准备后续根据学号查询完整的学生信息,虽然这里只是简单创建一个新对象,后续会设置学号等关键信息去查询数据库中的对应学生记录。 + student.setS_id(sid); + // 通过调用Student类的setS_id方法,将前面获取到的学生学号sid设置到student对象中,使得这个对象可以携带准确的学号信息去进行后续的查询操作,确保查询的是对应学号的学生信息。 Student s = service.findStudentById(student); + // 调用service(即StudentServiceImpl的实例)的findStudentById方法,传入封装了学号信息的student对象,该方法会依据学生学号去数据库等数据源中查询对应的学生信息,并返回完整的学生对象(包含学号、姓名、班级等各种信息),将查询到的学生对象赋值给s变量,方便后续在页面展示或者其他相关业务操作中使用该学生的详细信息。 + Course c = service1.findSelectCourseByCourseId(cid); - SelectCourse sc = service2.findScoreByCourseIdAndStudentId(cid,sid); + // 调用service1(即CourseServiceImpl的实例)的findSelectCourseByCourseId方法,传入课程编号cid,该方法会根据课程编号去查找对应的课程信息(如课程名称、学分等),并返回Course对象(包含课程相关的各种属性信息),将查询到的课程对象赋值给c变量,以便后续展示课程相关详情或者其他与课程有关的业务操作使用。 + + SelectCourse sc = service2.findScoreByCourseIdAndStudentId(cid, sid); + // 调用service2的findScoreByCourseIdAndStudentId方法,传入课程编号cid和学生学号sid,该方法会依据这两个关键信息去查询对应的选课记录以及成绩等相关信息(因为选课记录关联了课程和学生,且成绩也是选课记录里的一部分内容),返回SelectCourse对象(包含选课相关的详细信息,比如选课时间、成绩等),将查询到的SelectCourse对象赋值给sc变量,用于后续的页面展示或者其他相关处理。 + + request.setAttribute("s", s); + // 使用request对象的setAttribute方法,将查询到的学生对象s保存到请求对象中,设置的属性名为"s",这样在后续转发请求到JSP页面等操作时,在目标JSP页面中就可以通过这个属性名获取到该学生对象,进而可以展示学生的详细信息,比如学号、姓名等内容。 - request.setAttribute("s",s); - request.setAttribute("c",c); - request.setAttribute("sc",sc); - request.setAttribute("update_msg","修改分数成功!"+String.format("%tT",new Date())); - request.getRequestDispatcher("/WEB-INF/teacher/updateOptionalCourseScore.jsp").forward(request,response); + request.setAttribute("c", c); + // 同样,将查询到的课程对象c保存到请求对象中,属性名为"c",方便在JSP页面等地方获取课程信息进行展示,例如展示课程名称、学分等相关内容。 + + request.setAttribute("sc", sc); + // 把查询到的SelectCourse对象sc保存到请求对象中,属性名为"sc",以便后续在页面中展示选课相关的详细信息,像选课时间、学生在该课程的成绩等情况。 + + request.setAttribute("update_msg", "修改分数成功!" + String.format("%tT", new Date())); + // 设置名为"update_msg"的属性,属性值为提示用户修改分数成功的信息,并通过String.format结合%tT格式化Date对象,将当前的时间信息添加到提示信息中,让用户知晓操作完成且成功的时间情况,方便用户了解分数修改的及时性等。 + + request.getRequestDispatcher("/WEB-INF/teacher/updateOptionalCourseScore.jsp").forward(request, response); + // 获取一个请求转发器,将当前请求转发到"/WEB-INF/teacher/updateOptionalCourseScore.jsp"这个JSP页面,通常该页面会用于展示修改课程分数后的相关信息,比如学生信息、课程信息、选课记录以及修改成功的提示信息等内容,这样服务器端会接着处理转发后的请求,并向客户端返回相应的JSP页面经过渲染后的内容,整个过程对客户端来说是一次完整的请求响应过程,客户端浏览器地址栏中的URL并不会发生改变,通过转发请求可以进行后续的页面展示操作,将修改分数后的情况呈现给用户查看。 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,用于处理HTTP GET请求,例如当客户端通过在浏览器地址栏直接输入URL或者点击链接等方式(通常这些情况会发起GET请求)访问此Servlet对应的路径时,Web容器会调用这个方法来处理相应的请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即不管客户端是通过POST方式还是GET方式访问这个Servlet对应的路径,都会按照doPost方法里所定义的逻辑去进行相应的处理,比如获取课程编号、学生学号、成绩信息,更新成绩,查询相关对象信息以及转发请求到JSP页面等操作都会同样执行,这样做可能是在业务逻辑上对于这两种请求方式更新选修课程分数的操作要求是一致的,所以进行了这样的复用处理。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/UpdateScoreServlet.java b/src/web/servlet/teacher/UpdateScoreServlet.java index 08384c8..fb6e399 100644 --- a/src/web/servlet/teacher/UpdateScoreServlet.java +++ b/src/web/servlet/teacher/UpdateScoreServlet.java @@ -1,14 +1,27 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于web.servlet.teacher包下,利用包结构来对类进行分类管理,使项目的代码结构更加清晰,便于区分不同功能模块对应的代码。 import domain.Course; import domain.SelectCourse; import domain.Student; +// 导入相关的领域模型类,这些类用于封装业务领域中不同实体的属性及业务逻辑(若有定义)。 +// domain.Course类通常用于封装课程相关的属性,比如课程编号、课程名称、课程学分等信息,代表了业务领域里课程这一实体在代码中的体现,方便后续对课程相关数据进行操作与传递。 +// domain.SelectCourse类大概率是用来封装学生选课相关的信息,例如学生所选课程的对应关系、选课时间以及对应的成绩等内容,体现了学生选课这一业务概念在代码层面的抽象表示,便于处理与选课相关的业务操作。 +// domain.Student类用于封装学生相关的属性,像学号、姓名、所在班级等信息,是对学生这个业务实体在代码层面的表示,后续会基于学生学号等信息进行相关的查询操作。 + import service.CourseService; import service.SelectCourseService; import service.StudentService; import service.impl.CourseServiceImpl; import service.impl.SelectCourseServiceImpl; import service.impl.StudentServiceImpl; +// 导入不同业务逻辑对应的服务接口以及它们的具体实现类,用于实现具体的业务操作功能。 +// service.CourseService接口定义了针对课程业务操作的抽象方法,例如查询课程详情、更新课程相关属性等操作对应的方法声明,为课程相关业务逻辑的调用提供统一规范。 +// service.SelectCourseService接口明确了与学生选课业务相关的操作方法,比如根据课程和学生信息查询选课记录、获取选课成绩等相关业务逻辑的抽象方法定义,便于后续进行选课相关的业务处理。 +// service.StudentService接口规定了针对学生业务操作的各种方法,像查询学生信息、更新学生资料等相关操作的接口声明,方便后续调用学生业务相关的功能。 +// service.impl.CourseServiceImpl是CourseService接口的具体实现类,其内部包含了与数据库或其他数据源交互来实际完成课程业务逻辑的代码,例如实现从数据库中查询课程信息、更新课程数据等具体功能的代码就在这个类里。 +// service.impl.SelectCourseServiceImpl是SelectCourseService接口的具体实现类,负责实现学生选课业务相关操作的具体代码逻辑,比如根据特定条件查询选课记录及成绩等操作的具体实现就在此。 +// service.impl.StudentServiceImpl则是StudentService接口的具体实现类,包含了实现学生业务相关操作的具体代码,比如依据学号查询学生信息等代码逻辑就在这个类中。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -16,32 +29,73 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及应对可能出现的异常情况。 +// ServletException用于处理Servlet执行过程中出现的异常情况,例如业务逻辑执行出错、配置错误等引发的异常都会通过它来处理。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并配置其相关的访问路径等属性,方便Web容器(如Tomcat等服务器)识别并进行管理。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法,开发人员通过重写它里面的方法来实现具体的业务逻辑,以应对不同类型的HTTP请求(如GET、POST等)。 +// HttpServletRequest用于获取客户端发送过来的HTTP请求中的各种信息,例如请求参数(像表单提交的数据等)、请求头信息等,是后续处理请求数据的重要依据。 +// HttpServletResponse用于向客户端发送HTTP响应,比如设置响应状态码、响应头以及返回响应内容等,以此构建完整的返回给客户端的信息。 +// IOException用于处理输入输出相关的异常,像读写文件、网络传输等出现问题时会抛出该异常。 @WebServlet("/updateScoreServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定其对应的访问路径为"/updateScoreServlet"。当客户端通过这个URL路径发起HTTP请求时,Web容器(如Tomcat等)就会找到并调用这个Servlet来处理请求。 public class UpdateScoreServlet extends HttpServlet { + // 定义一个名为UpdateScoreServlet的类,它继承自HttpServlet类,意味着这个类是一个用于处理HTTP请求的Servlet,通过继承HttpServlet可以方便地重写相应方法来处理不同类型的HTTP请求(如GET、POST等),以实现具体的业务逻辑,这里主要是实现与更新成绩相关的业务逻辑(从后续的操作和转发的页面推测)。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,用于处理HTTP POST请求。当客户端通过POST方式(比如通过表单提交更新成绩相关信息等情况常用POST方式向服务器发送数据)访问此Servlet对应的"/updateScoreServlet"这个URL路径时,Web容器会自动调用这个方法来处理相应的请求。 + // 参数request包含了客户端发送过来的所有请求信息,response则是用于向客户端返回响应信息的对象。 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",确保从客户端接收到的请求参数等数据能够按照UTF-8编码格式正确解析,避免中文等特殊字符出现乱码问题,保证后续获取和处理请求数据的准确性,特别是在获取课程编号、学生学号等关键信息时防止乱码很重要,因为这些信息后续要用于查询等操作。 + String cid = request.getParameter("cid"); + // 从客户端发送的HTTP请求中获取名为"cid"的参数值,按照业务逻辑推测,这个参数值通常代表要更新成绩的课程的编号,将获取到的课程编号赋值给cid变量,以便后续根据这个编号进行相关的课程信息查询以及成绩更新等操作。 + String sid = request.getParameter("sid"); + // 同样,从请求中获取名为"sid"的参数值,该值对应要更新成绩的学生的学号信息,赋值给sid变量,后续会基于这个学号来查找对应的学生信息以及关联的选课记录等,用于准确更新该学生对应课程的成绩。 StudentService service = new StudentServiceImpl(); + // 创建一个StudentServiceImpl类的实例,通过多态的方式将其赋值给StudentService接口类型的变量service,这样后续就可以调用StudentService接口中定义的业务方法,而具体的查询学生信息等操作的实现则由StudentServiceImpl类来完成,在这里是为了后续查找对应学号的学生信息做准备。 + Student student = new Student(); + // 创建一个Student类的实例student,用于封装学生相关信息,准备后续根据学号查询完整的学生信息,虽然这里只是简单创建一个新对象,后续会设置学号等关键信息去查询数据库中的对应学生记录。 + student.setS_id(sid); + // 通过调用Student类的setS_id方法,将前面获取到的学生学号sid设置到student对象中,使得这个对象可以携带准确的学号信息去进行后续的查询操作,确保查询的是对应学号的学生信息。 + Student s = service.findStudentById(student); + // 调用service(即StudentServiceImpl的实例)的findStudentById方法,传入封装了学号信息的student对象,该方法会依据学生学号去数据库等数据源中查询对应的学生信息,并返回完整的学生对象(包含学号、姓名、班级等各种信息),将查询到的学生对象赋值给s变量,方便后续在页面展示或者其他相关业务操作中使用该学生的详细信息。 CourseService service1 = new CourseServiceImpl(); + // 创建一个CourseServiceImpl类的实例,赋值给CourseService接口类型的变量service1,方便后续调用CourseService接口里定义的业务方法,像查询课程相关信息等操作就可以通过这个变量来调用具体实现类的方法,这里是为了获取对应课程信息做准备。 + Course c = service1.findSelectCourseByCourseId(cid); + // 调用service1(即CourseServiceImpl的实例)的findSelectCourseByCourseId方法,传入课程编号cid,该方法会根据课程编号去查找对应的课程信息(如课程名称、学分等),并返回Course对象(包含课程相关的各种属性信息),将查询到的课程对象赋值给c变量,以便后续展示课程相关详情或者其他与课程有关的业务操作使用。 SelectCourseService service2 = new SelectCourseServiceImpl(); - SelectCourse sc = service2.findScoreByCourseIdAndStudentId(cid,sid); + // 创建一个SelectCourseServiceImpl类的实例,赋值给SelectCourseService接口类型的变量service2,以便后续调用SelectCourseService接口中定义的业务方法,例如根据课程编号和学生学号查询选课记录及成绩等操作都可以通过这个变量来调用具体实现类的方法,这里是为了获取选课相关信息做准备。 + + SelectCourse sc = service2.findScoreByCourseIdAndStudentId(cid, sid); + // 调用service2的findScoreByCourseIdAndStudentId方法,传入课程编号cid和学生学号sid,该方法会依据这两个关键信息去查询对应的选课记录以及成绩等相关信息(因为选课记录关联了课程和学生,且成绩也是选课记录里的一部分内容),返回SelectCourse对象(包含选课相关的详细信息,比如选课时间、成绩等),将查询到的SelectCourse对象赋值给sc变量,用于后续的页面展示或者其他相关处理。 + + request.setAttribute("s", s); + // 使用request对象的setAttribute方法,将查询到的学生对象s保存到请求对象中,设置的属性名为"s",这样在后续转发请求到JSP页面等操作时,在目标JSP页面中就可以通过这个属性名获取到该学生对象,进而可以展示学生的详细信息,比如学号、姓名等内容。 - request.setAttribute("s",s); - request.setAttribute("c",c); - request.setAttribute("sc",sc); - request.getRequestDispatcher("/WEB-INF/teacher/updateOptionalCourseScore.jsp").forward(request,response); + request.setAttribute("c", c); + // 同样,将查询到的课程对象c保存到请求对象中,属性名为"c",方便在JSP页面等地方获取课程信息进行展示,例如展示课程名称、学分等相关内容。 + + request.setAttribute("sc", sc); + // 把查询到的SelectCourse对象sc保存到请求对象中,属性名为"sc",以便后续在页面中展示选课相关的详细信息,像选课时间、学生在该课程的成绩等情况。 + + request.getRequestDispatcher("/WEB-INF/teacher/updateOptionalCourseScore.jsp").forward(request, response); + // 获取一个请求转发器,将当前请求转发到"/WEB-INF/teacher/updateOptionalCourseScore.jsp"这个JSP页面,通常该页面会用于展示更新成绩相关的信息,比如学生信息、课程信息、选课记录等内容,这样服务器端会接着处理转发后的请求,并向客户端返回相应的JSP页面经过渲染后的内容,整个过程对客户端来说是一次完整的请求响应过程,客户端浏览器地址栏中的URL并不会发生改变,通过转发请求可以进行后续的页面展示操作,将与更新成绩相关的情况呈现给用户查看。 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,用于处理HTTP GET请求,例如当客户端通过在浏览器地址栏直接输入URL或者点击链接等方式(通常这些情况会发起GET请求)访问此Servlet对应的路径时,Web容器会调用这个方法来处理相应的请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即不管客户端是通过POST方式还是GET方式访问这个Servlet对应的路径,都会按照doPost方法里所定义的逻辑去进行相应的处理,比如获取课程编号、学生学号,查询学生、课程、选课记录信息,设置请求属性以及转发请求到JSP页面等操作都会同样执行,这样做可能是在业务逻辑上对于这两种请求方式展示更新成绩相关信息的操作要求是一致的,所以进行了这样的复用处理。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/UpdateTeacherInfoServlet.java b/src/web/servlet/teacher/UpdateTeacherInfoServlet.java index 972e4e0..3d40e14 100644 --- a/src/web/servlet/teacher/UpdateTeacherInfoServlet.java +++ b/src/web/servlet/teacher/UpdateTeacherInfoServlet.java @@ -1,10 +1,18 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于“web.servlet.teacher”包下,通过包结构对类进行分类管理,有助于清晰地组织项目代码,方便区分不同功能模块对应的代码。 import domain.Teacher; +// 导入领域模型类Teacher,Teacher类通常用于封装教师相关的各种属性(如教师编号、姓名、性别、学历、职称等信息)以及对应的业务逻辑(如果有定义),在这里主要围绕教师信息的更新操作来使用这个类。 + import service.StudentService; import service.TeacherService; import service.impl.StudentServiceImpl; import service.impl.TeacherServiceImpl; +// 导入学生和教师相关业务逻辑的服务接口以及对应的具体实现类。 +// StudentService定义了针对学生业务操作的抽象方法,不过在这段代码中主要处理教师信息更新相关业务,所以该接口相关操作在此处暂未直接使用,但可能是项目整体服务层结构中统一引入的部分。 +// TeacherService是针对教师业务操作的服务接口,明确了像更新教师信息、查询教师详情等与教师业务相关的各种操作方法,为后续调用教师业务逻辑提供统一的接口规范。 +// StudentServiceImpl是StudentService接口的具体实现类,包含了与数据库或其他数据源交互来实际完成学生业务逻辑的代码,不过在当前教师信息更新的业务场景下,暂时不会调用其方法,只是作为项目中服务层实现类的一部分被引入。 +// TeacherServiceImpl则是TeacherService接口的具体实现类,负责实现教师业务相关操作的具体代码逻辑,例如这里要调用的更新教师信息的方法就在这个类中进行具体实现。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -13,42 +21,89 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Date; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及应对可能出现的异常情况,同时导入用于获取当前日期时间信息的Date类,方便在给用户的提示信息中添加操作时间等。 +// ServletException用于处理Servlet执行过程中出现的异常情况,例如业务逻辑执行出错、配置错误等引发的异常都会通过它来处理。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并配置其相关的访问路径等属性,方便Web容器(如Tomcat等服务器)识别并进行管理。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法,开发人员通过重写它里面的方法来实现具体的业务逻辑,以应对不同类型的HTTP请求(如GET、POST等)。 +// HttpServletRequest用于获取客户端发送过来的HTTP请求中的各种信息,像请求参数(如表单提交的数据等)、请求头信息等,是后续处理请求数据的重要依据。 +// HttpServletResponse用于向客户端发送HTTP响应,例如设置响应状态码、响应头以及返回响应内容等,以此构建完整的返回给客户端的信息。 +// IOException用于处理输入输出相关的异常,像读写文件、网络传输等出现问题时会抛出该异常。 +// Date类用于获取当前的日期和时间,在这里主要是用于在给用户反馈的提示信息中添加具体的时间戳,使得用户能知晓教师信息修改操作完成的时间情况。 @WebServlet("/updateTeacherInfoServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定其对应的访问路径为“/updateTeacherInfoServlet”。当客户端通过这个URL路径发起HTTP请求时,Web容器(如Tomcat等)就会找到并调用这个Servlet来处理请求。 public class UpdateTeacherInfoServlet extends HttpServlet { + // 定义一个名为UpdateTeacherInfoServlet的类,它继承自HttpServlet类,意味着这个类是一个用于处理HTTP请求的Servlet,通过继承HttpServlet可以方便地重写相应方法来处理不同类型的HTTP请求(如GET、POST等),以实现具体的业务逻辑,这里主要是实现更新教师信息的相关业务逻辑。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,用于处理HTTP POST请求。当客户端通过POST方式(例如通过表单提交教师信息修改相关的数据等情况常用POST方式向服务器发送数据)访问此Servlet对应的“/updateTeacherInfoServlet”这个URL路径时,Web容器会自动调用这个方法来处理相应的请求。 + // 参数request包含了客户端发送过来的所有请求信息,response则是用于向客户端返回响应信息的对象。 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为“utf-8”,确保从客户端接收到的请求参数等数据能够按照UTF-8编码格式正确解析,避免中文等特殊字符出现乱码问题,保证后续获取和处理请求数据的准确性,因为要获取教师的各项信息(如姓名、学历、职称等文本信息),防止乱码很关键。 + String tid = request.getParameter("teacher-id"); + // 从客户端发送的HTTP请求中获取名为“teacher-id”的参数值,按照业务逻辑推测,这个参数值通常代表要更新信息的教师的编号,将获取到的教师编号赋值给tid变量,以便后续根据这个编号准确地更新对应的教师信息,使其与数据库中相应教师记录对应起来。 String name = request.getParameter("teacher-name"); + // 从请求中获取名为“teacher-name”的参数值,该值对应要更新的教师的姓名信息,赋值给name变量,准备后续封装到教师对象中,用于更新教师在数据库等数据源中的姓名信息。 + String sex = request.getParameter("teacher-sex"); + // 同样,从请求中获取名为“teacher-sex”的参数值,这个值代表教师的性别信息,赋值给sex变量,后续也会将其封装进教师对象,用于更新教师的性别相关信息(如果数据库中有相应字段存储性别信息的话)。 + String education = request.getParameter("teacher-education"); + // 从请求中获取名为“teacher-education”的参数值,此值为要更新的教师的学历信息,赋值给education变量,将用于后续封装到教师对象里,以更新教师在数据库中的学历记录。 + String title = request.getParameter("teacher-title"); + // 从请求中获取名为“teacher-title”的参数值,该值是要更新的教师的职称信息,赋值给title变量,后续会把它设置到教师对象中,用于更新教师的职称相关信息。 Teacher updateTeacher = new Teacher(); - //判断输入位数是否大于数据库位数 - if (name.length() > 4 || education.length() > 20 || title.length()>24 || name.contains("<") || education.contains("<") || title.contains("<")) { - request.setAttribute("update_msg","格式错误,请重新提交!"+String.format("%tT",new Date())); - request.getRequestDispatcher("updateTeacherServlet?tid="+tid).forward(request, response); - }else { - //封装教师对象 + // 创建一个Teacher类的实例updateTeacher,用于封装要更新的教师的相关信息,后续会将从请求中获取到的教师编号、姓名、性别、学历、职称等信息设置到这个对象中,再通过业务层方法将更新后的教师对象保存到数据库等数据源中,完成教师信息的更新操作。 + + // 判断输入位数是否大于数据库位数 + if (name.length() > 4 || education.length() > 20 || title.length() > 24 || name.contains("<") || education.contains("<") || title.contains("<")) { + // 这里进行一系列的格式验证判断,检查教师姓名(name)的长度是否超过4个字符、学历(education)长度是否超过20个字符、职称(title)长度是否超过24个字符,并且检查姓名、学历、职称中是否包含字符“<”。这些限制可能是基于数据库字段长度设计以及安全考虑(比如防止潜在的SQL注入攻击等情况,虽然简单这样判断不能完全杜绝但能一定程度防范),如果不符合要求则认为格式错误。 + request.setAttribute("update_msg", "格式错误,请重新提交!" + String.format("%tT", new Date())); + // 使用request对象的setAttribute方法设置一个名为“update_msg”的属性,属性值是提示用户格式错误并告知需要重新提交的信息,同时通过String.format结合%tT格式化Date对象,将当前的时间信息添加到提示信息中,方便用户知晓出现格式错误的时间情况以及提示重新操作。 + request.getRequestDispatcher("updateTeacherServlet?tid=" + tid).forward(request, response); + // 获取一个请求转发器,将当前请求转发到“updateTeacherServlet”这个资源(可能是另一个Servlet或者JSP页面等),同时带上获取到的教师编号tid作为参数(通过URL拼接的方式传递参数),这样服务器端会接着处理转发后的请求,并向客户端返回相应的响应内容,整个过程对客户端来说是一次完整的请求响应过程,地址栏中的URL会根据转发情况发生相应改变,转发后可以继续后续的页面展示或者重新输入等操作。 + } else { + // 封装教师对象 updateTeacher.setT_id(tid); + // 通过调用Teacher类的setT_id方法,将前面获取到的教师编号设置到updateTeacher对象中,确保更新的教师信息对应正确的教师记录,与数据库中要更新的教师记录通过编号关联起来。 + updateTeacher.setT_name(name); + // 将获取到的教师姓名设置到updateTeacher对象中,用于更新教师在数据库中的姓名信息。 + updateTeacher.setT_sex(sex); + // 把获取到的教师性别信息设置到updateTeacher对象中,用于更新教师的性别相关信息(如果数据库中有对应字段存储性别信息的话)。 + updateTeacher.setT_education(education); + // 将获取到的教师学历信息设置到updateTeacher对象中,以更新教师在数据库中的学历记录。 + updateTeacher.setT_title(title); + // 把获取到的教师职称信息设置到updateTeacher对象中,用于更新教师的职称相关信息。 - //调用TeacherUpdate服务 + // 调用TeacherUpdate服务(此处应为调用TeacherService服务,可能是注释书写小失误) TeacherService service = new TeacherServiceImpl(); + // 创建一个TeacherServiceImpl类的实例,通过多态的方式将其赋值给TeacherService接口类型的变量service,这样后续就可以调用TeacherService接口中定义的业务方法,而具体的更新教师信息的操作实现则由TeacherServiceImpl类来完成。 + service.updateInfo(updateTeacher); + // 调用service(实际是TeacherServiceImpl的实例)的updateInfo方法,将封装好的包含更新后信息的教师对象updateTeacher传入,该方法应该是在数据库或其他存储教师信息的数据源中,根据教师对象中的信息(编号、姓名、性别、学历、职称等)来更新对应的教师记录,实现教师信息的更新业务逻辑操作。 - //成功则返回并给提示 + // 成功则返回并给提示 request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); + // 设置名为“update_msg”的属性,属性值为提示用户教师信息修改成功的信息,并通过格式化添加当前时间信息,让用户知晓操作完成且成功的时间情况。 + request.getRequestDispatcher("updateTeacherServlet?tid=" + tid).forward(request, response); + // 同样获取请求转发器,将请求转发到“updateTeacherServlet”资源并带上教师编号tid作为参数,进行后续的页面展示或者其他相关业务处理,告知用户修改成功并可以进行后续查看等操作。 } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,用于处理HTTP GET请求,例如当客户端通过在浏览器地址栏直接输入URL或者点击链接等方式(通常这些情况会发起GET请求)访问此Servlet对应的路径时,Web容器会调用这个方法来处理相应的请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即不管客户端是通过POST方式还是GET方式访问这个Servlet对应的路径,都会按照doPost方法里所定义的逻辑去进行相应的处理,比如获取教师相关参数、验证格式、封装教师对象、更新教师信息以及转发请求等操作都会同样执行,这样做可能是在业务逻辑上对于这两种请求方式更新教师信息的操作要求是一致的,所以进行了这样的复用处理。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java b/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java index 7e5d7da..9c505aa 100644 --- a/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java +++ b/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java @@ -1,8 +1,14 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于“web.servlet.teacher”包下,通过包结构对类进行分类组织,有助于使项目代码结构更清晰,便于区分不同功能模块对应的代码所在位置。 import domain.Course; +// 导入领域模型类Course,Course类通常用于封装课程相关的各种属性(比如课程编号、课程名称、课程详细介绍等信息)以及可能的业务逻辑方法(如果有针对课程对象自身的操作需求),在这里主要用于表示教师可选课程相关信息,方便后续操作课程数据。 + import service.TeacherService; import service.impl.TeacherServiceImpl; +// 导入教师业务逻辑对应的服务接口(TeacherService)以及该接口的具体实现类(TeacherServiceImpl)。 +// TeacherService接口定义了针对教师业务操作中与课程相关(此处主要涉及查询可选课程等操作)的抽象方法,为具体业务逻辑的调用提供了统一的规范。 +// TeacherServiceImpl类则是TeacherService接口的具体实现,包含了与数据库或其他数据源交互,来实际完成查询可选课程等业务逻辑的代码。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -12,24 +18,60 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.List; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及可能出现的异常情况,同时导入用于处理集合数据类型(虽然此处暂时未体现集合操作)的类以及处理会话相关操作的类。 +// ServletException用于处理Servlet执行过程中出现的异常情况,例如业务逻辑执行出错、配置错误等引发的异常都会通过它来处理。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并配置其相关的访问路径等属性,方便Web容器(如Tomcat等服务器)识别并进行管理。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法,开发人员通过重写它里面的方法来实现具体的业务逻辑,以应对不同类型的HTTP请求(如GET、POST等)。 +// HttpServletRequest用于获取客户端发送过来的HTTP请求中的各种信息,像请求参数(例如表单提交的数据等)、请求头信息等,是后续处理请求数据的重要依据。 +// HttpServletResponse用于向客户端发送HTTP响应,例如设置响应状态码、响应头以及返回响应内容等,用于构建返回给客户端的信息。 +// HttpSession用于在服务器端管理用户会话信息,通过它可以在不同的请求之间共享数据,不过在这段代码里当前注释掉了相关使用代码,原本可能是用于获取登录教师等相关会话信息,现在暂未实际使用该功能(也许后续会完善)。 +// IOException用于处理输入输出相关的异常,像读写文件、网络传输等出现问题时会抛出该异常。 +// List是Java集合框架中的接口,表示一个有序的、可包含重复元素的集合,虽然在这里暂时没有直接体现出对集合的操作,但在一些更复杂的业务场景中,如果查询出多条课程相关记录可能就会用到List来存放并处理。 @WebServlet("/updateTeacherOptionalCourseServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定其对应的访问路径为“/updateTeacherOptionalCourseServlet”。当客户端通过这个URL路径发起HTTP请求时,Web容器(如Tomcat等服务器)就会找到并调用这个Servlet来处理请求。 public class UpdateTeacherOptionalCourseServlet extends HttpServlet { + // 定义一个名为UpdateTeacherOptionalCourseServlet的类,它继承自HttpServlet类,意味着这个类是一个用于处理HTTP请求的Servlet,通过继承HttpServlet可以方便地重写相应方法来处理不同类型的HTTP请求(如GET、POST等),以实现具体的业务逻辑,这里主要是实现与教师更新可选课程信息相关的业务逻辑(从转发的JSP页面推测)。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,用于处理HTTP POST请求。当客户端通过POST方式(比如通过表单提交更新课程相关信息等情况常用POST方式向服务器发送数据)访问此Servlet对应的“/updateTeacherOptionalCourseServlet”这个URL路径时,Web容器会自动调用这个方法来处理相应的请求。 + // 参数request包含了客户端发送过来的所有请求信息,response则是用于向客户端返回响应信息的对象。 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为“utf-8”,确保从客户端接收到的请求参数等数据能够按照UTF-8编码格式正确解析,避免中文等特殊字符出现乱码问题,保证后续获取和处理请求数据的准确性,特别是在获取课程相关参数等文本信息时防止乱码很关键,因为后续要基于这些参数进行课程信息查询等操作。 + // HttpSession session = request.getSession(); - String cid = (String)request.getParameter("cid"); + // 这行代码被注释掉了,原本的意图应该是获取当前请求对应的HttpSession对象,如果不存在则创建一个新的会话对象。HttpSession在服务器端用于管理用户的会话信息,通常可以用来获取当前登录教师的相关信息(比如教师编号等,用于后续根据教师身份查询对应的可选课程等操作),不过当前暂时没有启用这块功能,可能后续开发中会根据实际需求决定是否启用以及如何使用会话信息。 + + String cid = (String) request.getParameter("cid"); + // 从客户端发送的HTTP请求中获取名为“cid”的参数值,并将其强制转换为String类型(虽然一般情况下请求获取到的参数默认就是String类型,但这里明确转换更严谨),按照业务逻辑推测,这个参数值通常代表要更新信息的可选课程的编号,将获取到的课程编号赋值给cid变量,以便后续根据这个编号进行课程相关信息的查询以及后续可能的更新操作等。 + TeacherService service = new TeacherServiceImpl(); + // 创建一个TeacherServiceImpl类的实例,通过多态的方式将其赋值给TeacherService接口类型的变量service,这样后续就可以调用TeacherService接口中定义的业务方法,而具体的查询可选课程信息的操作实现则由TeacherServiceImpl类来完成,在这里就是为了通过课程编号查询对应的课程对象信息做准备。 + Course c = service.findOptionalCourseByCourseId(cid); - request.setAttribute("course",c); + // 调用service(实际是TeacherServiceImpl的实例)的findOptionalCourseByCourseId方法,传入前面获取到的课程编号cid作为参数,该方法应该是在数据库或其他存储课程信息的数据源中,根据课程编号去查找对应的课程信息(如课程名称、课程详细介绍等),并返回一个Course对象(包含课程相关的各种属性信息),将查询到的课程对象赋值给c变量,方便后续展示课程相关详情或者进行其他与课程有关的业务操作使用。 + + request.setAttribute("course", c); + // 使用request对象的setAttribute方法,将查询到的课程对象c保存到请求对象中,设置的属性名为“course”,这样在后续转发请求到JSP页面等操作时,在目标JSP页面中就可以通过这个属性名获取到该课程对象,进而可以展示课程的详细信息,比如课程名称、课程介绍等内容,方便教师查看并进行后续的课程信息更新操作(如果页面上有相应的表单等元素用于更新信息的话)。 + System.out.println(c.getC_id()); + // 通过调用Course类的getC_id方法,获取课程对象c的课程编号属性,并将其输出到控制台,这可能是用于调试目的,方便开发人员查看当前获取到的课程编号是否正确,是否是预期的要操作的课程编号,在实际的生产环境中,可能会根据需要决定是否保留这样的输出语句(一般调试完成后可以考虑移除或者根据日志配置决定是否记录)。 + System.out.println(c.getC_name()); + // 同样,调用Course类的getC_name方法获取课程对象c的课程名称属性,并输出到控制台,也是用于调试,便于确认获取到的课程名称信息是否准确,符合预期的查询结果,帮助开发人员排查可能出现的问题,比如课程名称显示异常等情况。 + System.out.println(c.getC_info()); + // 调用Course类的getC_info方法获取课程对象c的课程详细介绍等信息,并输出到控制台,同样是出于调试目的,方便开发人员查看课程详细介绍内容是否正确获取到了,以此来验证查询课程信息的业务逻辑是否正确执行。 - request.getRequestDispatcher("/WEB-INF/teacher/updateTeacherOptionalCourseInfo.jsp").forward(request,response); + request.getRequestDispatcher("/WEB-INF/teacher/updateTeacherOptionalCourseInfo.jsp").forward(request, response); + // 获取一个请求转发器,将当前请求转发到“/WEB-INF/teacher/updateTeacherOptionalCourseInfo.jsp”这个JSP页面,通常该页面会用于展示要更新的教师可选课程的相关信息(比如通过获取到的课程对象展示课程名称、课程介绍等内容),并且可能会提供相应的表单元素等,方便教师进行课程信息的修改操作,这样服务器端会接着处理转发后的请求,并向客户端返回相应的JSP页面经过渲染后的内容,整个过程对客户端来说是一次完整的请求响应过程,客户端浏览器地址栏中的URL并不会发生改变,通过转发请求可以进行后续的页面展示等业务操作,引导教师进入课程信息更新页面。 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,用于处理HTTP GET请求,例如当客户端通过在浏览器地址栏直接输入URL或者点击链接等方式(通常这些情况会发起GET请求)访问此Servlet对应的路径时,Web容器会调用这个方法来处理相应的请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即不管客户端是通过POST方式还是GET方式访问这个Servlet对应的路径,都会按照doPost方法里所定义的逻辑去进行相应的处理,比如获取课程编号、查询课程信息、设置请求属性以及转发请求到JSP页面等操作都会同样执行,这样做可能是在业务逻辑上对于这两种请求方式展示教师可选课程信息并引导进入更新页面的操作要求是一致的,所以进行了这样的复用处理。 } -} +} \ No newline at end of file diff --git a/src/web/servlet/teacher/UpdateTeacherServlet.java b/src/web/servlet/teacher/UpdateTeacherServlet.java index cb37644..d7a1d34 100644 --- a/src/web/servlet/teacher/UpdateTeacherServlet.java +++ b/src/web/servlet/teacher/UpdateTeacherServlet.java @@ -1,15 +1,30 @@ package web.servlet.teacher; +// 定义该类所属的包名,表明这个Servlet类位于“web.servlet.teacher”包下,通过包结构对类进行分类管理,有助于在项目中清晰地组织代码,方便区分不同功能模块对应的代码。 import com.sun.org.apache.regexp.internal.RE; +// 导入了Apache的正则表达式相关的类(不过这里的导入路径看起来比较旧,后续可能更推荐使用java.util.regex包下的正则相关类),虽然从当前代码来看可能暂时未直接体现它的使用场景,但也许在更复杂的验证等逻辑中会涉及到正则表达式相关操作,比如对输入数据格式进行验证等情况。 + import domain.CDC; import domain.Student; import domain.Teacher; +// 导入不同的领域模型类,这些类通常用于封装业务领域中不同实体的属性以及相关业务逻辑(如果有定义)。 +// domain.CDC类,从命名推测可能是用于表示学校相关组织结构信息,比如学院(College)、系(Department)、班级(Class)等相关信息的实体类,具体包含对应这些组织结构的相关属性以及可能的业务操作方法。 +// domain.Student类用于封装学生相关的属性,像学号、姓名、班级等信息,以及对应的业务逻辑,虽然在这个Servlet中主要围绕教师相关操作,但可能是整体项目结构中涉及到相关领域类的统一引入。 +// domain.Teacher类用于封装教师相关的属性(如教师编号、姓名、所在院系等)以及业务逻辑,在本类中会用于查询教师信息以及后续和教师相关的业务操作关联,比如更新教师信息等操作会基于这个类的对象来进行。 + import service.CDCService; import service.StudentService; import service.TeacherService; import service.impl.CDCServiceImpl; import service.impl.StudentServiceImpl; import service.impl.TeacherServiceImpl; +// 导入不同业务逻辑对应的服务接口以及它们的具体实现类,用于实现具体的业务操作功能。 +// service.CDCService接口定义了针对CDC相关业务操作的抽象方法,例如查询所有学院、所有系、所有班级等操作对应的方法声明,为获取学校组织结构相关信息提供统一的接口规范。 +// service.StudentService接口规定了针对学生业务操作的各种方法,像查询学生信息、更新学生资料等相关操作的接口声明,不过在此处主要处理教师相关业务逻辑,该接口相关操作暂未直接体现使用,但可能是项目整体服务层的一部分引入进来。 +// service.TeacherService接口明确了与教师业务相关的各种操作方法,比如根据教师编号查询教师信息、更新教师相关属性等业务逻辑对应的方法定义,方便后续调用教师业务相关功能。 +// service.impl.CDCServiceImpl是CDCService接口的具体实现类,其内部包含了与数据库或其他数据源交互来实际完成CDC相关业务逻辑的代码,例如实现从数据库中查询所有学院、系、班级信息等具体功能的代码就在这个类里。 +// service.impl.StudentServiceImpl是StudentService接口的具体实现类,包含了实现学生业务相关操作的具体代码,虽然在此场景下暂时未直接使用其功能,但作为项目服务层实现类的一部分被引入。 +// service.impl.TeacherServiceImpl则是TeacherService接口的具体实现类,负责实现教师业务相关操作的具体代码逻辑,比如根据教师编号查找教师对象等操作的具体实现就在此,后续会用于查询教师信息等操作。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -19,33 +34,78 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.List; +// 导入Java EE中Servlet相关的基础类和接口,用于处理Servlet相关的操作以及应对可能出现的异常情况,同时导入用于处理集合数据类型的List接口,用于存放查询出来的多条相关数据(比如多个学院、系、班级信息等)。 +// ServletException用于处理Servlet执行过程中出现的异常情况,例如业务逻辑执行出错、配置错误等引发的异常都会通过它来处理。 +// WebServlet注解用于将一个普通的Java类标注为Servlet,并配置其相关的访问路径等属性,方便Web容器(如Tomcat等服务器)识别并进行管理。 +// HttpServlet是所有基于HTTP协议的Servlet的基类,提供了处理HTTP请求的基础结构和方法,开发人员通过重写它里面的方法来实现具体的业务逻辑,以应对不同类型的HTTP请求(如GET、POST等)。 +// HttpServletRequest用于获取客户端发送过来的HTTP请求中的各种信息,例如请求参数(像表单提交的数据等)、请求头信息等,是后续处理请求数据的重要依据。 +// HttpServletResponse用于向客户端发送HTTP响应,比如设置响应状态码、响应头以及返回响应内容等,以此构建完整的返回给客户端的信息。 +// HttpSession用于在服务器端管理用户会话信息,通过它可以在不同的请求之间共享数据,在这里主要用于保存查询出来的学校组织结构相关信息(学院、系、班级列表等),方便在后续页面展示或者其他相关操作中使用这些共享数据。 +// IOException用于处理输入输出相关的异常,像读写文件、网络传输等出现问题时会抛出该异常。 +// List是Java集合框架中的接口,表示一个有序的、可包含重复元素的集合,用于存放从数据库或其他数据源查询出来的多条CDC相关对象(如多个学院信息、多个系信息、多个班级信息等),方便后续对这些数据进行遍历、展示等操作。 @WebServlet("/updateTeacherServlet") +// 使用@WebServlet注解将当前类标记为一个Servlet,并指定其对应的访问路径为“/updateTeacherServlet”。当客户端通过这个URL路径发起HTTP请求时,Web容器(如Tomcat等服务器)就会找到并调用这个Servlet来处理请求。 public class UpdateTeacherServlet extends HttpServlet { + // 定义一个名为UpdateTeacherServlet的类,它继承自HttpServlet类,意味着这个类是一个用于处理HTTP请求的Servlet,通过继承HttpServlet可以方便地重写相应方法来处理不同类型的HTTP请求(如GET、POST等),以实现具体的业务逻辑,这里主要是实现与教师信息更新相关的前期准备工作的业务逻辑(从转发的JSP页面推测,可能是为更新教师信息页面准备数据等操作)。 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,用于处理HTTP POST请求。当客户端通过POST方式(例如通过表单提交教师信息相关的数据等情况常用POST方式向服务器发送数据)访问此Servlet对应的“/updateTeacherServlet”这个URL路径时,Web容器会自动调用这个方法来处理相应的请求。 + // 参数request包含了客户端发送过来的所有请求信息,response则是用于向客户端返回响应信息的对象。 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为“utf-8”,确保从客户端接收到的请求参数等数据能够按照UTF-8编码格式正确解析,避免中文等特殊字符出现乱码问题,保证后续获取和处理请求数据的准确性,因为后续要获取教师编号等文本信息,防止乱码很关键,这些信息会用于查询教师信息等操作。 + HttpSession session = request.getSession(); + // 获取当前请求对应的HttpSession对象,如果不存在则创建一个新的会话对象。HttpSession在服务器端用于管理用户的会话信息,在这里主要是为了保存后续查询出来的学校组织结构相关信息(如学院、系、班级列表等),以便在不同请求之间共享这些数据,方便后续页面展示等操作使用。 + String teacherid = request.getParameter("tid"); + // 从客户端发送的HTTP请求中获取名为“tid”的参数值,按照业务逻辑推测,这个参数值通常代表要更新信息的教师的编号,将获取到的教师编号赋值给teacherid变量,以便后续根据这个编号准确地查询对应的教师信息,使其与数据库中相应教师记录对应起来。 Teacher teacher = new Teacher(); + // 创建一个Teacher类的实例teacher,用于封装教师相关信息,准备后续根据教师编号查询完整的教师信息,虽然这里只是简单创建一个新对象,后续会设置教师编号等关键信息去查询数据库中的对应教师记录。 + teacher.setT_id(teacherid); + // 通过调用Teacher类的setT_id方法,将前面获取到的教师编号设置到teacher对象中,使得这个对象可以携带准确的教师编号信息去进行后续的查询操作,确保查询的是对应编号的教师信息。 + TeacherService service = new TeacherServiceImpl(); + // 创建一个TeacherServiceImpl类的实例,通过多态的方式将其赋值给TeacherService接口类型的变量service,这样后续就可以调用TeacherService接口中定义的业务方法,而具体的查询教师信息等操作的实现则由TeacherServiceImpl类来完成,在这里就是为了根据教师编号查找对应的教师对象做准备。 + Teacher newTeacher = service.findTeacherById(teacher); - request.setAttribute("teacher",newTeacher); + // 调用service(即TeacherServiceImpl的实例)的findTeacherById方法,传入封装了教师编号信息的teacher对象,该方法会依据教师编号去数据库等数据源中查询对应的教师信息,并返回完整的教师对象(包含教师编号、姓名、所在院系等各种信息),将查询到的教师对象赋值给newTeacher变量,方便后续在页面展示或者其他相关业务操作中使用该教师的详细信息。 + + request.setAttribute("teacher", newTeacher); + // 使用request对象的setAttribute方法,将查询到的教师对象newTeacher保存到请求对象中,设置的属性名为“teacher”,这样在后续转发请求到JSP页面等操作时,在目标JSP页面中就可以通过这个属性名获取到该教师对象,进而可以展示教师的详细信息,比如姓名、所在院系等内容,为后续教师信息更新页面(推测)提供要更新的教师的初始信息展示。 CDCService service2 = new CDCServiceImpl(); + // 创建一个CDCServiceImpl类的实例,赋值给CDCService接口类型的变量service2,方便后续调用CDCService接口里定义的业务方法,像查询所有学院、所有系、所有班级等操作就可以通过这个变量来调用具体实现类的方法,这里是为了获取学校组织结构相关信息做准备。 + List collegeList = service2.findAllCollege(); + // 调用service2(即CDCServiceImpl的实例)的findAllCollege方法,该方法会从数据库或其他存储学校组织结构信息的数据源中,查询出所有学院的相关信息,并以CDC对象组成的列表形式返回,将查询到的学院信息列表赋值给collegeList变量,方便后续对这些学院信息进行展示或者其他相关处理(比如在更新教师信息页面上让用户选择教师所属学院等操作)。 + List departmentList = service2.findAllDepartment(); + // 调用service2的findAllDepartment方法,此方法会查询出所有系的相关信息,并返回CDC对象组成的列表,赋值给departmentList变量,同样用于后续的展示或者和系相关的业务操作(比如选择教师所属系等)。 + List classList = service2.findAllClass(); + // 调用service2的findAllClass方法,该方法从数据源中查询出所有班级的相关信息,以CDC对象列表形式返回,赋值给classList变量,后续可用于班级相关的展示或者操作(比如选择教师授课班级等情况,具体看业务需求)。 + + session.setAttribute("collegeLists", collegeList); + // 使用HttpSession对象的setAttribute方法,将查询到的学院信息列表collegeList保存到会话对象中,设置的属性名为“collegeLists”,这样在不同的请求之间(比如后续页面刷新或者其他相关操作涉及到再次使用这些学院信息时)可以通过这个属性名从会话中获取到学院信息列表,方便在页面上展示所有学院供用户选择等操作。 - session.setAttribute("collegeLists",collegeList); - session.setAttribute("departmentLists",departmentList); - session.setAttribute("classLists",classList); + session.setAttribute("departmentLists", departmentList); + // 同样,将系信息列表departmentList保存到会话对象中,属性名为“departmentLists”,便于后续在页面展示系相关信息以及进行系相关的业务操作时从会话中获取对应的系信息列表。 - request.getRequestDispatcher("/WEB-INF/admin/updateTeacher.jsp").forward(request,response); + session.setAttribute("classLists", classList); + // 把班级信息列表classList保存到会话对象中,属性名为“classLists”,方便后续在页面展示班级信息以及进行班级相关操作时从会话中获取班级信息列表。 + + request.getRequestDispatcher("/WEB-INF/admin/updateTeacher.jsp").forward(request, response); + // 获取一个请求转发器,将当前请求转发到“/WEB-INF/admin/updateTeacher.jsp”这个JSP页面,通常该页面会用于展示教师信息更新相关的表单以及学校组织结构相关的下拉列表等内容(比如通过从会话中获取学院、系、班级列表展示下拉框供用户选择教师所属的这些组织结构信息,同时展示之前查询到的教师对象信息用于用户查看和修改),这样服务器端会接着处理转发后的请求,并向客户端返回相应的JSP页面经过渲染后的内容,整个过程对客户端来说是一次完整的请求响应过程,客户端浏览器地址栏中的URL并不会发生改变,通过转发请求可以进行后续的页面展示等业务操作,引导进入教师信息更新页面。 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,用于处理HTTP GET请求,例如当客户端通过在浏览器地址栏直接输入URL或者点击链接等方式(通常这些情况会发起GET请求)访问此Servlet对应的路径时,Web容器会调用这个方法来处理相应的请求。 + + doPost(request, response); + // 在doGet方法中直接调用了doPost方法,意味着对于GET请求的处理逻辑和POST请求的处理逻辑是一样的,即不管客户端是通过POST方式还是GET方式访问这个Servlet对应的路径,都会按照doPost方法里所定义的逻辑去进行相应的处理,比如获取教师编号、查询教师信息、获取学校组织结构信息、设置请求和会话属性以及转发请求到JSP页面等操作都会同样执行,这样做可能是在业务逻辑上对于这两种请求方式进入教师信息更新页面的操作要求是一致的,所以进行了这样的复用处理。 } -} +} \ No newline at end of file diff --git a/web/WEB-INF/teacher/addOptionalCourse.jsp b/web/WEB-INF/teacher/addOptionalCourse.jsp index 239aa36..df9d240 100644 --- a/web/WEB-INF/teacher/addOptionalCourse.jsp +++ b/web/WEB-INF/teacher/addOptionalCourse.jsp @@ -1,77 +1,111 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + + <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + 添加课程 + + + + + - - - -
-
- -
- - 教师端 - 课程信息 - 添加课程 - -
-
- -
- + + + + + + + +
+ +
+ + +
+ + + + 教师端 + + 课程信息 + + 添加课程 + + + + +
+ + + +
+ + + +
-
-
- -
- +
+ +
+ + +
-
-
- -
- +
+ +
+ + +
-
-
-
- - ${update_msg} +
+
+ + + ${update_msg} + +
-
- - + + + +
-
- - + + - + }); + \ No newline at end of file diff --git a/web/WEB-INF/teacher/findSelectCourseListByCourseId.jsp b/web/WEB-INF/teacher/findSelectCourseListByCourseId.jsp index f260367..9da2e2f 100644 --- a/web/WEB-INF/teacher/findSelectCourseListByCourseId.jsp +++ b/web/WEB-INF/teacher/findSelectCourseListByCourseId.jsp @@ -1,77 +1,124 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + + <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + 我的授课 + + + + + - - - -
-
- -
+ + + + + + + +
+ +
+ + +
+ + 教师端 + 课程信息 + 学生成绩 + - - - - - - - - - - - - - - - +
ID学号学生姓名课程号课程名课程简介学生分数操作
+ + + - - - - - - - - + + + + + + + + + + + + + + + + + - -
${t.count}${sc.s_id}${sc.s_name}${sc.c_id}${sc.c_name}${sc.c_info}${sc.score}修改分数删除ID学号学生姓名课程号课程名课程简介学生分数操作
- + + + + + + + ${t.count} + + ${sc.s_id} + + ${sc.s_name} + + ${sc.c_id} + + ${sc.c_name} + + ${sc.c_info} + + ${sc.score} + + 修改分数删除 + + + + + + +
-
- - - + + + // 定义一个名为"deleteOptionalCourse"的JavaScript函数,接收一个参数"c_id",该函数用于处理删除授课相关的操作逻辑。首先通过"confirm"函数弹出一个确认对话框,询问用户是否确定要删除授课,当用户点击“确定”按钮时(返回值为true时),会将页面的地址跳转到通过EL表达式动态生成的路径,指向"deleteOptionalCourseServlet"这个Servlet,并传递当前要删除授课对应的课程号("c_id"参数的值)作为参数,以便在服务器端(对应的Servlet中)根据课程号执行相应的删除授课的业务逻辑,实现删除操作。 + - + \ No newline at end of file diff --git a/web/WEB-INF/teacher/tCDCList.jsp b/web/WEB-INF/teacher/tCDCList.jsp index c4a5d9b..dcf6fc2 100644 --- a/web/WEB-INF/teacher/tCDCList.jsp +++ b/web/WEB-INF/teacher/tCDCList.jsp @@ -1,62 +1,99 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + + <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + 学院专业查询 + + + + + - - - -
-
- -
+ + + + + + + +
+ +
+ + +
+ + 教师端 + 学院专业信息 + 学院专业查询 + - - - - - - - - - - - +
ID学院专业班级
+ + + - - - - + + + + + + + + + - -
${c.count}${cdc.college}${cdc.department}${cdc.cclass}ID学院专业班级
- + + + + + + + ${c.count} + + ${cdc.college} + + ${cdc.department} + + ${cdc.cclass} + + + + + + +
-
- - + + - + \ No newline at end of file diff --git a/web/WEB-INF/teacher/tFindFileList.jsp b/web/WEB-INF/teacher/tFindFileList.jsp index 3d73062..cf97541 100644 --- a/web/WEB-INF/teacher/tFindFileList.jsp +++ b/web/WEB-INF/teacher/tFindFileList.jsp @@ -1,63 +1,97 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + + <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + 文件列表 + + + + + - - - -
-
- -
+ + + + + + + +
+ +
+ + +
+ + 教师端 + 个人信息管理 + 文件列表 + - - - +
+ + + + + + + + + - - - - - - - - - - + - -
ID 文件名 文件路径 文件大小 操作
${f.count}${filelist.fileName}${filelist.filePath}${filelist.fileSize}下载
- + + + + + + + ${f.count} + + ${filelist.fileName} + + ${filelist.filePath} + + ${filelist.fileSize} + + 下载 + + + + + + +
-
- - - - \ No newline at end of file + + + - - - + + + + + + +
+
+
+ + 教师端 + 学生通讯录 + 本院学生信息 +
+
+
+ +
+ +
+
- + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
ID 学号 学院 系别 班级 姓名 性别 年龄 城市 手机号 邮箱
${s.count} ${student.s_id} ${student.s_college} ${student.s_department} ${student.s_class} ${student.s_name} ${student.s_sex} ${student.s_age} ${student.s_address} ${student.s_phone} ${student.s_email}
- -
- 共${pb.totalCount}条记录,共${pb.totalPage}页 -
- -
-
-
- - - - - - - + + <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + 本院教师信息 + + + + + - - - + + + + + + +
+
+
+ + 教师端 + 教师通讯录 + 本院教师信息 + + + + + + + + + + + + + + + + + +
ID 工号 姓名 性别 文化程度 职称
${t.count} ${teacher.t_id} ${teacher.t_name} ${teacher.t_sex} ${teacher.t_education} ${teacher.t_title}
+
- - - - - + + + -
-
- - - - + +
+ +
+ + + + + + +
-
- - + + + - + \ No newline at end of file diff --git a/web/WEB-INF/teacher/tIndex.jsp b/web/WEB-INF/teacher/tIndex.jsp index 9111280..881c3fa 100644 --- a/web/WEB-INF/teacher/tIndex.jsp +++ b/web/WEB-INF/teacher/tIndex.jsp @@ -1,17 +1,25 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + + <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + ${html_title} + -<%----%> - - -
-
- -
-
-
功能
-
- + + <%----%> + + + + + +
+ +
+ + +
+ + +
+ +
学校最新公告
+ + + +
${notify.notifyInfo}

${notify.notifyDate}

+ +
-
-
-
学校最新公告
- -
${notify.notifyInfo}

${notify.notifyDate}

-
-
- -
- - - +
\ No newline at end of file diff --git a/web/WEB-INF/teacher/tInformation.jsp b/web/WEB-INF/teacher/tInformation.jsp index d54759b..e693eb1 100644 --- a/web/WEB-INF/teacher/tInformation.jsp +++ b/web/WEB-INF/teacher/tInformation.jsp @@ -1,126 +1,123 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + + <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + 个人信息 + + + + + - - - -
-
- -
- - 教师端 - 个人信息管理 - 个人信息 - -
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- + + + + + + + +
+ +
+ + +
+ + + + 教师端 + + 个人信息管理 + + 个人信息 + + + + +
+ + + +
+ + + +
-
-
- -
- +
+ +
+ +
-
-
- -
-
-
- +
+
- - +
-
- +
+
- +
-
- +
+
- + +
-
- - -
-
-
- - - - - - - - - - - +
+ +
+
+
+ + +
+ + + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ + + +
\ No newline at end of file diff --git a/web/WEB-INF/teacher/teacherNav.jsp b/web/WEB-INF/teacher/teacherNav.jsp index 523a765..6068c65 100644 --- a/web/WEB-INF/teacher/teacherNav.jsp +++ b/web/WEB-INF/teacher/teacherNav.jsp @@ -1,61 +1,84 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + -
-
- - + - + \ No newline at end of file diff --git a/web/WEB-INF/teacher/teacherOptionalCourse.jsp b/web/WEB-INF/teacher/teacherOptionalCourse.jsp index c863748..7336c8f 100644 --- a/web/WEB-INF/teacher/teacherOptionalCourse.jsp +++ b/web/WEB-INF/teacher/teacherOptionalCourse.jsp @@ -1,70 +1,102 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + + <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + 我的授课 + + + + + - - - -
-
- -
+ + + + + + + +
+ +
+ + +
+ + 教师端 + 课程信息 + 我的授课 + - - - - - - - - - - - - +
ID课程号课程名课程简介操作
+ + + - - - - - + + + + + + + + + + + - -
${t.count}${optionalcourse.c_id}${optionalcourse.c_name}${optionalcourse.c_info}修改查看删除ID课程号课程名课程简介操作
- + + + + + + + ${t.count} + + ${optionalcourse.c_id} + + ${optionalcourse.c_name} + + ${optionalcourse.c_info} + + 修改查看删除 + + + + + + +
-
- - - - - + + + - - - -
-
- -
- - 教师端 - 个人信息管理 - 修改密码 - -
-
- -
- + + + + + + + +
+ +
+ + +
+ + + + 教师端 + + 个人信息管理 + + 修改密码 + + + + +
+ + + +
+ + + +
-
-
- -
- +
+ +
+ + +
-
-
- -
- +
+ +
+ + +
-
-
- -
- +
+ +
+ + +
-
-
-
- - ${update_msg} +
+
+ + + ${update_msg} + +
-
- - + + + +
-
- - + + - + }); + - - + \ No newline at end of file diff --git a/web/WEB-INF/teacher/updateOptionalCourseScore.jsp b/web/WEB-INF/teacher/updateOptionalCourseScore.jsp index fd2b328..65ab1f0 100644 --- a/web/WEB-INF/teacher/updateOptionalCourseScore.jsp +++ b/web/WEB-INF/teacher/updateOptionalCourseScore.jsp @@ -1,95 +1,114 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + + <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + 修改分数 + + + + + - - - -
-
- -
- - 教师端 - 课程信息 - 修改学生分数 - -
-
- -
- + + + + + + + +
+ +
+ + +
+ + + + 教师端 + + 课程信息 + + 修改学生分数 + + + + +
+ + + +
+ + + +
-
-
- -
- +
+ +
+ + +
-
-
- -
- +
+ +
+ + +
-
-
- -
- +
+ +
+ + +
-
-
- -
- +
+ +
+ + +
-
-
- -
- +
+ +
+ + +
-
-
-
- - ${update_msg} +
+
+ + + ${update_msg} + +
-
- - + + + +
-
- - - - - - - - \ No newline at end of file + + + - - - -
-
- -
- - 教师端 - 课程信息 - 修改课程 - -
-
- -
- + + + + + + + +
+ +
+ + +
+ + + + 教师端 + + 课程信息 + + 修改课程 + + + + +
+ + + +
+ + + +
-
-
- -
- +
+ +
+ + +
-
-
- -
- +
+ +
+ + +
-
-
-
- - ${update_msg} +
+
+ + + ${update_msg} + +
-
- - + + + +
-
- - - - - - - - + + +