irpas技术客

使用JSP+Servlet+MySQL实现登录注册功能【详细代码】_邵奈一_jsp登录注册完整代码

网络投稿 8058

大家好,我是邵奈一,一个不务正业的程序猿、正儿八经的斜杠青年。 1、世人称我为:被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员… 2、这几年,我整理了很多IT技术相关的教程给大家,爱生活、爱分享。 3、如果您觉得文章有用,请收藏,转发,评论,并关注我,谢谢! 博客导航跳转(请收藏):邵奈一的技术博客导航 | 公众号 | 微信 | CSDN | 掘金 | 51CTO | 简书 | 微博 |


教程目录 0x00 教程内容0x01 准备数据库表1. 创建数据库并创建表2. 插入三条数据 0x02 初始化工程1. 新建一个JavaWeb项目2. 初始化工程目录3. 新建好包结构 0x03 编写后端代码1. 代码及项目结构总览2. 编写实体类3. 编写Dao层接口4. 编写数据库连接工具类5. 编写Dao层接口实现类6. 修改web.xml文件7. 编写LoginServlet代码8. 编写RegisterServlet代码 0x04 编写前端代码1. 编写login.jsp代码2. 编写success.jsp代码3. 编写defeat.jsp代码4. 编写register.jsp代码5. 编写register-success.jsp代码 0xFF 总结

0x00 教程内容 准备数据库表初始化工程编写后端代码编写前端代码 0x01 准备数据库表 1. 创建数据库并创建表

自行创建一个数据库,然后创建一张user表:

-- ---------------------------- -- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL DEFAULT 'default', `password` varchar(50) NOT NULL DEFAULT '123456', `role` int(10) NOT NULL DEFAULT '1', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

role字段说明: 0:管理员 1:普通用户 默认注册的时候,是只能注册成普通用户。

2. 插入三条数据 -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', 'lisa', '123123', '0'); INSERT INTO `user` VALUES ('2', 'tony', '123123', '1'); INSERT INTO `user` VALUES ('3', 'tom', '123123', '1'); 0x02 初始化工程 1. 新建一个JavaWeb项目

(1)添加自己的 Tomcat 进来,选择 Web Application ,同时,如果没有选择创建 web.xml 文件的话,记得勾选一下:

2. 初始化工程目录

(1)在WEB-INF文件夹下,创建一个lib文件夹,将MySQL驱动复制进入: (2)设置MySQL驱动为需要加载的驱动:

3. 新建好包结构

(1)我的包结构如下,直接在 src 文件夹里创建即可:

└─com └─java ├─dao │ └─impl ├─domain ├─servlet └─utils 0x03 编写后端代码 1. 代码及项目结构总览

2. 编写实体类 package com.java.domain; import java.util.Objects; /** * @Author shaonaiyi@163.com * @Date 2022/3/6 11:03 * @Description 用户实体类 */ public class User { // 用户id private int id; // 用户名 private String username; // 密码 private String password; // 用户角色(0:管理员;1:普通用户) private int role; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getRole() { return role; } public void setRole(int role) { this.role = role; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return id == user.id && role == user.role && Objects.equals(username, user.username) && Objects.equals(password, user.password); } @Override public int hashCode() { return Objects.hash(id, username, password, role); } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", role=" + role + '}'; } } 3. 编写Dao层接口 package com.java.dao; import com.java.domain.User; /** * @Author shaonaiyi@163.com * @Date 2022/3/6 14:32 * @Description 用户dao层接口 */ public interface UserDao { // 登录 User login(String username, String password); // 注册 Boolean register(User user); } 4. 编写数据库连接工具类 package com.java.utils; import java.sql.*; /** * @Author shaonaiyi@163.com * @Date 2022/3/6 12:40 * @Description 数据库连接工具类 */ public class JdbcUtil { /** * 1、获取Connection * @return Connection * @throws Exception */ public static Connection getConnection() throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/javaweb","root", "123456"); return connection; } /** * 2、释放资源 * @param resultSet * @param statement * @param connection */ public static void release(ResultSet resultSet, Statement statement, Connection connection) { if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } // public static void main(String[] args) throws Exception { // Connection connection = JdbcUtil.getConnection(); // System.out.println(connection); // } } 5. 编写Dao层接口实现类 package com.java.dao.impl; import com.java.dao.UserDao; import com.java.domain.User; import com.java.utils.JdbcUtil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; /** * @Author shaonaiyi@163.com * @Date 2022/3/6 14:32 * @Description 用户dao层实现类 */ public class UserDaoImpl implements UserDao { /** * 登录 * @param username 用户名 * @param password 密码 * @return 用户对象 */ public User login(String username, String password) { User user = null; Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { connection = JdbcUtil.getConnection(); String sql = "select * from user where username = ? and password= ?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, username); preparedStatement.setString(2, password); resultSet = preparedStatement.executeQuery(); if(resultSet.next()){ user = new User(); user.setId(resultSet.getInt("id")); user.setUsername(resultSet.getString("username")); user.setPassword(resultSet.getString("password")); user.setRole(resultSet.getInt("role")); System.out.println("登录成功" + user.toString()); } else { System.out.println("用户名或者密码错误"); } } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtil.release(resultSet, preparedStatement, connection); } return user; } /** * 注册 * @param user 用户对象 */ public Boolean register(User user){ Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; int result = 0; try { connection = JdbcUtil.getConnection(); String sql = "insert into user(username, password) values (?, ?);"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, user.getUsername()); preparedStatement.setString(2, user.getPassword()); result = preparedStatement.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtil.release(resultSet, preparedStatement, connection); } // 三目表达式,result等1则人会true,否则返回false return result == 1 ? true:false; } } 6. 修改web.xml文件

(1)设置欢迎首页

<!--设置启动首页为login.jsp--> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list>

(2)设置登陆和注册Servlet

<!--设置servlet--> <servlet> <servlet-name>loginServlet</servlet-name> <servlet-class>com.java.servlet.LoginServlet</servlet-class> </servlet> <!--设置servlet的url--> <servlet-mapping> <servlet-name>loginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <!--设置servlet--> <servlet> <servlet-name>registerServlet</servlet-name> <servlet-class>com.java.servlet.RegisterServlet</servlet-class> </servlet> <!--设置servlet的url--> <servlet-mapping> <servlet-name>registerServlet</servlet-name> <url-pattern>/register</url-pattern> </servlet-mapping> 7. 编写LoginServlet代码 package com.java.servlet; import com.java.dao.UserDao; import com.java.dao.impl.UserDaoImpl; import com.java.domain.User; 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; /** * @Author shaonaiyi@163.com * @Date 2022/3/6 12:40 * @Description 登录Servlet */ @WebServlet(name = "/login") public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8"); // 获取前端页面传过来的值 String username = req.getParameter("username"); String password = req.getParameter("password"); String role = req.getParameter("role"); // 执行查询数据库逻辑 UserDao userDao = new UserDaoImpl(); User user = userDao.login(username, password); // 如果根据用户名和密码能查得到值 if (user != null) { int roleDb = user.getRole(); // 权限的选择跟数据库不匹配时,且不是管理员用户时,返回无权限 if (roleDb != Integer.parseInt(role) && roleDb != 0) { req.setAttribute("message", "无权限登录"); req.getRequestDispatcher("/defeat.jsp").forward(req,resp); } else { req.setAttribute("user", user); req.getRequestDispatcher("/success.jsp").forward(req,resp); } } else { // 用户名或者密码错误执行以下代码 req.setAttribute("message", "用户名或者密码错误"); req.getRequestDispatcher("/defeat.jsp").forward(req,resp); } } } 8. 编写RegisterServlet代码 package com.java.servlet; import com.java.dao.UserDao; import com.java.dao.impl.UserDaoImpl; import com.java.domain.User; 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; /** * @Author shaonaiyi@163.com * @Date 2022/3/6 16:38 * @Description 注册servlet */ @WebServlet(name = "/register") public class RegisterServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPut(req, resp); } @Override protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8"); // id不需要传进来,角色默认注册是普通用户,无法注册管理员 String username = req.getParameter("username"); String password = req.getParameter("password"); User user = new User(); user.setUsername(username); user.setPassword(password); UserDao userDao = new UserDaoImpl(); if (userDao.register(user)) { System.out.println("注册成功"); // 注册成功,跳转登录页面 req.getRequestDispatcher("register-success.jsp").forward(req,resp); } else { System.out.println("注册失败"); req.setAttribute("message", "注册失败"); req.getRequestDispatcher("register.jsp").forward(req,resp); } } }

至此,后端代码已经编写好了,还需要完成前端页面代码。

0x04 编写前端代码 1. 编写login.jsp代码 <%-- Created by IntelliJ IDEA. User: shaonaiyi Date: 2022/3/6 Time: 14:47 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登录界面</title> <style type="text/css"> body{ background-position: center; background-repeat: no-repeat; } </style> </head> <body> <div style="text-align:center;margin-top:120px"> <h2>登录页面</h2> <form action="/login" method="post"> <table style="margin-left:40%"> <tr> <td>用户名:</td> <td><input type="text" size="21" name="username"/></td> </tr> <tr> <td>密码:</td> <td><input type="text" size="21" name="password"/></td> </tr> <tr> <td>角色:</td> <td> <input type="radio" name="role" value="0" checked="checked">管理员 <input type="radio" name="role" value="1">普通用户 </td> </tr> </table> <input type="submit" value="登录"/> <input type="reset" value="重置"/> </form> <a href="register.jsp">跳转注册</a> </div> </body> </html> 2. 编写success.jsp代码 <%@ page import="com.java.domain.User" %><%-- Created by IntelliJ IDEA. User: shaonaiyi Date: 2022/3/6 Time: 14:59 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登录成功</title> </head> <body> <h1>登录成功!</h1> <br> <font color="red"> <% User user = (User)request.getAttribute("user"); String username = user.getUsername(); %> 欢迎您: <% out.print(username); %> </font> </body> </html> 3. 编写defeat.jsp代码 <%-- Created by IntelliJ IDEA. User: shaonaiyi Date: 2022/3/6 Time: 14:59 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登录失败</title> </head> <body> <h1>登录失败!</h1> <font color="red"> <% if(request.getAttribute("message")!= null){ out.print(request.getAttribute("message")); } %> </font> <br> <a href="login.jsp">重新登录</a> </body> </html> 4. 编写register.jsp代码 <%-- Created by IntelliJ IDEA. User: shaonaiyi Date: 2022/3/6 Time: 16:37 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>注册界面</title> <style type="text/css"> body{ background-repeat: no-repeat; background-position: center; } </style> </head> <body> <div style="text-align:center;margin-top: 120px"> <form action="/register" method="post"> <table style="margin-left:40%"> <h2>用户注册</h2> <tr> <td>用户名:</td> <td><input name="username" type="text" size="21"></td> </tr> <tr> <td>密码:</td> <td><input name="password" type="password" size="21"></td> </tr> </table> <input type="submit" value="注册"> <input type="reset" value="重置"> </form> <a href="login.jsp">跳转登录</a> </form> </div> </body> </html> 5. 编写register-success.jsp代码 <%@ page import="com.java.domain.User" %><%-- Created by IntelliJ IDEA. User: shaonaiyi Date: 2022/3/6 Time: 14:59 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>注册成功</title> </head> <body> <h1>注册成功!</h1> <br> <a href="login.jsp">跳转登录</a> <a href="register.jsp">继续注册</a> </body> </html> 0xFF 总结 本篇教程内容比较长,适合初学者学习,但是也需要有一点基础,比如环境的配置,但如果你稍微有点基础,操作一下这篇文章是非常不错的,特别是代码。关于JavaWeb其他文章参考: JavaWeb项目如何配置Servlet 使用Eclipse打开IDEA写的JavaWeb项目【全网唯一教程】

邵奈一 原创不易,如转载请标明出处,教育是一生的事业。



1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #jsp登录注册完整代码 #公众号 #微信