学生信息管理项目更改

news/2025/2/27 20:24:42/文章来源:https://www.cnblogs.com/gaoyaweiguo/p/18741851

一、来源:原先的作品来自于大二上同寝室计科同学的期末大作业项目
二、运行环境基于intelij为运行软件,maven做框架依赖,tomacat浏览器展示,mysql数据库
运行截图




由于代码较多,此处只展示部分代码 1、addStudent.jsp 点击查看代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>添加学生</title><style>body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f9; }header, footer { background-color: #4CAF50; color: white; text-align: center; padding: 10px 0; }form { max-width: 400px; margin: 50px auto; padding: 20px; background-color: white; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); }input[type="text"], input[type="number"] { width: 100%; padding: 10px; margin: 10px 0; border: 1px solid #ddd; border-radius: 4px; }input[type="submit"] { background-color: #4CAF50; color: white; padding: 10px; border: none; border-radius: 4px; cursor: pointer; width: 100%; }input[type="submit"]:hover { background-color: #45a049; }a { display: block; text-align: center; margin-top: 20px; color: #333; text-decoration: none; }a:hover { color: #4CAF50; }</style>
</head>
<body><header><h1>添加学生信息</h1></header><form action="student" method="post"><input type="hidden" name="action" value="add">姓名: <input type="text" name="name" required><br>年龄: <input type="number" name="age" required><br>专业: <input type="text" name="major" required><br><input type="submit" value="添加"></form><a href="index.jsp">返回首页</a><footer><p>学生信息管理系统 &copy; 2023</p></footer>
</body>
</html> 
2、editStudent.jsp
点击查看代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>修改学生</title><style>body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f9; }header, footer { background-color: #4CAF50; color: white; text-align: center; padding: 10px 0; }form { max-width: 400px; margin: 50px auto; padding: 20px; background-color: white; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); }input[type="text"], input[type="number"] { width: 100%; padding: 10px; margin: 10px 0; border: 1px solid #ddd; border-radius: 4px; }input[type="submit"] { background-color: #4CAF50; color: white; padding: 10px; border: none; border-radius: 4px; cursor: pointer; width: 100%; }input[type="submit"]:hover { background-color: #45a049; }a { display: block; text-align: center; margin-top: 20px; color: #333; text-decoration: none; }a:hover { color: #4CAF50; }</style>
</head>
<body><header><h1>修改学生信息</h1></header><form action="student" method="post"><input type="hidden" name="action" value="edit">学生ID: <input type="number" name="id" required><br>姓名: <input type="text" name="name" required><br>年龄: <input type="number" name="age" required><br>专业: <input type="text" name="major" required><br><input type="submit" value="修改"></form><a href="index.jsp">返回首页</a><footer><p>学生信息管理系统 &copy; 2023</p></footer>
</body>
</html> 
3、index.jsp
点击查看代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>学生信息管理系统</title><style>body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f9; }header { background-color: #4CAF50; color: white; padding: 10px 0; text-align: center; }nav { margin: 20px; text-align: center; }nav a { margin: 0 15px; text-decoration: none; color: #333; font-weight: bold; }nav a:hover { color: #4CAF50; }footer { background-color: #333; color: white; text-align: center; padding: 10px 0; position: fixed; width: 100%; bottom: 0; }</style>
</head>
<body><header><h1>欢迎来到学生信息管理系统</h1></header><nav><a href="addStudent.jsp">添加学生</a><a href="viewStudents.jsp">查看学生</a><a href="searchStudent.jsp">查找学生</a><a href="editStudent.jsp">修改学生</a><a href="deleteStudent.jsp">删除学生</a></nav><footer><p>学生信息管理系统 &copy; 2023</p></footer>
</body>
</html> 
4、searchresult.jsp
点击查看代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.example.model.Student" %>
<!DOCTYPE html>
<html>
<head><title>学生搜索结果</title><style>body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f9; }header, footer { background-color: #4CAF50; color: white; text-align: center; padding: 10px 0; }.content { max-width: 600px; margin: 50px auto; padding: 20px; background-color: white; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); }table { width: 100%; border-collapse: collapse; }th, td { border: 1px solid #ddd; padding: 12px; text-align: left; }th { background-color: #f2f2f2; }a { display: block; text-align: center; margin-top: 20px; color: #333; text-decoration: none; }a:hover { color: #4CAF50; }</style>
</head>
<body><header><h1>学生搜索结果</h1></header><div class="content"><%Student student = (Student) request.getAttribute("student");if (student != null) {%><table><tr><th>ID</th><td><%= student.getId() %></td></tr><tr><th>姓名</th><td><%= student.getName() %></td></tr><tr><th>年龄</th><td><%= student.getAge() %></td></tr><tr><th>专业</th><td><%= student.getMajor() %></td></tr></table><% } else { %><p>未找到该学生的信息。</p><% } %><a href="index.jsp">返回首页</a></div><footer><p>学生信息管理系统 &copy; 2023</p></footer>
</body>
</html> 
5、viewStudent.jsp
点击查看代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.List" %>
<%@ page import="com.example.model.Student" %>
<%@ page import="com.example.service.StudentService" %>
<!DOCTYPE html>
<html>
<head><title>查看学生</title><style>body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f9; }header, footer { background-color: #4CAF50; color: white; text-align: center; padding: 10px 0; }table { width: 80%; margin: 50px auto; border-collapse: collapse; background-color: white; }th, td { border: 1px solid #ddd; padding: 12px; text-align: center; }th { background-color: #f2f2f2; }a { display: block; text-align: center; margin-top: 20px; color: #333; text-decoration: none; }a:hover { color: #4CAF50; }</style>
</head>
<body><header><h1>学生信息列表</h1></header><%List<Student> students = StudentService.getAllStudents();if (students != null && !students.isEmpty()) {%><table><tr><th>ID</th><th>姓名</th><th>年龄</th><th>专业</th></tr><%for (Student student : students) {%><tr><td><%= student.getId() %></td><td><%= student.getName() %></td><td><%= student.getAge() %></td><td><%= student.getMajor() %></td></tr><%}%></table><% } else { %><p style="text-align: center;">没有学生信息。</p><% } %><a href="index.jsp">返回首页</a><footer><p>学生信息管理系统 &copy; 2023</p></footer>
</body>
</html> 
6、loginsevlet
点击查看代码
package com.example.servlet;import com.example.utils.DBUtil;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;// 注释掉或删除注解
// @WebServlet("/login")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");try (Connection conn = DBUtil.getConnection()) {String sql = "SELECT * FROM users WHERE username = ? AND password = ?";try (PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, username);pstmt.setString(2, password);try (ResultSet rs = pstmt.executeQuery()) {if (rs.next()) {// 用户验证成功HttpSession session = request.getSession();session.setAttribute("user", username);response.sendRedirect(request.getContextPath() + "/index.jsp");} else {// 用户验证失败request.setAttribute("error", "用户名或密码错误");request.getRequestDispatcher("login.jsp").forward(request, response);}}}} catch (SQLException e) {e.printStackTrace();request.setAttribute("error", "数据库错误:" + e.getMessage());request.getRequestDispatcher("login.jsp").forward(request, response);}}
}
7、Registerservlet
点击查看代码
package com.example.servlet;import com.example.utils.DBUtil;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;// 注释掉或删除注解
// @WebServlet("/register")
public class RegisterServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");try (Connection conn = DBUtil.getConnection()) {conn.setAutoCommit(false); // 确保自动提交关闭String sql = "INSERT INTO users (username, password) VALUES (?, ?)";try (PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, username);pstmt.setString(2, password); // 在生产环境中应加密密码pstmt.executeUpdate();conn.commit(); // 手动提交事务response.sendRedirect("login.jsp");} catch (SQLException e) {conn.rollback(); // 回滚事务e.printStackTrace();request.setAttribute("error", "注册失败:" + e.getMessage());request.getRequestDispatcher("register.jsp").forward(request, response);}} catch (SQLException e) {e.printStackTrace();request.setAttribute("error", "数据库连接失败:" + e.getMessage());request.getRequestDispatcher("register.jsp").forward(request, response);}}
}
8、Studentservlet
点击查看代码
package com.example.servlet;import com.example.model.Student;
import com.example.service.StudentService;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 javax.servlet.http.HttpSession;
import java.io.IOException;@WebServlet("/student")
public class StudentServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session = request.getSession(false);if (session == null || session.getAttribute("user") == null) {response.sendRedirect("login.jsp");return;}String action = request.getParameter("action");if ("view".equals(action)) {request.setAttribute("students", StudentService.getAllStudents());request.getRequestDispatcher("viewStudents.jsp").forward(request, response);} else if ("search".equals(action)) {int id = Integer.parseInt(request.getParameter("id"));Student student = StudentService.findStudentById(id);request.setAttribute("student", student);request.getRequestDispatcher("searchResult.jsp").forward(request, response);}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session = request.getSession(false);if (session == null || session.getAttribute("user") == null) {response.sendRedirect("login.jsp");return;}request.setCharacterEncoding("UTF-8");String action = request.getParameter("action");if ("add".equals(action)) {String name = request.getParameter("name");int age = Integer.parseInt(request.getParameter("age"));String major = request.getParameter("major");Student student = new Student(0, name, age, major);StudentService.addStudent(student);response.sendRedirect("viewStudents.jsp");} else if ("edit".equals(action)) {int id = Integer.parseInt(request.getParameter("id"));String name = request.getParameter("name");int age = Integer.parseInt(request.getParameter("age"));String major = request.getParameter("major");Student student = new Student(id, name, age, major);StudentService.updateStudent(student);response.sendRedirect("viewStudents.jsp");} else if ("delete".equals(action)) {int id = Integer.parseInt(request.getParameter("id"));StudentService.deleteStudent(id);response.sendRedirect("viewStudents.jsp");}}
} 

三、
主要问题:
1、项目运行过后先进入欢迎界面,在要求更改、添加学生信息的时候才会要求登录。(页面先后顺序不合理)
2、role没有做区分:导致管理员和普通用户利用同一界面
3、用户登录时没有重置密码功能(基本功能欠缺)
4、在查看学生信息时,没有分页功能,如果数据量大会造成美观性不足
5、密码安全性低
创新点:
1、在用户点击重置密码选项的时候,会要求用户输入邮箱号,基于邮箱号把更改密码链接发送给用户,进而用户可以更改密码
2、对用户设置的密码进行了加密处理储存在数据库中,其中数据库中储存着是加密后的密码,而在用户登录的时候还是原先设置的初始密码
更改:
1、调整web.xml配置解决优先界面
2、利用sql语句,增加普通用户和管理员的两种身份,其中index.jsp分配给管理员,新创userDashboard.jsp给于普通用户(只能查看自己信息)
3、增加UpdatePasswordServlet等还有JSP文件,来添加重置密码功能,其中主要利用QQ邮箱地址和我个人邮箱来发送给需要更改密码的用户,并且会创建token来增加“更改密码链接”的安全性
4、简单的分页功能实现,每10个就进行分页
5、创建hashedPassword方法对密码进行加密并记录,用户登录进行解密

注:在把主要问题解决的同时,也对创新点进行了实现,并且把网页跳转的逻辑性进行了调试,并且主要代码在下方可自行查看
四、新代码更改
1、UpdatePasswordServlet

点击查看代码
package com.example.servlet;import com.example.utils.DBUtil;
import com.example.utils.PasswordUtils;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class UpdatePasswordServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String email = request.getParameter("email");String token = request.getParameter("token"); // 获取令牌String newPassword = request.getParameter("newPassword");String hashedPassword = PasswordUtils.hashPassword(newPassword);// 验证令牌if (!isTokenValid(email, token)) {request.setAttribute("error", "无效的重置链接或令牌已过期。");request.getRequestDispatcher("newPassword.jsp").forward(request, response);return;}try (Connection conn = DBUtil.getConnection()) {String sql = "UPDATE users SET password = ?, reset_token = NULL WHERE email = ?";try (PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, hashedPassword);pstmt.setString(2, email);pstmt.executeUpdate();}request.setAttribute("message", "密码重置成功,请登录。");request.getRequestDispatcher("login.jsp").forward(request, response);} catch (SQLException e) {request.setAttribute("error", "更新密码失败,请稍后再试。");request.getRequestDispatcher("newPassword.jsp").forward(request, response);}}private boolean isTokenValid(String email, String token) {try (Connection conn = DBUtil.getConnection()) {String sql = "SELECT COUNT(*) FROM users WHERE email = ? AND reset_token = ?";try (PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, email);pstmt.setString(2, token);try (ResultSet rs = pstmt.executeQuery()) {if (rs.next()) {return rs.getInt(1) > 0; // 如果计数大于0,令牌有效}}}} catch (SQLException e) {e.printStackTrace();}return false;}
} 
2、PasswordUtils
点击查看代码
package com.example.utils;import java.security.MessageDigest;public class PasswordUtils {public static String hashPassword(String password) {try {MessageDigest md = MessageDigest.getInstance("SHA-256");byte[] hashedBytes = md.digest(password.getBytes("UTF-8"));StringBuilder sb = new StringBuilder();for (byte b : hashedBytes) {sb.append(String.format("%02x", b));}return sb.toString();} catch (Exception e) {throw new RuntimeException(e);}}
} 
3、ResetPasswordServlet
点击查看代码
package com.example.servlet;import javax.mail.*;
import javax.mail.internet.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Properties;
import java.util.UUID;
import com.example.utils.DBUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class ResetPasswordServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String email = request.getParameter("email");String token = UUID.randomUUID().toString();storeTokenInDatabase(email, token);String resetLink = request.getRequestURL().toString().replace("resetPassword", "newPassword.jsp") + "?email=" + email + "&token=" + token;String subject = "重置密码链接";String message = "请点击以下链接重置您的密码:\n" + resetLink;try {sendEmail(email, subject, message);request.setAttribute("message", "重置链接已发送到您的邮箱");} catch (MessagingException e) {request.setAttribute("error", "发送邮件失败,请稍后再试。");e.printStackTrace();  } catch (Exception e) {request.setAttribute("error", "发生未知错误,请稍后再试。");e.printStackTrace();  }request.getRequestDispatcher("login.jsp").forward(request, response);}private void storeTokenInDatabase(String email, String token) {try (Connection conn = DBUtil.getConnection()) {String sql = "UPDATE users SET reset_token = ? WHERE email = ?";try (PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, token);pstmt.setString(2, email);pstmt.executeUpdate();}} catch (SQLException e) {e.printStackTrace();}}private void sendEmail(String to, String subject, String message) throws MessagingException {// 设置邮件服务器Properties properties = new Properties();properties.put("mail.smtp.auth", "true");properties.put("mail.smtp.starttls.enable", "true");properties.put("mail.smtp.host", "smtp.qq.com"); properties.put("mail.smtp.port", "587");// 创建会话Session session = Session.getInstance(properties, new javax.mail.Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("1053624739@qq.com", "ltmysduzatybgas");//因涉及个人隐私邮箱,并不展示真实信息}});// 创建邮件Message mimeMessage = new MimeMessage(session);mimeMessage.setFrom(new InternetAddress("1053624739@qq.com"));mimeMessage.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));mimeMessage.setSubject(subject);mimeMessage.setText(message);// 发送邮件Transport.send(mimeMessage);}
}
4、newPassword.jsp + logout.jsp + resetPassword.jsp + userDashboard.jsp
点击查看代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%String email = request.getParameter("email");
%>
<!DOCTYPE html>
<html>
<head><title>重置密码</title><style>body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f9; }header, footer { background-color: #4CAF50; color: white; text-align: center; padding: 10px 0; }.content { max-width: 400px; margin: 50px auto; padding: 20px; background-color: white; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); }input[type="password"] { width: 100%; padding: 10px; margin: 10px 0; border: 1px solid #ddd; border-radius: 4px; }input[type="submit"] { background-color: #4CAF50; color: white; padding: 10px; border: none; border-radius: 4px; cursor: pointer; width: 100%; }input[type="submit"]:hover { background-color: #45a049; }</style>
</head>
<body><header><h1>重置密码</h1></header><div class="content"><form action="updatePassword" method="post"><input type="hidden" name="email" value="<%= email %>"><input type="password" name="newPassword" placeholder="输入新密码" required><br><input type="submit" value="重置密码"></form></div><footer><p>学生信息管理系统 &copy; 2023</p></footer>
</body>
</html> 
%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%// 获取当前会话HttpSession userSession = request.getSession(false);// 检查用户是否已登录if (userSession == null || userSession.getAttribute("user") == null) {response.sendRedirect("login.jsp");return;}// 重定向到登录页面response.sendRedirect("login.jsp");
%> 
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>重置密码</title><style>body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f9; }header, footer { background-color: #4CAF50; color: white; text-align: center; padding: 10px 0; }.content { max-width: 400px; margin: 50px auto; padding: 20px; background-color: white; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); }input[type="email"] { width: 100%; padding: 10px; margin: 10px 0; border: 1px solid #ddd; border-radius: 4px; }input[type="submit"] { background-color: #4CAF50; color: white; padding: 10px; border: none; border-radius: 4px; cursor: pointer; width: 100%; }input[type="submit"]:hover { background-color: #45a049; }</style>
</head>
<body><header><h1>重置密码</h1></header><div class="content"><form action="resetPassword" method="post"><input type="email" name="email" placeholder="请输入您的电子邮件" required><br><input type="submit" value="发送重置链接"></form></div><footer><p>学生信息管理系统 &copy; 2023</p></footer>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="javax.servlet.http.HttpSession" %>
<%
// 获取当前会话
HttpSession userSession = request.getSession(false);
// 检查用户是否已登录
if (userSession == null || userSession.getAttribute("user") == null) {response.sendRedirect("login.jsp");return;
}
%>
<!DOCTYPE html>
<html>
<head><title>用户界面</title><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"><style>body {font-family: Arial, sans-serif;background-color: #f4f4f9;margin: 0;padding: 0;}header {background-color: #4CAF50;color: white;padding: 15px 0;text-align: center;}.container {max-width: 800px;margin: 20px auto;padding: 20px;background-color: white;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);}h1 {margin-bottom: 20px;}nav {margin: 20px 0;text-align: center;}nav a {margin: 0 15px;text-decoration: none;color: #4CAF50;font-weight: bold;padding: 10px 15px;border: 2px solid #4CAF50;border-radius: 5px;transition: background-color 0.3s, color 0.3s;}nav a:hover {background-color: #4CAF50;color: white;}footer {text-align: center;margin-top: 20px;padding: 10px 0;background-color: #333;color: white;}</style>
</head>
<body><header><h1>欢迎,用户!</h1></header><div class="container"><nav><a href="viewProfile.jsp"><i class="fas fa-user"></i> 查看个人资料</a><a href="logout.jsp"><i class="fas fa-sign-out-alt"></i> 注销</a></nav><h2>用户信息</h2><p>您已成功登录,欢迎使用学生信息管理系统!</p><p>在这里,您可以查看和管理您的个人资料。</p></div><footer><p>学生信息管理系统 &copy; 2023</p></footer>
</body>
</html> 
5、pom.xml + web.xml
点击查看代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><<welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.example.servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login</url-pattern></servlet-mapping><servlet><servlet-name>RegisterServlet</servlet-name><servlet-class>com.example.servlet.RegisterServlet</servlet-class></servlet><servlet-mapping><servlet-name>RegisterServlet</servlet-name><url-pattern>/register</url-pattern></servlet-mapping></web-app>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>sportsEventNews</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- Servlet API --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><!-- JSTL --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- MySQL Connector --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><!-- JavaMail --><dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.6.2</version></dependency><dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.2</version></plugin></plugins></build></project> 
注:其他相关基础代码如login、register等JSP文件不予展示 五、重构软件测试截图


六、总结:
1、不熟悉对方的结构花费大量时间去调试梳理
2、引入mail lib库,对库的导入不会,自行在哔哩哔哩上查询查看
3、对自动发送邮箱更改密码方法构建,利用ai且不断调试来完成
改进:
1、代码还有很多的不足问题有待提高例如:用户注册的密码强度的验证性、网页的布局极其美化、还有普通用户信息的完善及其全面性、普通用户的修改自己信息的功能的添加等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/890810.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux相关杂记

Windows通过ssh远程linux的Ubuntu 1.在Ubuntu上安装SSH服务 sudo apt update sudo apt insall openssh-server2.启动ssh sudo systemctl start ssh3.设置开机自启 sudo systemctl enable ssh2.获取Ubuntu的IP地址 ip a3.windows上使用SSH客户端 ssh 用户名@IP地址#####愿你一寸…

笔记本外接显示器,左右位置设置

笔记本电脑扩展的显示器 如何左右分屏或上下分屏显示? 留意屏幕布局。 若笔记本屏幕在左而外接显示器在右,则无需调整;反之,则需用鼠标选中2号屏,按住左键拖动至1号屏的左侧。

题解:P4586 [FJOI2015] 最小覆盖双圆问题

写了这么久终于过了,发篇题解记录一下。 第一次写黑题题解,写的不好请见谅。 目录本题思路 三点定圆 最小圆覆盖 关于最小圆覆盖时间复杂度 回到本题 二分法划分点集 总时间复杂度 最小覆盖双圆问题代码本题思路 首先,这道题叫做最小覆盖双圆问题,这道题涉及到一个叫做最小…

sed undefined label on MacOS, FreeBSD

A quick fix is to prepend your string expression with an empty string: For example: instead of sed -i s/foo/bar/g text.txt write: sed -i s/foo/bar/g text.txtThis should work across different OS (Linux, MacOS, Windows) --dopexxx来源:http://stackoverflow.…

软工作业1:自我介绍+软工5问

这个作业属于哪个课程 软工23级这个作业要求在哪里 自我介绍+软工五问这个作业的目标 熟悉博客园以及Github的相关操作,了解软件工程相关内容1.自我介绍兴趣爱好:羽乒人,爱听歌,电影,楷书,行楷 编程语言:C,JAVA 目标:后端开发2.软工五问软件工程在对就业上的帮助的具体…

对“推箱子”小游戏代码的改进

一.代码来源 https://www.cnblogs.com/heyu123/p/14844284.html 二.运行环境 DEV--C++ 三.原代码及其运行结果 原代码: int map[8][8]={{1,1,1,1,1,1,1,1},//0 空地 {1,0,0,0,1,0,0,1},//1 墙 {1,0,1,0,1,4,3,1},//3 目的地 {1,0,0,0,0,4,3,1},//4 箱子 {1,0,1,0,1,4,3,1},//5…

软件开发与创新课程设计作业——软件逆向设计

一、来源:软件工程2班李鹏飞去年的大作业`点击查看代码 #include <iostream> #include <string> #include <fstream> using namespace std;//定义客户类型 enum eGuestType // 在高版本VS中,需要用enum class,在低版本的vs中,直接用enum也可以 {e_member…

LVI_SAM 虚拟机安装复现(一)

0. 前言 高能警告:LVI_SAM 的安装步骤是繁琐的,一个坑接着一个坑,请预留48+小时的安装时间,和80%以上的san值。非战斗人员请尽快撤离。 预备知识:虚拟机安装步骤,ROS基本概念,Makefile工作原理 没有预备知识的话,也没关系,本文也不会给你解释的( 本文是第一大步骤,即…

大模型--三种三种检索方式-Dense retrieval / Lexical Retrieval / Multi-Vector Retrieval- 44

1. 参考 M3-Embedding https://github.com/FlagOpen/FlagEmbedding https://arxiv.org/pdf/2402.03216 https://huggingface.co/BAAI/bge-m3 2. Dense retrievalimport torch import torch.nn as nnclass DenseRetrieval(nn.Module):def __init__(self, embedding_dim):super(D…

从拉新到留存,用户生命周期分析全流程

已收藏分享从拉新到留存,用户生命周期分析全流程 2025-02-17 17:02人人都是产品经理在当今竞争激烈的市场环境中,理解并管理用户生命周期是实现用户增长和留存的关键。本文将深入剖析用户生命周期的全流程管理,从拉新到留存,详细解读不同业务类型(如消费品、耐用品、平台型…

朴素贝叶斯其实并不朴素

朴素贝叶斯英文名称NaiveBayes,朴素贝叶斯确实nave,但是并不朴素,而是简单,并不是逻辑上面的简单,而是假设上面的简单。 1.贝叶斯公式 ​ 其中: P(C|X)是类C在给定特征X下的后验概率。 P(X|C)是特征X在给定类C下的条件概率,也叫做似然。 P(C)是类C的先验概率。 P(X)是特…

NocoBase 本周更新汇总:新增路由管理

本周更新包括:支持为页面标签页配置权限,新增路由管理页面等。汇总一周产品更新日志,最新发布可以前往我们的博客查看。 NocoBase 目前更新包括的版本更新包括三个分支:main ,next和 develop。main :截止目前最稳定的版本,推荐安装此版本。 next:包含即将发布的新功能,…