diff --git a/src/web/servlet/student/DeleteSelectStudentServlet.java b/src/web/servlet/student/DeleteSelectStudentServlet.java index 7b90e28..ea1edd4 100644 --- a/src/web/servlet/student/DeleteSelectStudentServlet.java +++ b/src/web/servlet/student/DeleteSelectStudentServlet.java @@ -1,31 +1,54 @@ package web.servlet.student; - +// 包声明,表明该类所属的包名,用于组织和管理Java类,这里表示该Servlet类位于web.servlet.student包下 import service.StudentService; +// 导入StudentService接口,用于后续调用该接口定义的相关业务方法(通常是和学生相关的业务逻辑操作) import service.impl.StudentServiceImpl; +// 导入StudentServiceImpl类,它是StudentService接口的具体实现类,用来提供实际的业务逻辑实现 import javax.servlet.ServletException; +// 导入Servlet异常类,用于捕获和处理Servlet执行过程中出现的异常情况 import javax.servlet.annotation.WebServlet; +// 导入WebServlet注解,通过该注解可以方便地将一个普通的Java类声明为一个Servlet,并配置其访问路径等相关信息 import javax.servlet.http.HttpServlet; +// 导入HttpServlet类,它是所有基于HTTP协议的Servlet的基类,自定义的Servlet类通常需要继承它来实现相应功能 import javax.servlet.http.HttpServletRequest; +// 导入HttpServletRequest类,用于获取HTTP请求中的各种信息,比如请求参数、请求头信息等 import javax.servlet.http.HttpServletResponse; +// 导入HttpServletResponse类,用于向客户端发送HTTP响应,例如设置响应状态码、响应头以及输出响应内容等 import java.io.IOException; +// 导入IOException类,用于处理输入输出相关的异常情况,比如读写文件、网络通信等出现的异常 @WebServlet("/deleteSelectStudentServlet") +// 使用WebServlet注解声明该类是一个Servlet,并指定其访问路径为 /deleteSelectStudentServlet, +// 意味着客户端可以通过该路径来访问这个Servlet提供的服务 public class DeleteSelectStudentServlet extends HttpServlet { + // 定义一个类DeleteSelectStudentServlet,它继承自HttpServlet类,表明它是一个处理HTTP请求的Servlet类 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,该方法会在客户端以POST方式发起请求时被调用 + // request参数用于获取此次HTTP请求的相关信息 + // response参数用于向客户端返回HTTP响应 + String[] sids = request.getParameterValues("sid"); + // 从HTTP请求中获取名为"sid"的参数值,由于该参数可能有多个值(比如批量删除操作时会选择多个学生的id), + // 所以返回的是一个字符串数组,如果没有对应的参数则返回null + StudentService service = new StudentServiceImpl(); + // 创建一个StudentServiceImpl类的实例,该实例实现了StudentService接口,通过这个实例可以调用具体的业务方法 + // 这里就是为了调用和学生删除相关的业务逻辑方法 + service.deleteSelectStudent(sids); + // 调用StudentService接口中定义的deleteSelectStudent方法(由StudentServiceImpl具体实现), + // 传入获取到的学生id数组,来执行批量删除选中学生的业务操作 + response.sendRedirect(request.getContextPath()+"/findStudentByPageServlet"); + // 执行完删除操作后,使用重定向的方式将客户端请求重定向到 /findStudentByPageServlet 路径, + // 通常是为了让页面刷新显示删除后的学生列表等相关信息,request.getContextPath() 一般获取的是当前Web应用的上下文路径 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doGet方法,该方法会在客户端以GET方式发起请求时被调用 + // 这里的实现是直接调用doPost方法,意味着不管是GET请求还是POST请求,都会执行同样的业务逻辑处理 doPost(request,response); } -} -//yuo -//tu -//rre -//s -//kl - +} \ No newline at end of file diff --git a/src/web/servlet/student/DeleteStudentServlet.java b/src/web/servlet/student/DeleteStudentServlet.java index f062068..ea28c2b 100644 --- a/src/web/servlet/student/DeleteStudentServlet.java +++ b/src/web/servlet/student/DeleteStudentServlet.java @@ -1,31 +1,70 @@ package web.servlet.student; +// 定义该类所属的包名,表明这个Servlet类位于web.servlet.student包下,方便在项目中对类进行组织和管理 import service.NotifyService; +// 导入NotifyService接口,通常该接口定义了与通知相关的业务方法,不过从当前类来看可能暂时未直接使用到相关方法 import service.StudentService; +// 导入StudentService接口,用于后续调用和学生相关的业务逻辑操作的方法,是与学生业务处理的抽象定义 import service.impl.NotifyServiceImpl; +// 导入NotifyServiceImpl类,它是NotifyService接口的具体实现类,虽然在当前展示的逻辑中可能未实际调用其功能 import service.impl.StudentServiceImpl; +// 导入StudentServiceImpl类,它是StudentService接口的具体实现类,用于提供具体的学生业务逻辑实现,比如删除学生等操作 import javax.servlet.ServletException; +// 导入ServletException类,用于捕获和处理在Servlet执行过程中出现的异常情况,保障程序的健壮性 import javax.servlet.annotation.WebServlet; +// 导入WebServlet注解,通过这个注解可以便捷地将一个普通Java类声明为Servlet,并配置其对外访问的路径等信息 import javax.servlet.http.HttpServlet; +// 导入HttpServlet类,它是所有基于HTTP协议的Servlet的基础类,自定义的Servlet类一般需要继承它来实现具体功能 import javax.servlet.http.HttpServletRequest; +// 导入HttpServletRequest类,用于获取HTTP请求中的各类信息,像请求参数、请求头以及请求相关的其他属性等 import javax.servlet.http.HttpServletResponse; +// 导入HttpServletResponse类,用于向客户端发送HTTP响应,比如设置响应状态码、响应头以及响应内容等操作 import javax.servlet.http.HttpSession; +// 导入HttpSession类,用于在服务器端管理用户的会话信息,能够实现跨多个请求之间的数据共享等功能 import java.io.IOException; +// 导入IOException类,用于处理输入输出相关的异常,常见于读写文件、网络通信等场景中出现的异常情况 @WebServlet("/deleteStudentServlet") +// 使用WebServlet注解声明该类是一个Servlet,并指定其访问路径为 "/deleteStudentServlet", +// 意味着客户端可以通过这个路径来访问该Servlet提供的服务 public class DeleteStudentServlet extends HttpServlet { + // 定义DeleteStudentServlet类,它继承自HttpServlet类,表明其是一个处理HTTP请求的Servlet类 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,此方法会在客户端以POST方式发起请求时被调用 + // request参数用于接收此次HTTP请求相关的所有信息 + // response参数用于向客户端返回HTTP响应相关的内容,比如页面、数据等 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",确保能够正确解析包含中文等特殊字符的请求参数,避免出现乱码问题 + HttpSession session = request.getSession(); + // 获取当前请求对应的HttpSession对象,如果不存在则会创建一个新的会话,通过会话可以在多个请求间传递数据等 + String studentid = request.getParameter("s_id"); + // 从HTTP请求中获取名为"s_id"的参数值,该值通常代表要删除的学生的唯一标识(如学生ID),并将其赋值给studentid变量, + // 如果请求中不存在该参数,则返回null + StudentService service = new StudentServiceImpl(); + // 创建一个StudentServiceImpl类的实例,它实现了StudentService接口,通过这个实例可以调用具体的和学生相关的业务方法 + service.deleteStudentById(studentid); + // 调用StudentService接口中定义的deleteStudentById方法(由StudentServiceImpl类具体实现), + // 传入获取到的学生ID(studentid),来执行删除对应学生的业务操作 + // request.getRequestDispatcher("/findStudentByPageServlet").forward(request,response); + // 这行代码被注释掉了,原本它的作用是通过请求转发的方式,将请求转发到"/findStudentByPageServlet"对应的资源(一般是另一个Servlet或JSP页面等), + // 在转发过程中,请求对象和响应对象会被保留,地址栏不会改变 + response.sendRedirect("findStudentByPageServlet"); + // 使用重定向的方式将客户端的请求重定向到"findStudentByPageServlet"对应的资源, + // 重定向后客户端会发起一个新的请求,地址栏会显示新的请求路径,常用于页面跳转等操作,不过这里使用相对路径时,要确保路径解析正确 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doGet方法,该方法会在客户端以GET方式发起请求时被调用 + // 此处的实现是直接调用doPost方法,意味着不管客户端是通过GET方式还是POST方式发起请求,都会执行同样的业务逻辑处理 doPost(request,response); } -} +} \ No newline at end of file diff --git a/src/web/servlet/student/DoSelectCourseServlet.java b/src/web/servlet/student/DoSelectCourseServlet.java index 127d2c6..e0cd996 100644 --- a/src/web/servlet/student/DoSelectCourseServlet.java +++ b/src/web/servlet/student/DoSelectCourseServlet.java @@ -1,63 +1,126 @@ package web.servlet.student; +// 声明该类所属的包名,说明这个Servlet类位于web.servlet.student包下,便于在项目中对代码进行分类管理和组织 import domain.Course; +// 导入Course类,通常表示课程相关的领域模型类,可能包含课程的各种属性信息(如课程名称、课程编号等),不过在此处代码中暂时未体现对其具体操作 import domain.SelectCourse; +// 导入SelectCourse类,可能代表学生选课相关的领域模型类,用于描述学生选择课程的相关记录(比如包含学生ID、课程ID以及成绩等属性信息) import domain.Student; +// 导入Student类,代表学生相关的领域模型类,包含学生的各种属性信息(如学生ID、姓名等),在这里会用于获取当前操作的学生相关信息 import service.StudentService; +// 导入StudentService接口,该接口定义了与学生相关业务操作的方法声明,是对学生业务逻辑的抽象描述 import service.impl.StudentServiceImpl; +// 导入StudentServiceImpl类,它是StudentService接口的具体实现类,用于提供具体的学生业务逻辑实现,比如查询学生选课情况、添加选课记录等操作 import javax.servlet.ServletException; +// 导入ServletException类,用于捕获和处理在Servlet执行过程中出现的异常情况,确保程序在出现异常时能合理应对,增强程序的健壮性 import javax.servlet.annotation.WebServlet; +// 导入WebServlet注解,通过这个注解可以方便地将一个普通Java类声明为Servlet,并配置其对外访问的路径等相关信息 import javax.servlet.http.HttpServlet; +// 导入HttpServlet类,它是所有基于HTTP协议的Servlet的基类,自定义的Servlet类通常需要继承它来实现相应的功能,以处理HTTP请求和响应 import javax.servlet.http.HttpServletRequest; +// 导入HttpServletRequest类,用于获取HTTP请求中的各种信息,例如请求参数、请求头以及客户端相关的其他信息等 import javax.servlet.http.HttpServletResponse; +// 导入HttpServletResponse类,用于向客户端发送HTTP响应,像设置响应状态码、响应头以及响应内容(如页面、数据等) import javax.servlet.http.HttpSession; +// 导入HttpSession类,用于在服务器端管理用户的会话信息,能够实现跨多个请求之间的数据共享,在这里用于获取登录学生的相关信息 import java.io.IOException; +// 导入IOException类,用于处理输入输出相关的异常情况,常见于读写文件、网络通信等操作出现异常时进行捕获和处理 import java.util.Date; +// 导入Date类,用于获取当前的日期和时间信息,在这里用于生成提示信息中的时间戳部分 import java.util.List; +// 导入List接口,用于处理和操作有序的元素集合,在这里用于存储学生选课的相关记录列表 @WebServlet("/doSelectCourseServlet") +// 使用WebServlet注解声明该类是一个Servlet,并指定其访问路径为"/doSelectCourseServlet", +// 这意味着客户端可以通过这个路径来访问该Servlet所提供的服务 public class DoSelectCourseServlet extends HttpServlet { + // 定义DoSelectCourseServlet类,它继承自HttpServlet类,表明它是一个用于处理HTTP请求的Servlet类 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,该方法会在客户端以POST方式发起请求时被调用 + // request参数用于接收此次HTTP请求相关的所有信息 + // response参数用于向客户端返回对应的HTTP响应信息 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",目的是确保能够正确解析包含中文等特殊字符的请求参数,避免出现参数解析乱码的问题 + HttpSession session = request.getSession(); - Student student= (Student)session.getAttribute("student"); + // 获取当前请求对应的HttpSession对象,如果不存在则会创建一个新的会话。通过会话对象可以获取之前存储在会话中的用户相关信息, + // 比如在这里用于获取登录的学生信息 + + Student student = (Student) session.getAttribute("student"); + // 从HttpSession对象中获取名为"student"的属性值,并将其强制转换为Student类型,这个属性值通常是在用户登录等操作时存储进去的, + // 代表当前登录的学生对象,通过它可以获取学生的相关标识信息等 + String courseid = request.getParameter("id"); - //存不存在已选该课 + // 从HTTP请求中获取名为"id"的参数值,该参数通常代表要选择的课程的唯一标识(比如课程编号),并将其赋值给courseid变量, + // 如果请求中不存在该参数,则返回null + + // 存不存在已选该课 boolean flag = false; + // 定义一个布尔类型的变量flag,用于标记当前学生是否已经选择了指定的课程,初始值设为false,表示默认还未选该课程 - //判断是否已选 + // 判断是否已选 StudentService studentService = new StudentServiceImpl(); + // 创建一个StudentServiceImpl类的实例,它实现了StudentService接口,通过这个实例可以调用具体的与学生相关的业务方法, + // 在这里主要用于查询学生已选课程的情况 + List selectcourses = studentService.findAllSelectCourse(student.getS_id()); - for (SelectCourse s:selectcourses) { + // 调用StudentService接口中定义的findAllSelectCourse方法(由StudentServiceImpl具体实现),传入当前学生的ID(通过student.getS_id()获取), + // 获取该学生已经选择的所有课程记录列表,并将其赋值给selectcourses变量 + + for (SelectCourse s : selectcourses) { + // 遍历学生已选课程记录列表selectcourses,对每一条选课记录进行检查 if (s.getC_id().equals(courseid)) { + // 如果某条选课记录中的课程ID(通过s.getC_id()获取)与要选择的课程ID(courseid)相等,说明已经选过该课程了 flag = true; + // 将flag标记设为true,表示已选该课程 break; + // 一旦发现已选该课程,就跳出循环,不需要再继续遍历列表了 } } if (flag == true) { + // 如果flag为true,说明当前学生已经选择了指定的课程 request.setAttribute("select_msg", "你已选了该课程!" + String.format("%tT", new Date())); + // 在请求对象中设置一个名为"select_msg"的属性,属性值为提示信息字符串,包含已选课程的提示以及当前的时间戳(通过String.format("%tT", new Date())生成时间格式为HH:MM:SS的字符串) request.getRequestDispatcher("studentOptionalCourseServlet").forward(request, response); + // 使用请求转发的方式将请求转发到"studentOptionalCourseServlet"对应的资源(一般是另一个Servlet或JSP页面等), + // 在转发过程中,请求对象和响应对象会被保留,客户端地址栏显示的地址不会改变,常用于在服务器内部进行页面跳转且希望保留请求相关信息的场景 // response.sendRedirect("studentOptionalCourseServlet"); + // 这行代码被注释掉了,它的作用是使用重定向的方式将客户端请求重定向到"studentOptionalCourseServlet"对应的资源。 + // 重定向会让客户端发起一个新的请求,地址栏会显示新的请求路径,和请求转发有所不同,在这里当前未采用这种方式 } else { - //获取到当前学生id + // 如果flag为false,说明当前学生还没有选择指定的课程 + + // 获取到当前学生id String studentid = student.getS_id(); + // 通过之前获取到的学生对象student,调用其getS_id()方法获取学生的ID,并赋值给studentid变量,用于后续添加选课记录的操作 - //获取当前行的课程id courseid + // 获取当前行的课程id courseid + // 这里的courseid在前面已经从请求参数中获取到了,它代表要选择的课程的ID,会用于添加选课记录的操作 - //调用学生添加选课服务s_id c_id score select_course添加 + // 调用学生添加选课服务s_id c_id score select_course添加 StudentService Service = new StudentServiceImpl(); - Service.addSelectCourse(studentid,courseid); + // 再次创建一个StudentServiceImpl类的实例,用于调用添加选课的业务方法(虽然可以复用前面创建的studentService实例,但这里重新创建了一个) + Service.addSelectCourse(studentid, courseid); + // 调用StudentService接口中定义的addSelectCourse方法(由StudentServiceImpl具体实现),传入学生ID(studentid)和课程ID(courseid), + // 执行添加选课记录的业务操作,一般会在数据库等存储介质中插入一条新的选课记录 - //完成后给提示跳转 + // 完成后给提示跳转 request.setAttribute("select_msg", "选课成功!" + String.format("%tT", new Date())); + // 在请求对象中设置一个名为"select_msg"的属性,属性值为选课成功的提示信息字符串,同样包含当前的时间戳(通过String.format("%tT", new Date())生成时间格式为HH:MM:SS的字符串) request.getRequestDispatcher("studentOptionalCourseServlet").forward(request, response); + // 使用请求转发的方式将请求转发到"studentOptionalCourseServlet"对应的资源(一般是另一个Servlet或JSP页面等), + // 目的是在选课成功后跳转到相应页面展示相关信息,同时保留请求相关的属性信息(如这里设置的"select_msg"提示信息) } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,该方法会在客户端以GET方式发起请求时被调用 + // 此处的实现是直接调用doPost方法,意味着不管客户端是通过GET方式还是POST方式发起请求,都会执行同样的业务逻辑处理 + doPost(request, response); } -} +} \ No newline at end of file diff --git a/src/web/servlet/student/StudentInfomationServlet.java b/src/web/servlet/student/StudentInfomationServlet.java index cb879fb..1860566 100644 --- a/src/web/servlet/student/StudentInfomationServlet.java +++ b/src/web/servlet/student/StudentInfomationServlet.java @@ -1,29 +1,68 @@ package web.servlet.student; +// 定义该类所属的包名,表明这个Servlet类位于web.servlet.student包下,方便在项目中对类进行组织和管理 import domain.Student; +// 导入Student类,它代表学生相关的领域模型类,包含学生的各种属性信息(如姓名、学号等),可能会在后续业务逻辑中用于获取、更新或展示学生信息 import service.StudentService; +// 导入StudentService接口,该接口定义了与学生相关业务操作的方法,例如根据学号查找学生、更新学生信息等,是对学生业务逻辑的抽象描述 import service.impl.StudentServiceImpl; +// 导入StudentServiceImpl类,它是StudentService接口的具体实现类,用于提供具体的学生业务逻辑实现,比如具体的查找学生信息等操作 import javax.servlet.ServletException; +// 导入ServletException类,用于捕获和处理在Servlet执行过程中出现的异常情况,保障程序在出现异常时能合理应对,增强程序的健壮性 import javax.servlet.annotation.WebServlet; +// 导入WebServlet注解,通过这个注解可以方便地将一个普通Java类声明为Servlet,并配置其对外访问的路径等相关信息 import javax.servlet.http.HttpServlet; +// 导入HttpServlet类,它是所有基于HTTP协议的Servlet的基类,自定义的Servlet类通常需要继承它来实现相应的功能,以处理HTTP请求和响应 import javax.servlet.http.HttpServletRequest; +// 导入HttpServletRequest类,用于获取HTTP请求中的各种信息,例如请求参数、请求头以及客户端相关的其他信息等 import javax.servlet.http.HttpServletResponse; +// 导入HttpServletResponse类,用于向客户端发送HTTP响应,像设置响应状态码、响应头以及响应内容(如页面、数据等) import javax.servlet.http.HttpSession; +// 导入HttpSession类,用于在服务器端管理用户的会话信息,能够实现跨多个请求之间的数据共享,在这里原本可能用于获取或更新存储在会话中的学生信息 import java.io.IOException; +// 导入IOException类,用于处理输入输出相关的异常情况,常见于读写文件、网络通信等操作出现异常时进行捕获和处理 @WebServlet("/studentInfomationServlet") +// 使用WebServlet注解声明该类是一个Servlet,并指定其访问路径为"/studentInfomationServlet", +// 意味着客户端可以通过这个路径来访问该Servlet所提供的服务 public class StudentInfomationServlet extends HttpServlet { + // 定义StudentInfomationServlet类,它继承自HttpServlet类,表明它是一个用于处理HTTP请求的Servlet类 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,该方法会在客户端以POST方式发起请求时被调用 + // request参数用于接收此次HTTP请求相关的所有信息 + // response参数用于向客户端返回对应的HTTP响应信息 + // HttpSession session = request.getSession(); + // 这行代码被注释掉了,它原本的作用是获取当前请求对应的HttpSession对象,如果不存在则会创建一个新的会话。 + // 通过会话对象可以获取之前存储在会话中的用户相关信息(比如登录的学生信息等),在这里可能是打算获取学生信息,但目前未启用该功能 + // Student s = (Student) session.getAttribute("student"); + // 这行代码也被注释掉了,它原本是想从HttpSession对象中获取名为"student"的属性值,并将其强制转换为Student类型, + // 这个属性值通常是在用户登录等操作时存储进去的,代表当前登录的学生对象,通过它可以获取学生的相关标识信息等,不过目前未执行此操作 + // StudentService service = new StudentServiceImpl(); + // 同样被注释掉的代码,它的作用是创建一个StudentServiceImpl类的实例,该实例实现了StudentService接口, + // 通过这个实例可以调用具体的与学生相关的业务方法,比如根据学生ID查找学生信息等,在这里可能是打算用来查询学生最新信息,但未实际使用 + // Student newStudent = service.findStudentById(s); -// session.setAttribute("student",newStudent); - request.getRequestDispatcher("/WEB-INF/student/sInformation.jsp").forward(request,response); + // 这行注释掉的代码是想调用StudentService接口中定义的findStudentById方法(由StudentServiceImpl具体实现), + // 传入前面获取到的学生对象(虽然目前未获取到实际的学生对象),目的可能是根据学生的某个标识去查找最新的学生信息,然后将查询结果赋值给newStudent变量 + +// session.setAttribute("student", newStudent); + // 此注释掉的代码是打算将前面查询到的最新学生信息(newStudent)重新设置到HttpSession对象中, + // 以更新会话中存储的学生信息,不过目前这一系列操作都没有生效 + + request.getRequestDispatcher("/WEB-INF/student/sInformation.jsp").forward(request, response); + // 使用请求转发的方式将请求转发到"/WEB-INF/student/sInformation.jsp"对应的资源(一般是一个JSP页面), + // 在转发过程中,请求对象和响应对象会被保留,客户端地址栏显示的地址不会改变,常用于在服务器内部进行页面跳转且希望保留请求相关信息的场景, + // 在这里的目的可能是跳转到展示学生信息的JSP页面 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,该方法会在客户端以GET方式发起请求时被调用 + // 此处的实现是直接调用doPost方法,意味着不管客户端是通过GET方式还是POST方式发起请求,都会执行同样的业务逻辑处理 + doPost(request, response); } -} +} \ No newline at end of file diff --git a/src/web/servlet/student/StudentInfomationUpdateServlet.java b/src/web/servlet/student/StudentInfomationUpdateServlet.java index 7080e84..b7705dc 100644 --- a/src/web/servlet/student/StudentInfomationUpdateServlet.java +++ b/src/web/servlet/student/StudentInfomationUpdateServlet.java @@ -1,76 +1,139 @@ package web.servlet.student; +// 声明该类所属的包名,表明这个Servlet类位于web.servlet.student包下,便于在项目中对代码进行分类管理和组织 import domain.Student; +// 导入Student类,它代表学生相关的领域模型类,包含学生的各种属性信息(如学号、姓名、性别等),用于创建学生对象以及传递学生相关数据 import service.StudentService; +// 导入StudentService接口,该接口定义了与学生相关业务操作的方法,例如更新学生信息、根据学号查找学生等,是对学生业务逻辑的抽象描述 import service.impl.StudentServiceImpl; +// 导入StudentServiceImpl类,它是StudentService接口的具体实现类,用于提供具体的学生业务逻辑实现,比如具体执行更新学生信息、查找学生等操作 import javax.servlet.ServletException; +// 导入ServletException类,用于捕获和处理在Servlet执行过程中出现的异常情况,确保程序在出现异常时能合理应对,增强程序的健壮性 import javax.servlet.annotation.WebServlet; +// 导入WebServlet注解,通过这个注解可以方便地将一个普通Java类声明为Servlet,并配置其对外访问的路径等相关信息 import javax.servlet.http.HttpServlet; +// 导入HttpServlet类,它是所有基于HTTP协议的Servlet的基类,自定义的Servlet类通常需要继承它来实现相应的功能,以处理HTTP请求和响应 import javax.servlet.http.HttpServletRequest; +// 导入HttpServletRequest类,用于获取HTTP请求中的各种信息,例如请求参数、请求头以及客户端相关的其他信息等 import javax.servlet.http.HttpServletResponse; +// 导入HttpServletResponse类,用于向客户端发送HTTP响应,像设置响应状态码、响应头以及响应内容(如页面、数据等) import javax.servlet.http.HttpSession; +// 导入HttpSession类,用于在服务器端管理用户的会话信息,能够实现跨多个请求之间的数据共享,在这里用于获取、更新存储在会话中的学生信息 import java.io.IOException; +// 导入IOException类,用于处理输入输出相关的异常情况,常见于读写文件、网络通信等操作出现异常时进行捕获和处理 import java.text.SimpleDateFormat; +// 导入SimpleDateFormat类,用于格式化日期时间的显示格式,在这里用于将日期时间按照特定格式转换为字符串,便于生成提示信息中的时间戳部分 import java.util.Date; +// 导入Date类,用于获取当前的日期和时间信息,配合SimpleDateFormat类来生成格式化后的时间字符串 @WebServlet("/studentInfomationUpdateServlet") +// 使用WebServlet注解声明该类是一个Servlet,并指定其访问路径为"/studentInfomationUpdateServlet", +// 意味着客户端可以通过这个路径来访问该Servlet所提供的服务 public class StudentInfomationUpdateServlet extends HttpServlet { + // 定义StudentInfomationUpdateServlet类,它继承自HttpServlet类,表明它是一个用于处理HTTP请求的Servlet类 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,该方法会在客户端以POST方式发起请求时被调用 + // request参数用于接收此次HTTP请求相关的所有信息 + // response参数用于向客户端返回对应的HTTP响应信息 request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",目的是确保能够正确解析包含中文等特殊字符的请求参数,避免出现参数解析乱码的问题 - //保存输入内容 + // 保存输入内容 String sid = request.getParameter("student-id"); + // 从HTTP请求中获取名为"student-id"的参数值,通常该参数代表学生的学号,并将其赋值给sid变量,若请求中不存在该参数,则返回null String name = request.getParameter("student-name"); + // 获取名为"student-name"的参数值,一般对应学生的姓名,赋值给name变量 String sex = request.getParameter("student-sex"); + // 获取名为"student-sex"的参数值,对应学生的性别信息,赋值给sex变量 String age = request.getParameter("student-age"); + // 获取名为"student-age"的参数值,代表学生的年龄信息,赋值给age变量 String phone = request.getParameter("student-phone"); + // 获取名为"student-phone"的参数值,即学生的电话号码信息,赋值给phone变量 String email = request.getParameter("student-email"); + // 获取名为"student-email"的参数值,为学生的电子邮箱地址信息,赋值给email变量 String address = request.getParameter("student-address"); + // 获取名为"student-address"的参数值,代表学生的家庭住址等地址信息,赋值给address变量 String college = request.getParameter("selectCollege"); + // 获取名为"selectCollege"的参数值,可能是学生所在学院的相关信息,赋值给college变量 String department = request.getParameter("selectDepartment"); + // 获取名为"selectDepartment"的参数值,大概是学生所在系部的信息,赋值给department变量 String cclass = request.getParameter("selectClass"); + // 获取名为"selectClass"的参数值,应该是学生所在班级的相关信息,赋值给cclass变量 Student updateStudent = new Student(); + // 创建一个新的Student对象,用于封装要更新的学生信息,后续会将从请求中获取到的各个参数值设置到这个对象的相应属性中 - - //判断输入位数是否大于数据库位数 - if (name.length() > 4 || phone.length() > 11 || email.length()>24 || address.length() > 24 || age.length()>2 || name.contains("<") || phone.contains("<") || email.contains("<") || address.contains("<") || age.contains("<")) { - request.setAttribute("update_msg","格式错误,请重新提交!"+String.format("%tT",new Date())); - + // 判断输入位数是否大于数据库位数 + if (name.length() > 4 || phone.length() > 11 || email.length() > 24 || address.length() > 24 || age.length() > 2 || name.contains("<") || phone.contains("<") || email.contains("<") || address.contains("<") || age.contains("<")) { + // 检查从请求中获取到的学生信息相关参数的合法性,例如姓名长度是否超过数据库规定的4位、电话号码是否超过11位、邮箱地址是否超过24位等, + // 或者是否包含不合法的字符(这里以"<"为例进行简单判断),如果有不符合要求的情况 + request.setAttribute("update_msg", "格式错误,请重新提交!" + String.format("%tT", new Date())); + // 在请求对象中设置一个名为"update_msg"的属性,属性值为提示信息字符串,包含格式错误的提示以及当前的时间戳(通过String.format("%tT", new Date())生成时间格式为HH:MM:SS的字符串) request.getRequestDispatcher("/WEB-INF/student/sInformation.jsp").forward(request, response); + // 使用请求转发的方式将请求转发到"/WEB-INF/student/sInformation.jsp"对应的资源(一般是一个JSP页面), + // 在转发过程中,请求对象和响应对象会被保留,客户端地址栏显示的地址不会改变,常用于在服务器内部进行页面跳转且希望保留请求相关信息的场景, + // 这里是当格式错误时跳转到相应页面提示用户重新提交 // response.sendRedirect("studentInfomationServlet"); - }else { - //封装学生对象 + // 这行代码被注释掉了,它的作用是使用重定向的方式将客户端请求重定向到"studentInfomationServlet"对应的资源。 + // 重定向会让客户端发起一个新的请求,地址栏会显示新的请求路径,和请求转发有所不同,在这里当前未采用这种方式 + } else { + // 封装学生对象 updateStudent.setS_id(sid); + // 将从请求中获取到的学号(sid)设置到updateStudent对象的S_id属性中,完成学生学号信息的封装 updateStudent.setS_name(name); + // 设置学生姓名属性 updateStudent.setS_sex(sex); + // 设置学生性别属性 updateStudent.setS_age(age); + // 设置学生年龄属性 updateStudent.setS_phone(phone); + // 设置学生电话号码属性 updateStudent.setS_email(email); + // 设置学生电子邮箱属性 updateStudent.setS_address(address); + // 设置学生地址属性 updateStudent.setS_college(college); + // 设置学生所在学院属性 updateStudent.setS_department(department); + // 设置学生所在系部属性 updateStudent.setS_class(cclass); + // 设置学生所在班级属性,至此完成了对要更新的学生对象的所有属性封装 - //调用studentUpdata服务 - StudentService service= new StudentServiceImpl(); + // 调用studentUpdata服务 + StudentService service = new StudentServiceImpl(); + // 创建一个StudentServiceImpl类的实例,它实现了StudentService接口,通过这个实例可以调用具体的与学生相关的业务方法 service.updateInfo(updateStudent); + // 调用StudentService接口中定义的updateInfo方法(由StudentServiceImpl具体实现),传入封装好的要更新信息的学生对象(updateStudent), + // 执行更新学生信息的业务操作,一般会将更新后的数据保存到数据库等存储介质中 HttpSession session = request.getSession(); + // 获取当前请求对应的HttpSession对象,如果不存在则会创建一个新的会话,通过会话可以获取、更新存储在其中的学生信息等 Student s = service.findStudentById(updateStudent); - session.setAttribute("student",s); + // 调用StudentService接口中定义的findStudentById方法(由StudentServiceImpl具体实现),传入刚刚更新信息的学生对象(updateStudent), + // 目的是从数据库等存储介质中重新获取更新后的学生完整信息,并将其赋值给s变量 - //成功则返回并给提示 - request.setAttribute("update_msg", "修改成功!"+String.format("%tT",new Date())); - request.setAttribute("student",updateStudent); + session.setAttribute("student", s); + // 将重新获取到的更新后的学生信息(s)设置到HttpSession对象中,以更新会话中存储的学生信息,方便后续其他操作能获取到最新的学生数据 + + // 成功则返回并给提示 + request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); + // 在请求对象中设置一个名为"update_msg"的属性,属性值为修改成功的提示信息字符串,同样包含当前的时间戳(通过String.format("%tT", new Date())生成时间格式为HH:MM:SS的字符串) + request.setAttribute("student", updateStudent); + // 再次将更新后的学生对象(updateStudent)设置到请求对象中,可能在转发后的页面中会用到该对象展示更新后的详细信息 request.getRequestDispatcher("/WEB-INF/student/sInformation.jsp").forward(request, response); + // 使用请求转发的方式将请求转发到"/WEB-INF/student/sInformation.jsp"对应的资源(一般是一个JSP页面), + // 目的是在修改成功后跳转到相应页面展示相关提示信息以及可能的学生详细信息 } + } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,该方法会在客户端以GET方式发起请求时被调用 + // 此处的实现是直接调用doPost方法,意味着不管客户端是通过GET方式还是POST方式发起请求,都会执行同样的业务逻辑处理 + doPost(request, response); } -} +} \ No newline at end of file diff --git a/src/web/servlet/student/StudentListServlet.java b/src/web/servlet/student/StudentListServlet.java index 1a531ae..bc578a3 100644 --- a/src/web/servlet/student/StudentListServlet.java +++ b/src/web/servlet/student/StudentListServlet.java @@ -1,47 +1,100 @@ package web.servlet.student; +// 声明该类所属的包名,表明这个Servlet类位于web.servlet.student包下,便于在项目中对代码进行分类管理和组织 import domain.Admin; +// 导入Admin类,代表管理员相关的领域模型类,包含管理员的各种属性信息,在这里用于判断当前登录用户是否为管理员角色 import domain.Student; +// 导入Student类,代表学生相关的领域模型类,包含学生的各种属性信息,既用于查询学生信息列表,也用于判断当前登录用户是否为学生角色 import domain.Teacher; +// 导入Teacher类,代表教师相关的领域模型类,包含教师的各种属性信息,用于判断当前登录用户是否为教师角色 import service.StudentService; +// 导入StudentService接口,该接口定义了与学生相关业务操作的方法,例如查询所有学生信息等,是对学生业务逻辑的抽象描述 import service.impl.StudentServiceImpl; +// 导入StudentServiceImpl类,它是StudentService接口的具体实现类,用于提供具体的学生业务逻辑实现,比如具体执行查询所有学生信息的操作 import javax.servlet.ServletException; +// 导入ServletException类,用于捕获和处理在Servlet执行过程中出现的异常情况,确保程序在出现异常时能合理应对,增强程序的健壮性 import javax.servlet.annotation.WebServlet; +// 导入WebServlet注解,通过这个注解可以方便地将一个普通Java类声明为Servlet,并配置其对外访问的路径等相关信息 import javax.servlet.http.HttpServlet; +// 导入HttpServlet类,它是所有基于HTTP协议的Servlet的基类,自定义的Servlet类通常需要继承它来实现相应的功能,以处理HTTP请求和响应 import javax.servlet.http.HttpServletRequest; +// 导入HttpServletRequest类,用于获取HTTP请求中的各种信息,例如请求参数、请求头以及客户端相关的其他信息等 import javax.servlet.http.HttpServletResponse; +// 导入HttpServletResponse类,用于向客户端发送HTTP响应,像设置响应状态码、响应头以及响应内容(如页面、数据等) import javax.servlet.http.HttpSession; +// 导入HttpSession类,用于在服务器端管理用户的会话信息,能够实现跨多个请求之间的数据共享,在这里用于获取当前登录用户的角色信息(学生、管理员、教师) import java.io.IOException; +// 导入IOException类,用于处理输入输出相关的异常情况,常见于读写文件、网络通信等操作出现异常时进行捕获和处理 import java.util.List; +// 导入List接口,用于处理和操作有序的元素集合,在这里用于存储查询到的所有学生信息列表 @WebServlet("/studentListServlet") +// 使用WebServlet注解声明该类是一个Servlet,并指定其访问路径为"/studentListServlet", +// 意味着客户端可以通过这个路径来访问该Servlet所提供的服务 public class StudentListServlet extends HttpServlet { + // 定义StudentListServlet类,它继承自HttpServlet类,表明它是一个用于处理HTTP请求的Servlet类 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - //调用StudentService完成查询 + // 重写HttpServlet类中的doPost方法,该方法会在客户端以POST方式发起请求时被调用 + // request参数用于接收此次HTTP请求相关的所有信息 + // response参数用于向客户端返回对应的HTTP响应信息 + + // 调用StudentService完成查询 StudentService studentService = new StudentServiceImpl(); + // 创建一个StudentServiceImpl类的实例,它实现了StudentService接口,通过这个实例可以调用具体的与学生相关的业务方法 List students = studentService.findAll(); - //将list存入request域 - request.setAttribute("students",students); + // 调用StudentService接口中定义的findAll方法(由StudentServiceImpl具体实现),查询所有学生的信息, + // 将查询结果以List类型返回,即得到一个包含所有学生对象的列表,并赋值给students变量 + + // 将list存入request域 + request.setAttribute("students", students); + // 将查询到的学生信息列表(students)设置到请求对象(request)的属性中,属性名为"students", + // 这样在后续转发到的页面(如JSP页面)中就可以通过该属性名获取到学生信息列表进行展示等操作 request.setCharacterEncoding("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对象,如果不存在则会创建一个新的会话,通过会话对象可以获取之前存储在会话中的用户相关信息, + // 在这里主要用于获取当前登录用户的角色信息(学生、管理员、教师) + + Student student = (Student) session.getAttribute("student"); + // 从HttpSession对象中获取名为"student"的属性值,并将其强制转换为Student类型,这个属性值如果存在,代表当前登录用户是学生角色, + // 若不存在则返回null,通过它来判断当前登录用户是否为学生 + + Admin admin = (Admin) session.getAttribute("admin"); + // 同理,从会话中获取名为"admin"的属性值并转换为Admin类型,用于判断当前登录用户是否为管理员角色,不存在则返回null + + Teacher teacher = (Teacher) session.getAttribute("teacher"); + // 从会话中获取名为"teacher"的属性值并转换为Teacher类型,用于判断当前登录用户是否为教师角色,不存在则返回null + + if (student!= null && admin == null && teacher == null) { + // 如果从会话中获取到的学生对象不为空,且管理员对象和教师对象都为空,说明当前登录用户是学生角色 request.getRequestDispatcher("/WEB-INF/student/studentList.jsp").forward(request, response); - } else if (admin != null && student == null && teacher == null) { + // 使用请求转发的方式将请求转发到"/WEB-INF/student/studentList.jsp"对应的资源(一般是一个JSP页面), + // 在转发过程中,请求对象和响应对象会被保留,客户端地址栏显示的地址不会改变,常用于在服务器内部进行页面跳转且希望保留请求相关信息的场景, + // 这里是将学生角色的用户请求转发到展示学生列表信息的JSP页面 + } else if (admin!= null && student == null && teacher == null) { + // 如果管理员对象不为空,学生对象和教师对象都为空,说明当前登录用户是管理员角色 request.getRequestDispatcher("/WEB-INF/admin/aFindStudentList.jsp").forward(request, response); - } else if (teacher != null && admin == null && student == null) { + // 使用请求转发的方式将请求转发到"/WEB-INF/admin/aFindStudentList.jsp"对应的资源(一般是一个JSP页面), + // 是将管理员角色的用户请求转发到适合管理员查看学生列表信息的JSP页面 + } else if (teacher!= null && admin == null && student == null) { + // 如果教师对象不为空,管理员对象和学生对象都为空,说明当前登录用户是教师角色 request.getRequestDispatcher("/WEB-INF/teacher/tFindStudentList.jsp").forward(request, response); + // 使用请求转发的方式将请求转发到"/WEB-INF/teacher/tFindStudentList.jsp"对应的资源(一般是一个JSP页面), + // 把教师角色的用户请求转发到适合教师查看学生列表信息的JSP页面 } else { request.getRequestDispatcher("error.jsp").forward(request, response); + // 如果以上角色判断都不符合,说明可能出现了异常情况或者未预期的登录状态, + // 则使用请求转发的方式将请求转发到"error.jsp"对应的资源(一般是一个显示错误信息的JSP页面) } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - this.doPost(request,response); + // 重写HttpServlet类中的doGet方法,该方法会在客户端以GET方式发起请求时被调用 + // 此处的实现是直接调用doPost方法,意味着不管客户端是通过GET方式还是POST方式发起请求,都会执行同样的业务逻辑处理 + this.doPost(request, response); } -} +} \ No newline at end of file diff --git a/src/web/servlet/student/StudentOptionalCourseServlet.java b/src/web/servlet/student/StudentOptionalCourseServlet.java index caefc67..209b533 100644 --- a/src/web/servlet/student/StudentOptionalCourseServlet.java +++ b/src/web/servlet/student/StudentOptionalCourseServlet.java @@ -1,47 +1,97 @@ package web.servlet.student; +// 声明该类所属的包名,表明这个Servlet类位于web.servlet.student包下,便于在项目中对代码进行分类管理和组织 import domain.Admin; +// 导入Admin类,代表管理员相关的领域模型类,包含管理员的各种属性信息,在这里用于判断当前登录用户的角色是否为管理员 import domain.Course; +// 导入Course类,代表课程相关的领域模型类,包含课程的各种属性信息(如课程名称、课程编号等),用于存储查询到的可选课程信息 import domain.SelectCourse; +// 导入SelectCourse类,通常表示学生选课相关的领域模型类,不过在当前代码展示的主要逻辑中暂未直接使用它进行核心操作 import domain.Student; +// 导入Student类,代表学生相关的领域模型类,包含学生的各种属性信息,用于判断当前登录用户是否为学生角色以及获取学生相关信息 import service.StudentService; +// 导入StudentService接口,该接口定义了与学生相关业务操作的方法,例如查询所有可选课程等,是对学生业务逻辑的抽象描述 import service.impl.StudentServiceImpl; +// 导入StudentServiceImpl类,它是StudentService接口的具体实现类,用于提供具体的学生业务逻辑实现,比如具体执行查询所有可选课程的操作 import javax.servlet.ServletException; +// 导入ServletException类,用于捕获和处理在Servlet执行过程中出现的异常情况,确保程序在出现异常时能合理应对,增强程序的健壮性 import javax.servlet.annotation.WebServlet; +// 导入WebServlet注解,通过这个注解可以方便地将一个普通Java类声明为Servlet,并配置其对外访问的路径等相关信息 import javax.servlet.http.HttpServlet; +// 导入HttpServlet类,它是所有基于HTTP协议的Servlet的基类,自定义的Servlet类通常需要继承它来实现相应的功能,以处理HTTP请求和响应 import javax.servlet.http.HttpServletRequest; +// 导入HttpServletRequest类,用于获取HTTP请求中的各种信息,例如请求参数、请求头以及客户端相关的其他信息等 import javax.servlet.http.HttpServletResponse; +// 导入HttpServletResponse类,用于向客户端发送HTTP响应,像设置响应状态码、响应头以及响应内容(如页面、数据等) import javax.servlet.http.HttpSession; +// 导入HttpSession类,用于在服务器端管理用户的会话信息,能够实现跨多个请求之间的数据共享,在这里用于获取当前登录用户的角色信息(学生或管理员) import java.io.IOException; +// 导入IOException类,用于处理输入输出相关的异常情况,常见于读写文件、网络通信等操作出现异常时进行捕获和处理 import java.util.List; +// 导入List接口,用于处理和操作有序的元素集合,在这里用于存储查询到的所有可选课程信息列表 @WebServlet("/studentOptionalCourseServlet") +// 使用WebServlet注解声明该类是一个Servlet,并指定其访问路径为"/studentOptionalCourseServlet", +// 意味着客户端可以通过这个路径来访问该Servlet所提供的服务 public class StudentOptionalCourseServlet extends HttpServlet { + // 定义StudentOptionalCourseServlet类,它继承自HttpServlet类,表明它是一个用于处理HTTP请求的Servlet类 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,该方法会在客户端以POST方式发起请求时被调用 + // request参数用于接收此次HTTP请求相关的所有信息 + // response参数用于向客户端返回对应的HTTP响应信息 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",目的是确保能够正确解析包含中文等特殊字符的请求参数,避免出现参数解析乱码的问题 + HttpSession session = request.getSession(); - Student student= (Student)session.getAttribute("student"); - Admin admin =(Admin)session.getAttribute("admin"); + // 获取当前请求对应的HttpSession对象,如果不存在则会创建一个新的会话,通过会话对象可以获取之前存储在会话中的用户相关信息, + // 在这里主要用于获取当前登录用户的角色信息(学生或管理员) + + Student student = (Student) session.getAttribute("student"); + // 从HttpSession对象中获取名为"student"的属性值,并将其强制转换为Student类型,这个属性值如果存在,代表当前登录用户是学生角色, + // 若不存在则返回null,通过它来判断当前登录用户是否为学生 - //调用StudentService完成查询 + Admin admin = (Admin) session.getAttribute("admin"); + // 同理,从会话中获取名为"admin"的属性值并转换为Admin类型,用于判断当前登录用户是否为管理员角色,不存在则返回null + + // 调用StudentService完成查询 StudentService studentService = new StudentServiceImpl(); + // 创建一个StudentServiceImpl类的实例,它实现了StudentService接口,通过这个实例可以调用具体的与学生相关的业务方法 + List optionalcourses = studentService.findAllOptionalCourse(); - //将list存入request域 - request.setAttribute("optionalcourses",optionalcourses); - //转发到list.jsp + // 调用StudentService接口中定义的findAllOptionalCourse方法(由StudentServiceImpl具体实现),查询所有可选课程的信息, + // 将查询结果以List类型返回,即得到一个包含所有可选课程对象的列表,并赋值给optionalcourses变量 + + // 将list存入request域 + request.setAttribute("optionalcourses", optionalcourses); + // 将查询到的可选课程信息列表(optionalcourses)设置到请求对象(request)的属性中,属性名为"optionalcourses", + // 这样在后续转发到的页面(如JSP页面)中就可以通过该属性名获取到可选课程列表进行展示等操作 - if (student != null && admin == null) { - request.getRequestDispatcher("/WEB-INF/student/studentOptionalCourse.jsp").forward(request,response); - } else if (admin != null && student == null) { + // 转发到list.jsp + if (student!= null && admin == null) { + // 如果从会话中获取到的学生对象不为空,且管理员对象为空,说明当前登录用户是学生角色 + request.getRequestDispatcher("/WEB-INF/student/studentOptionalCourse.jsp").forward(request, response); + // 使用请求转发的方式将请求转发到"/WEB-INF/student/studentOptionalCourse.jsp"对应的资源(一般是一个JSP页面), + // 在转发过程中,请求对象和响应对象会被保留,客户端地址栏显示的地址不会改变,常用于在服务器内部进行页面跳转且希望保留请求相关信息的场景, + // 这里是将学生角色的用户请求转发到展示学生可选课程信息的JSP页面 + } else if (admin!= null && student == null) { + // 如果管理员对象不为空,学生对象为空,说明当前登录用户是管理员角色 request.getRequestDispatcher("/WEB-INF/admin/allStudentOptionalCourse.jsp").forward(request, response); + // 使用请求转发的方式将请求转发到"/WEB-INF/admin/allStudentOptionalCourse.jsp"对应的资源(一般是一个JSP页面), + // 是将管理员角色的用户请求转发到适合管理员查看所有学生可选课程信息的JSP页面 } else { request.getRequestDispatcher("error.jsp").forward(request, response); + // 如果以上角色判断都不符合,说明可能出现了异常情况或者未预期的登录状态, + // 则使用请求转发的方式将请求转发到"error.jsp"对应的资源(一般是一个显示错误信息的JSP页面) } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - this.doPost(request,response); + // 重写HttpServlet类中的doGet方法,该方法会在客户端以GET方式发起请求时被调用 + // 此处的实现是直接调用doPost方法,意味着不管客户端是通过GET方式还是POST方式发起请求,都会执行同样的业务逻辑处理 + this.doPost(request, response); } -} +} \ No newline at end of file diff --git a/src/web/servlet/student/StudentPasswordIndexServlet.java b/src/web/servlet/student/StudentPasswordIndexServlet.java index 8f026ea..cb365a1 100644 --- a/src/web/servlet/student/StudentPasswordIndexServlet.java +++ b/src/web/servlet/student/StudentPasswordIndexServlet.java @@ -1,19 +1,39 @@ package web.servlet.student; +// 声明该类所属的包名,表明这个Servlet类位于web.servlet.student包下,便于在项目中对代码进行分类管理和组织 import javax.servlet.ServletException; +// 导入ServletException类,用于捕获和处理在Servlet执行过程中出现的异常情况,确保程序在出现异常时能合理应对,增强程序的健壮性 import javax.servlet.annotation.WebServlet; +// 导入WebServlet注解,通过这个注解可以方便地将一个普通Java类声明为Servlet,并配置其对外访问的路径等相关信息 import javax.servlet.http.HttpServlet; +// 导入HttpServlet类,它是所有基于HTTP协议的Servlet的基类,自定义的Servlet类通常需要继承它来实现相应的功能,以处理HTTP请求和响应 import javax.servlet.http.HttpServletRequest; +// 导入HttpServletRequest类,用于获取HTTP请求中的各种信息,例如请求参数、请求头以及客户端相关的其他信息等 import javax.servlet.http.HttpServletResponse; +// 导入HttpServletResponse类,用于向客户端发送HTTP响应,像设置响应状态码、响应头以及响应内容(如页面、数据等) import java.io.IOException; +// 导入IOException类,用于处理输入输出相关的异常情况,常见于读写文件、网络通信等操作出现异常时进行捕获和处理 @WebServlet("/studentPasswordIndexServlet") +// 使用WebServlet注解声明该类是一个Servlet,并指定其访问路径为"/studentPasswordIndexServlet", +// 意味着客户端可以通过这个路径来访问该Servlet所提供的服务 public class StudentPasswordIndexServlet extends HttpServlet { + // 定义StudentPasswordIndexServlet类,它继承自HttpServlet类,表明它是一个用于处理HTTP请求的Servlet类 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request,response); + // 重写HttpServlet类中的doPost方法,该方法会在客户端以POST方式发起请求时被调用 + // request参数用于接收此次HTTP请求相关的所有信息 + // response参数用于向客户端返回对应的HTTP响应信息 + + request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); + // 使用请求转发的方式将请求转发到"/WEB-INF/student/studentUpdatePassword.jsp"对应的资源(一般是一个JSP页面), + // 在转发过程中,请求对象和响应对象会被保留,客户端地址栏显示的地址不会改变,常用于在服务器内部进行页面跳转且希望保留请求相关信息的场景, + // 在这里的作用是当客户端以POST方式访问该Servlet时,将请求转发到用于学生更新密码的JSP页面 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,该方法会在客户端以GET方式发起请求时被调用 + // 此处的实现是直接调用doPost方法,意味着不管客户端是通过GET方式还是POST方式发起请求,都会执行同样的业务逻辑处理 + doPost(request, response); } -} +} \ No newline at end of file diff --git a/src/web/servlet/student/StudentPasswordUpdateServlet.java b/src/web/servlet/student/StudentPasswordUpdateServlet.java index 3fa2b5d..57ed4fa 100644 --- a/src/web/servlet/student/StudentPasswordUpdateServlet.java +++ b/src/web/servlet/student/StudentPasswordUpdateServlet.java @@ -1,52 +1,116 @@ package web.servlet.student; +// 声明该类所属的包名,表明这个Servlet类位于web.servlet.student包下,便于在项目中对代码进行分类管理和组织 import domain.Student; +// 导入Student类,它代表学生相关的领域模型类,包含学生的各种属性信息(如学号、姓名等),在这里用于获取学生对象以及更新学生密码相关操作 import service.StudentService; +// 导入StudentService接口,该接口定义了与学生相关业务操作的方法,例如更新学生密码、根据学号查找学生等,是对学生业务逻辑的抽象描述 import service.impl.StudentServiceImpl; +// 导入StudentServiceImpl类,它是StudentService接口的具体实现类,用于提供具体的学生业务逻辑实现,比如具体执行更新学生密码、查找学生的操作 import javax.servlet.ServletException; +// 导入ServletException类,用于捕获和处理在Servlet执行过程中出现的异常情况,确保程序在出现异常时能合理应对,增强程序的健壮性 import javax.servlet.annotation.WebServlet; +// 导入WebServlet注解,通过这个注解可以方便地将一个普通Java类声明为Servlet,并配置其对外访问的路径等相关信息 import javax.servlet.http.HttpServlet; +// 导入HttpServlet类,它是所有基于HTTP协议的Servlet的基类,自定义的Servlet类通常需要继承它来实现相应的功能,以处理HTTP请求和响应 import javax.servlet.http.HttpServletRequest; +// 导入HttpServletRequest类,用于获取HTTP请求中的各种信息,例如请求参数、请求头以及客户端相关的其他信息等 import javax.servlet.http.HttpServletResponse; +// 导入HttpServletResponse类,用于向客户端发送HTTP响应,像设置响应状态码、响应头以及响应内容(如页面、数据等) import javax.servlet.http.HttpSession; +// 导入HttpSession类,用于在服务器端管理用户的会话信息,能够实现跨多个请求之间的数据共享,在这里用于获取当前登录学生的信息以及更新会话中存储的学生信息 import java.io.IOException; +// 导入IOException类,用于处理输入输出相关的异常情况,常见于读写文件、网络通信等操作出现异常时进行捕获和处理 import java.util.Date; +// 导入Date类,用于获取当前的日期和时间信息,配合格式化字符串用于生成包含时间戳的提示信息 @WebServlet("/studentPasswordUpdateServlet") +// 使用WebServlet注解声明该类是一个Servlet,并指定其访问路径为"/studentPasswordUpdateServlet", +// 意味着客户端可以通过这个路径来访问该Servlet所提供的服务 public class StudentPasswordUpdateServlet extends HttpServlet { + // 定义StudentPasswordUpdateServlet类,它继承自HttpServlet类,表明它是一个用于处理HTTP请求的Servlet类 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,该方法会在客户端以POST方式发起请求时被调用 + // request参数用于接收此次HTTP请求相关的所有信息 + // response参数用于向客户端返回对应的HTTP响应信息 + request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",目的是确保能够正确解析包含中文等特殊字符的请求参数,避免出现参数解析乱码的问题 + HttpSession session = request.getSession(); - Student student= (Student)session.getAttribute("student"); + // 获取当前请求对应的HttpSession对象,如果不存在则会创建一个新的会话,通过会话对象可以获取之前存储在会话中的用户相关信息, + // 在这里主要是获取当前登录的学生信息 + + Student student = (Student) session.getAttribute("student"); + // 从HttpSession对象中获取名为"student"的属性值,并将其强制转换为Student类型,这个属性值代表当前登录的学生对象, + // 若不存在则返回null,通过它来获取学生的相关属性等信息 String studentid = student.getS_id(); + // 通过获取到的学生对象student,调用其getS_id()方法获取学生的学号,并赋值给studentid变量, + // 后续会用该学号来标识要更新密码的学生,用于调用服务层方法更新密码 + String newpassword = request.getParameter("student-newpassword"); + // 从HTTP请求中获取名为"student-newpassword"的参数值,该参数代表用户输入的新密码,并将其赋值给newpassword变量, + // 如果请求中不存在该参数,则返回null + String ennewpassword = request.getParameter("student-ennewpassword"); + // 从请求中获取名为"student-ennewpassword"的参数值,通常用于确认新密码输入是否一致,将其赋值给ennewpassword变量 + String regex = "^[\\w]{3,12}$"; + // 定义一个正则表达式字符串regex,用于验证密码格式。这里的正则表达式表示密码必须由3到12位的单词字符(字母、数字、下划线)组成 + boolean flag = newpassword.matches(regex); + // 使用matches方法,让用户输入的新密码(newpassword)去匹配前面定义的正则表达式(regex), + // 如果匹配成功则返回true,表示密码格式正确,否则返回false + if (!flag) { - request.setAttribute("update_msg", "密码格式错误,重新提交!"+String.format("%tT",new Date())); + // 如果flag为false,即密码格式不符合要求 + request.setAttribute("update_msg", "密码格式错误,重新提交!" + String.format("%tT", new Date())); + // 在请求对象中设置一个名为"update_msg"的属性,属性值为提示信息字符串,包含密码格式错误的提示以及当前的时间戳(通过String.format("%tT", new Date())生成时间格式为HH:MM:SS的字符串) request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); + // 使用请求转发的方式将请求转发到"/WEB-INF/student/studentUpdatePassword.jsp"对应的资源(一般是一个JSP页面), + // 在转发过程中,请求对象和响应对象会被保留,客户端地址栏显示的地址不会改变,常用于在服务器内部进行页面跳转且希望保留请求相关信息的场景, + // 这里是当密码格式错误时跳转到密码更新页面提示用户重新提交 } else if (!newpassword.equals(ennewpassword)) { + // 如果密码格式正确,但新密码和确认密码不一致 request.setAttribute("update_msg", "密码确认错误,请重新提交!" + String.format("%tT", new Date())); + // 设置提示信息属性,提示密码确认有误以及当前时间戳 request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); + // 同样转发到密码更新页面,让用户重新提交 } else { + // 如果密码格式正确且新密码和确认密码一致 + + StudentService service = new StudentServiceImpl(); + // 创建一个StudentServiceImpl类的实例,它实现了StudentService接口,通过这个实例可以调用具体的与学生相关的业务方法 - StudentService service= new StudentServiceImpl(); - service.updatePassword(studentid,newpassword); + service.updatePassword(studentid, newpassword); + // 调用StudentService接口中定义的updatePassword方法(由StudentServiceImpl具体实现),传入学生学号(studentid)和新密码(newpassword), + // 执行更新学生密码的业务操作,一般会将更新后的密码保存到数据库等存储介质中 Student newStudent = service.findStudentById(student); + // 调用StudentService接口中定义的findStudentById方法(由StudentServiceImpl具体实现),传入当前学生对象(student), + // 目的是从数据库等存储介质中重新获取更新密码后的学生完整信息,并将其赋值给newStudent变量 + student = newStudent; - session.setAttribute("student",student); + // 将更新后的学生对象赋值给原来的student变量,以便后续更新会话中的学生信息 + + session.setAttribute("student", student); + // 将更新后的学生信息(student)重新设置到HttpSession对象中,以更新会话中存储的学生信息,方便后续其他操作能获取到最新的学生数据 request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); + // 设置提示信息属性,提示密码修改成功以及当前时间戳 + request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); + // 转发到密码更新页面,展示修改成功的提示信息给用户 } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,该方法会在客户端以GET方式发起请求时被调用 + // 此处的实现是直接调用doPost方法,意味着不管客户端是通过GET方式还是POST方式发起请求,都会执行同样的业务逻辑处理 + doPost(request, response); } -} +} \ No newline at end of file diff --git a/src/web/servlet/student/StudentSelectCourseListServlet.java b/src/web/servlet/student/StudentSelectCourseListServlet.java index dd60b25..067ad3a 100644 --- a/src/web/servlet/student/StudentSelectCourseListServlet.java +++ b/src/web/servlet/student/StudentSelectCourseListServlet.java @@ -1,50 +1,107 @@ package web.servlet.student; +// 声明该类所属的包名,表明这个Servlet类位于web.servlet.student包下,便于在项目中对代码进行分类管理和组织 import domain.Admin; +// 导入Admin类,代表管理员相关的领域模型类,包含管理员的各种属性信息,用于判断当前登录用户是否为管理员角色 import domain.SelectCourse; +// 导入SelectCourse类,通常表示学生选课相关的领域模型类,包含学生选课的相关属性信息(如学生ID、课程ID、成绩等),用于存储查询到的选课信息 import domain.Student; +// 导入Student类,代表学生相关的领域模型类,包含学生的各种属性信息,用于判断当前登录用户是否为学生角色以及获取学生相关信息来查询选课情况 import domain.Teacher; +// 导入Teacher类,代表教师相关的领域模型类,虽然在当前代码逻辑中暂未直接涉及教师相关判断操作,但属于领域模型类的引入 import service.StudentService; +// 导入StudentService接口,该接口定义了与学生相关业务操作的方法,例如查询学生选课信息等,是对学生业务逻辑的抽象描述 import service.impl.StudentServiceImpl; +// 导入StudentServiceImpl类,它是StudentService接口的具体实现类,用于提供具体的学生业务逻辑实现,比如具体执行查询不同条件下学生选课信息的操作 import javax.servlet.ServletException; +// 导入ServletException类,用于捕获和处理在Servlet执行过程中出现的异常情况,确保程序在出现异常时能合理应对,增强程序的健壮性 import javax.servlet.annotation.WebServlet; +// 导入WebServlet注解,通过这个注解可以方便地将一个普通Java类声明为Servlet,并配置其对外访问的路径等相关信息 import javax.servlet.http.HttpServlet; +// 导入HttpServlet类,它是所有基于HTTP协议的Servlet的基类,自定义的Servlet类通常需要继承它来实现相应的功能,以处理HTTP请求和响应 import javax.servlet.http.HttpServletRequest; +// 导入HttpServletRequest类,用于获取HTTP请求中的各种信息,例如请求参数、请求头以及客户端相关的其他信息等 import javax.servlet.http.HttpServletResponse; +// 导入HttpServletResponse类,用于向客户端发送HTTP响应,像设置响应状态码、响应头以及响应内容(如页面、数据等) import javax.servlet.http.HttpSession; +// 导入HttpSession类,用于在服务器端管理用户的会话信息,能够实现跨多个请求之间的数据共享,在这里用于获取当前登录用户的角色信息(学生或管理员) import java.io.IOException; +// 导入IOException类,用于处理输入输出相关的异常情况,常见于读写文件、网络通信等操作出现异常时进行捕获和处理 import java.util.List; +// 导入List接口,用于处理和操作有序的元素集合,在这里用于存储查询到的学生选课信息列表 @WebServlet("/studentSelectCourseListServlet") +// 使用WebServlet注解声明该类是一个Servlet,并指定其访问路径为"/studentSelectCourseListServlet", +// 意味着客户端可以通过这个路径来访问该Servlet所提供的服务 public class StudentSelectCourseListServlet extends HttpServlet { + // 定义StudentSelectCourseListServlet类,它继承自HttpServlet类,表明它是一个用于处理HTTP请求的Servlet类 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 重写HttpServlet类中的doPost方法,该方法会在客户端以POST方式发起请求时被调用 + // request参数用于接收此次HTTP请求相关的所有信息 + // response参数用于向客户端返回对应的HTTP响应信息 request.setCharacterEncoding("utf-8"); + // 设置请求的字符编码为"utf-8",目的是确保能够正确解析包含中文等特殊字符的请求参数,避免出现参数解析乱码的问题 + HttpSession session = request.getSession(); - Student student= (Student)session.getAttribute("student"); - Admin admin =(Admin)session.getAttribute("admin"); + // 获取当前请求对应的HttpSession对象,如果不存在则会创建一个新的会话,通过会话对象可以获取之前存储在会话中的用户相关信息, + // 在这里主要用于获取当前登录用户的角色信息(学生或管理员) + + Student student = (Student) session.getAttribute("student"); + // 从HttpSession对象中获取名为"student"的属性值,并将其强制转换为Student类型,这个属性值如果存在,代表当前登录用户是学生角色, + // 若不存在则返回null,通过它来判断当前登录用户是否为学生 - //调用StudentService完成查询 + Admin admin = (Admin) session.getAttribute("admin"); + // 同理,从会话中获取名为"admin"的属性值并转换为Admin类型,用于判断当前登录用户是否为管理员角色,不存在则返回null + + // 调用StudentService完成查询 StudentService studentService = new StudentServiceImpl(); - if (student != null && admin == null) { + // 创建一个StudentServiceImpl类的实例,它实现了StudentService接口,通过这个实例可以调用具体的与学生相关的业务方法 + + if (student!= null && admin == null) { + // 如果从会话中获取到的学生对象不为空,且管理员对象为空,说明当前登录用户是学生角色 + List selectcourses = studentService.findAllSelectCourse(student.getS_id()); - //将list存入request域 - request.setAttribute("selectcourses",selectcourses); - //转发到list.jsp - request.getRequestDispatcher("/WEB-INF/student/studentSelectCourseList.jsp").forward(request,response); - } else if (admin != null && student == null) { + // 调用StudentService接口中定义的findAllSelectCourse方法(由StudentServiceImpl具体实现),传入当前学生的ID(通过student.getS_id()获取), + // 查询该学生已选的所有课程信息,将查询结果以List类型返回,即得到一个包含该学生所有选课记录对象的列表,并赋值给selectcourses变量 + + // 将list存入request域 + request.setAttribute("selectcourses", selectcourses); + // 将查询到的学生选课信息列表(selectcourses)设置到请求对象(request)的属性中,属性名为"selectcourses", + // 这样在后续转发到的页面(如JSP页面)中就可以通过该属性名获取到选课列表进行展示等操作 + + // 转发到list.jsp + request.getRequestDispatcher("/WEB-INF/student/studentSelectCourseList.jsp").forward(request, response); + // 使用请求转发的方式将请求转发到"/WEB-INF/student/studentSelectCourseList.jsp"对应的资源(一般是一个JSP页面), + // 在转发过程中,请求对象和响应对象会被保留,客户端地址栏显示的地址不会改变,常用于在服务器内部进行页面跳转且希望保留请求相关信息的场景, + // 这里是将学生角色的用户请求转发到展示该学生自己选课列表信息的JSP页面 + } else if (admin!= null && student == null) { + // 如果管理员对象不为空,学生对象为空,说明当前登录用户是管理员角色 + List selectcourses = studentService.findSelectCourseAllStudent(); + // 调用StudentService接口中定义的findSelectCourseAllStudent方法(由StudentServiceImpl具体实现), + // 查询所有学生的选课信息,将查询结果以List类型返回,得到一个包含所有学生选课记录对象的列表,并赋值给selectcourses变量 + request.setAttribute("selectcourses", selectcourses); + // 将查询到的所有学生选课信息列表(selectcourses)设置到请求对象(request)的属性中 + request.getRequestDispatcher("/WEB-INF/admin/allStudentSelectCourseList.jsp").forward(request, response); + // 使用请求转发的方式将请求转发到"/WEB-INF/admin/allStudentSelectCourseList.jsp"对应的资源(一般是一个JSP页面), + // 是将管理员角色的用户请求转发到适合管理员查看所有学生选课列表信息的JSP页面 } else { request.getRequestDispatcher("error.jsp").forward(request, response); + // 如果以上角色判断都不符合,说明可能出现了异常情况或者未预期的登录状态, + // 则使用请求转发的方式将请求转发到"error.jsp"对应的资源(一般是一个显示错误信息的JSP页面) } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - this.doPost(request,response); + // 重写HttpServlet类中的doGet方法,该方法会在客户端以GET方式发起请求时被调用 + // 此处的实现是直接调用doPost方法,意味着不管客户端是通过GET方式还是POST方式发起请求,都会执行同样的业务逻辑处理 + this.doPost(request, response); } -} +} \ No newline at end of file diff --git a/src/web/servlet/student/StudentServlet.java b/src/web/servlet/student/StudentServlet.java index 1f83341..1c7582e 100644 --- a/src/web/servlet/student/StudentServlet.java +++ b/src/web/servlet/student/StudentServlet.java @@ -1,19 +1,39 @@ package web.servlet.student; +// 声明该类所属的包名,表明这个Servlet类位于web.servlet.student包下,便于在项目中对代码进行分类管理和组织 import javax.servlet.ServletException; +// 导入ServletException类,用于捕获和处理在Servlet执行过程中出现的异常情况,确保程序在出现异常时能合理应对,增强程序的健壮性 import javax.servlet.annotation.WebServlet; +// 导入WebServlet注解,通过这个注解可以方便地将一个普通Java类声明为Servlet,并配置其对外访问的路径等相关信息 import javax.servlet.http.HttpServlet; +// 导入HttpServlet类,它是所有基于HTTP协议的Servlet的基类,自定义的Servlet类通常需要继承它来实现相应的功能,以处理HTTP请求和响应 import javax.servlet.http.HttpServletRequest; +// 导入HttpServletRequest类,用于获取HTTP请求中的各种信息,例如请求参数、请求头以及客户端相关的其他信息等 import javax.servlet.http.HttpServletResponse; +// 导入HttpServletResponse类,用于向客户端发送HTTP响应,像设置响应状态码、响应头以及响应内容(如页面、数据等) import java.io.IOException; +// 导入IOException类,用于处理输入输出相关的异常情况,常见于读写文件、网络通信等操作出现异常时进行捕获和处理 @WebServlet("/studentServlet") +// 使用WebServlet注解声明该类是一个Servlet,并指定其访问路径为"/studentServlet", +// 意味着客户端可以通过这个路径来访问该Servlet所提供的服务 public class StudentServlet extends HttpServlet { + // 定义StudentServlet类,它继承自HttpServlet类,表明它是一个用于处理HTTP请求的Servlet类 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - request.getRequestDispatcher("/WEB-INF/student/sIndex.jsp").forward(request,response); + // 重写HttpServlet类中的doPost方法,该方法会在客户端以POST方式发起请求时被调用 + // request参数用于接收此次HTTP请求相关的所有信息 + // response参数用于向客户端返回对应的HTTP响应信息 + + request.getRequestDispatcher("/WEB-INF/student/sIndex.jsp").forward(request, response); + // 使用请求转发的方式将请求转发到"/WEB-INF/student/sIndex.jsp"对应的资源(一般是一个JSP页面), + // 在转发过程中,请求对象和响应对象会被保留,客户端地址栏显示的地址不会改变,常用于在服务器内部进行页面跳转且希望保留请求相关信息的场景, + // 在这里的作用是当客户端以POST方式访问该Servlet时,将请求转发到对应的学生首页(通常是sIndex.jsp这个JSP页面) } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 重写HttpServlet类中的doGet方法,该方法会在客户端以GET方式发起请求时被调用 + // 此处的实现是直接调用doPost方法,意味着不管客户端是通过GET方式还是POST方式发起请求,都会执行同样的业务逻辑处理 + doPost(request, response); } -} +} \ No newline at end of file