JSP+MySQL实现网站的登录与注册小案例,需要以下步骤完成:
- 确定数据库表
设计一个用户表来存储用户名和密码,例如:
CREATE TABLE user(
uid INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL UNIQUE,
password VARCHAR(30) NOT NULL
);
- 编写JSP页面
创建一个登录页面(login.jsp)和注册页面(register.jsp),用于接收用户输入的账号和密码,例如:
<!-- 登录页面 -->
<html>
<head>
<title>登录页面</title>
</head>
<body>
<h1>登录</h1>
<form action="loginProcess.jsp" method="post">
<label>用户名:</label>
<input type="text" name="username" required/><br/><br/>
<label>密码:</label>
<input type="password" name="password" required/><br/><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
<!-- 注册页面 -->
<html>
<head>
<title>注册页面</title>
</head>
<body>
<h1>注册</h1>
<form action="registerProcess.jsp" method="post">
<label>用户名:</label>
<input type="text" name="username" required/><br/><br/>
<label>密码:</label>
<input type="password" name="password" required/><br/><br/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
- 编写Java Servlet
创建一个Servlet(loginProcess.jsp和registerProcess.jsp),用于验证用户登录、注册信息,并将结果保存到数据库中,例如:
package com.example.user;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginProcessServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private Connection dbConn;
// 数据库连接配置
private String dbUrl = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
private String dbUser = "root";
private String dbPassword = "root"; // 修改为自己的密码
// 连接数据库
private Connection getConn() throws SQLException, ClassNotFoundException {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
return conn;
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String action = request.getServletPath();
if (action.equals("/loginProcess.jsp")) {
String username = request.getParameter("username");
String password = request.getParameter("password");
HttpSession session = request.getSession();
try {
dbConn = getConn();
PreparedStatement stmt = dbConn.prepareStatement("SELECT * FROM user WHERE username = ? AND password = ?");
stmt.setString(1, username);
stmt.setString(2, password);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
session.setAttribute("user", username);
response.sendRedirect("welcome.jsp");
} else {
response.sendRedirect("login.jsp");
}
rs.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
dbConn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} else if (action.equals("/registerProcess.jsp")) {
String username = request.getParameter("username");
String password = request.getParameter("password");
try {
dbConn = getConn();
PreparedStatement stmt = dbConn.prepareStatement("INSERT INTO user (username, password) VALUES (?, ?)");
stmt.setString(1, username);
stmt.setString(2, password);
stmt.executeUpdate();
stmt.close();
response.sendRedirect("login.jsp");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
dbConn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
};
}
上述代码中,我们首先在Servlet中定义了一个数据库连接配置,然后创建了一个getConn()方法用于连接数据库。在doPost()方法中,我们可以通过request.getServletPath()方法获取到当前请求的url,根据url的不同,实现不同的处理(登录或注册)。其中,在登录处理中,我们使用PreparedStatement对象占位符的方式,避免了注入攻击,同时使用session保存用户信息,以便在欢迎页面(welcome.jsp)中显示。
- 编写欢迎页面
创建一个欢迎页面(welcome.jsp),用于显示登录用户的信息,例如:
<html>
<head>
<title>欢迎页面</title>
</head>
<body>
<h1>欢迎</h1>
<%
String username = (String)session.getAttribute("user");
out.print("欢迎您," + username);
%>
<br/><br/>
<a href="logout.jsp">退出</a>
</body>
</html>
这里我们使用了JSP中的EL表达式和Scriptlet,获取并显示了session中保存的用户名。
- 编写退出页面
创建一个退出页面(logout.jsp),用于用户退出登录,例如:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
session.invalidate();
response.sendRedirect("login.jsp");
%>
在退出页面中,我们可以使用session.invalidate()方法清除当前session,并使用response.sendRedirect()方法重定向到登录页面。
示例说明:
-
在登录处理的代码中,使用了PreparedStatement对象占位符的方式,避免了注入攻击。例如,如果用户在输入用户名或密码时输入了SQL语句,系统就可能会受到攻击。而使用PreparedStatement对象占位符的方式可以避免这个问题,能够更有效地保护系统的安全性。
-
在退出页面中使用了session.invalidate()方法清除session,该方法可以有效地防止用户在未正常退出的情况下重新打开浏览器,数据还未过期直接跳过登录界面访问网站的情况。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP+MySQL实现网站的登录与注册小案例 - Python技术站