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