JSP简单实现用户登录与注册功能
本教程使用 IDEA Ultimate 实现,社区版需要其他方式的设置
创建项目
简要介绍。创建 JAVA EE 项目,选择 WEB 服务,将下载到的 Tomcat 的路径添加 Tomcat 服务器列表中,然后点击下一步,选择 Java EE 8。
添加 MySQL JDBC 驱动
点文件->项目结构->库,然后将 MySQL 驱动的 jar 包(mysql-connector-java-8.0.30.jar
)添加进这个库里,来提供依赖,即可
本人分享的给 Java 项目用的 Connector 链接如下,提取码:np93
https://www.aliyundrive.com/s/m29bTBK612E
如果用此种方式补依赖,建议放在src/main/webapp/WEB-INF/libs/
这个文件夹内。如果没有,可以在WEB-INF
这个目录里面新建。
通过同样的方法,补齐jsp-api.jar
和servlet-api.jar
这两个 jar 包,可以解决out.print()
方法在编辑器内报错的问题。这两个文件位于 Tomcat 目录的 lib
文件夹内。如果要操作这个,一定不要误操作为移动/剪切。直接引用(挪到别的机器上症状会复发)或者是复制过来(复制没啥后遗症)即可。也可以任凭out.print()
方法报错,不会影响实际的编译运行。
PS:拿 Maven 来补这个库应该也行,但没有尝试过,感兴趣的可以尝试一下
数据库建立相关
略
登录
假定输入页面为login.jsp
,后端验证页面为login-auth.jsp
,下面为login.jsp
页面内至少应该有的内容,写在<body>
标签内
<form method="post" action="./login-auth.jsp">
<input type="text" placeholder="用户名" name="name" required>
<input type="password" placeholder="密码" name="password" required>
<button type="submit">登录</button>
</form>
login-auth.jsp
的代码如下
<%@
page import="java.util.*" import="java.sql.*" import="java.security.MessageDigest" language="java" pageEncoding="UTF-8"
%>
<%
String url = "jdbc:mysql://服务器地址:3306/数据库名?useSSL=false&characterEncoding=utf-8&serverTimezone=UTC";
String username = "数据库用户名";
String password= "数据库密码";
String uname = request.getParameter("name");
String upassword = request.getParameter("password");
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
Connection conn = DriverManager.getConnection(url, username, password);
Statement stat = conn.createStatement();
String sql = "select * from `mall_users` where `name` = ?";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1,uname);
ResultSet rs = preparedStatement.executeQuery();
if (rs.next()) {
if (upassword.equals(rs.getString("password"))) {
out.print("登录成功");
session.setAttribute("loginUser", uname); // 设置session保存登录状态
} else {
out.print("登录失败,密码错误");
}
} else {
out.print("登录失败,用户不存在");
}
stat.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
out.print("数据库连接错误");
}
%>
注册
假定输入页面为register.jsp
,后端验证页面为register.jsp
,下面为register.jsp
页面内至少应该有的内容,写在<body>
标签内
<form method="post" action="./register-auth.jsp">
<input type="text" placeholder="用户名" name="name" required>
<input type="password" placeholder="密码" name="password" required>
<button type="submit">注册</button>
</form>
register-auth.jsp
的代码如下
<%@
page import="java.util.*" import="java.sql.*" language="java" pageEncoding="UTF-8"
%>
<%
String url = "jdbc:mysql://服务器地址:3306/数据库名?useSSL=false&characterEncoding=utf-8&serverTimezone=UTC";
String username = "数据库用户名";
String password= "数据库密码";
boolean Rigisterable = false;
String uname = request.getParameter("name");
String upassword = request.getParameter("password");
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
Connection conn = DriverManager.getConnection(url, username, password);
Statement stat = conn.createStatement();
String sql = "select * from `mall_users` where `name` = ?";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1,uname);
ResultSet rs = preparedStatement.executeQuery();
if (rs.next()) {
out.print("注册失败,用户已存在");
} else {
Rigisterable = true;
}
preparedStatement.close();
stat.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
out.print("注册失败,用户存在性校验错误");
}
if (Rigisterable == true) {
try{
Connection conn2 = DriverManager.getConnection(url, username, password);
Statement stat2 = conn2.createStatement();
String sql2 = "insert into mall_users(name, password) values(?, ?)";
PreparedStatement ps2 = conn2.prepareStatement(sql2);
ps2.setString(1, uname);
ps2.setString(2, upassword);
ps2.executeUpdate();
out.print("注册成功");
ps2.close();
stat2.close();
conn2.close();
} catch (SQLException e) {
e.printStackTrace();
out.print("注册失败,写表失败");
}
}
%>
备注:这里写的稍微有点屎山,但能跑。本文写作目的是为了帮助自班同学完成学校任务而写,但可以完成基本功能
不要问我为啥要明文存储密码。其实这里面我写了个用MD5存储的,为了减少学习的复杂性,便将其删除。
数据库表设计
数据库库名自己定义,表名代码中提供的为mall_user
,这个也是可以自行更改的,包括表结构也可以更改,不过要同时修改查询语句
至少要存在这三个字段,因 InnoDB 要求必须要有主键,故 uid 必须要。
数据库管理指北
可以使用 NaviCat 或者是类似的软件进行建表连接