You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lsepidemicsituationsystem8/src/com/controller/frontweb/MoreNewsServlet.java

125 lines
8.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.controller.frontweb;
import com.dao.FrontWebDao;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 处理部门管理员忘记密码重置请求的Servlet
* 验证两次输入的新密码是否一致并更新数据库
*/
@WebServlet("/DeptAdmForgetPswServlet")
public class DeptAdmForgetPswServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置请求的字符编码为UTF-8确保能正确处理请求中的中文字符等防止乱码
req.setCharacterEncoding("utf-8");
// 设置响应的字符编码为UTF-8保证响应内容在传输过程中字符的正确性防止乱码
resp.setCharacterEncoding("utf-8");
// 设置响应的内容类型为HTML格式且字符编码为UTF-8告知客户端如何解析响应内容
resp.setContentType("text/html;charset=utf-8");
// 从HTTP请求的参数中获取名为"adno"的参数值,该值代表管理员编号(用户输入的需要重置密码的账号)
String adno = req.getParameter("adno");
// 从HTTP请求的参数中获取名为"adpsw"的参数值,该值代表用户输入的新密码
String adpsw = req.getParameter("adpsw");
// 从HTTP请求的参数中获取名为"adpsw1"的参数值,该值代表用户输入的用于确认的新密码
String adpsw1 = req.getParameter("adpsw1");
// 进行输入验证检查获取到的管理员编号、新密码、确认密码这三个参数是否有任何一个为null
if (adno == null || adpsw == null || adpsw1 == null) {
// 如果存在参数为null的情况通过响应向客户端发送一段JavaScript代码
// 该代码会弹出一个提示框,显示“参数不能为空!”
// 并将页面重定向到密码重置页面(路径为/view/frontweb/deptadmforgetpsw.jsp
resp.getWriter().write("<script>alert('参数不能为空!'); window.location='" + req.getContextPath() + "/view/frontweb/deptadmforgetpsw.jsp';</script>");
// 终止当前doGet方法的执行不再继续后续操作
return;
}
// 判断用户输入的新密码和确认密码是否相等
if (adpsw.equals(adpsw1)){
// 如果相等则进行密码强度验证调用isPasswordValid方法来检查密码是否符合要求
if (!isPasswordValid(adpsw)) {
// 如果密码强度不符合要求例如长度不足8位或不包含字母和数字
// 通过响应向客户端发送一段JavaScript代码
// 该代码会弹出一个提示框显示“密码强度不足至少8位包含字母和数字”
// 并将页面重定向到密码重置页面(路径为/view/frontweb/deptadmforgetpsw.jsp
resp.getWriter().write("<script>alert('密码强度不足至少8位包含字母和数字'); window.location='" + req.getContextPath() + "/view/frontweb/deptadmforgetpsw.jsp';</script>");
// 终止当前doGet方法的执行不再继续后续操作
return;
}
// 构造一条SQL更新语句用于更新数据库中admin表的记录
// 将指定管理员编号adno对应的密码adpsw进行更新
String sql = "update admin set adpsw = ? where adno = ?";
// 创建一个包含SQL语句参数的对象数组第一个参数是新密码第二个参数是管理员编号
Object[] objects = {adpsw, adno};
// 调用isAdminExists方法来验证要重置密码的管理员账号是否存在于数据库中
if (!isAdminExists(adno)) {
// 如果管理员账号不存在通过响应向客户端发送一段JavaScript代码
// 该代码会弹出一个提示框,显示“管理员账号不存在!”
// 并将页面重定向到密码重置页面(路径为/view/frontweb/deptadmforgetpsw.jsp
resp.getWriter().write("<script>alert('管理员账号不存在!'); window.location='" + req.getContextPath() + "/view/frontweb/deptadmforgetpsw.jsp';</script>");
// 终止当前doGet方法的执行不再继续后续操作
return;
}
// 调用FrontWebDao类中的executeUpdate方法执行SQL更新语句
// 该方法会返回受影响的行数即成功更新的记录数量将其存储在num变量中
int num = FrontWebDao.executeUpdate(sql, objects);
// 判断受影响的行数是否大于0若大于0表示密码更新操作成功
if (num > 0){
// 如果更新成功通过响应向客户端发送一段JavaScript代码
// 该代码会弹出一个提示框,显示“修改密码成功!请登录!”
// 并将页面重定向到部门管理员登录页面(路径为/view/frontweb/deptadmlogin.jsp同时关闭当前窗口
resp.getWriter().write("<script>alert('修改密码成功!请登录!'); window.location='" + req.getContextPath() + "/view/frontweb/deptadmlogin.jsp';" + "window.close();</script>");
}else {
// 如果受影响的行数不大于0说明密码更新操作失败
// 通过响应向客户端发送一段JavaScript代码
// 该代码会弹出一个提示框,显示“修改密码失败!请联系管理员”
// 并将页面重定向到密码重置页面(路径为/view/frontweb/deptadmforgetpsw.jsp
resp.getWriter().write("<script>alert('修改密码失败!请联系管理员'); window.location='" + req.getContextPath() + "/view/frontweb/deptadmforgetpsw.jsp';</script>");
}
}else {
// 如果用户输入的新密码和确认密码不相等
// 通过响应向客户端发送一段JavaScript代码
// 该代码会弹出一个提示框,显示“两次密码不一样!请重新输入密码!”
// 并将页面重定向到密码重置页面(路径为/view/frontweb/deptadmforgetpsw.jsp同时关闭当前窗口
resp.getWriter().write("<script>alert('两次密码不一样!请重新输入密码!'); window.location='" + req.getContextPath() + "/view/frontweb/deptadmforgetpsw.jsp';" + "window.close();</script>");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 对于接收到的POST请求直接调用doGet方法来处理复用doGet方法中的业务逻辑
this.doGet(req, resp);
}
// 私有方法,用于验证管理员账号是否存在于数据库中
private boolean isAdminExists(String adno) {
// 构造一条SQL查询语句用于统计admin表中指定管理员编号adno的记录数量
String sql = "select count(*) as num from admin where adno = ?";
// 创建一个包含SQL语句参数的对象数组参数为管理员编号
Object[] params = {adno};
// 调用FrontWebDao类中的findTotalCount方法执行SQL查询语句
// 该方法会返回查询结果中记录的数量将其存储在count变量中
int count = FrontWebDao.findTotalCount(sql, params);
// 如果记录数量大于0说明管理员账号存在返回true否则返回false
return count > 0;
}
// 私有方法,用于验证密码强度是否符合要求
private boolean isPasswordValid(String password) {
// 使用正则表达式进行匹配判断密码是否至少8位并且同时包含字母和数字
// 如果匹配成功说明密码强度符合要求返回true否则返回false
return password.matches("^(?=.*[A-Za-z])(?=.*\\d).{8,}$");
}
}