chenxi 8 months ago
parent 2da898b344
commit 11c2073ad4

@ -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

@ -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类具体实现
// 传入获取到的学生IDstudentid来执行删除对应学生的业务操作
// 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);
}
}

@ -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<SelectCourse> 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()获取与要选择的课程IDcourseid相等说明已经选过该课程了
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具体实现传入学生IDstudentid和课程IDcourseid
// 执行添加选课记录的业务操作,一般会在数据库等存储介质中插入一条新的选课记录
//完成后给提示跳转
// 完成后给提示跳转
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);
}
}

@ -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);
}
}

@ -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);
}
}

@ -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<Student> students = studentService.findAll();
//将list存入request域
request.setAttribute("students",students);
// 调用StudentService接口中定义的findAll方法由StudentServiceImpl具体实现查询所有学生的信息
// 将查询结果以List<Student>类型返回即得到一个包含所有学生对象的列表并赋值给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);
}
}

@ -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<Course> optionalcourses = studentService.findAllOptionalCourse();
//将list存入request域
request.setAttribute("optionalcourses",optionalcourses);
//转发到list.jsp
// 调用StudentService接口中定义的findAllOptionalCourse方法由StudentServiceImpl具体实现查询所有可选课程的信息
// 将查询结果以List<Course>类型返回即得到一个包含所有可选课程对象的列表并赋值给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);
}
}

@ -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);
}
}

@ -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);
}
}

@ -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<SelectCourse> 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<SelectCourse>类型返回即得到一个包含该学生所有选课记录对象的列表并赋值给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<SelectCourse> selectcourses = studentService.findSelectCourseAllStudent();
// 调用StudentService接口中定义的findSelectCourseAllStudent方法由StudentServiceImpl具体实现
// 查询所有学生的选课信息将查询结果以List<SelectCourse>类型返回得到一个包含所有学生选课记录对象的列表并赋值给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);
}
}

@ -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);
}
}
Loading…
Cancel
Save