请选择 进入手机版 | 继续访问电脑版

[JSP编程] 关于JSP用户登录毗连 数据库详情

[复制链接]
查看93 | 回复23 | 2021-9-12 04:17:30 | 显示全部楼层 |阅读模式
目次

关于JSP用户登录毗连 数据库详情

关于JSP用户登录毗连
数据库详情

关于JSP用户登录毗连
数据库详情

1、起首 创建po类

与数据库逐一 对应

关于JSP用户登录毗连
数据库详情

lombok天生 get set方法

  1. package com.ftzlover.demo.po;
  2. import lombok.Getter;
  3. import lombok.Setter;
  4. @Getter
  5. @Setter
  6. public class User {
  7. private Integer userId; // 用户ID
  8. private String uname; // 用户名称
  9. private String upwd; // 用户密码
  10. private String nick; // 用户昵称
  11. private String head; // 用户头像
  12. private String mood; // 用户签名
  13. }
复制代码

2、创建底层UserDao

关于JSP用户登录毗连
数据库详情

这里就是全部 创建好的层

3、创建UserService(一样平常 都会调用UserDao)

  1.  private UserDao userDao = new UserDao();
复制代码

4、写web层UserSrevlet

注意 :

  1. 起首 必要 写@WebServlet("/user")在顶端,
  2. 接下来让其调用service层private UserService userService = new UserService();
  3. 然后让后让这个类继承 HttpServlet
  1. public class UserServlet extends HttpServlet {
复制代码

4.1 重写方法 

  1. @Override
  2. protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
复制代码

4.2创建vo层并在内里 创建ResultInfo类用于封装返回数据

创建状态码code 提示信息 返回对象

  1. @Getter
  2. @Setter
  3. public class ResultInfo<T> {
  4. private Integer code; // 状态码 成功=1,失败=0
  5. private String msg; // 提示信息
  6. private T result; // 返回的对象(字符串、JavaBean、集合、Map等)
  7. }
复制代码

5、开始从Dao开始写

Dao层:(数据访问层:数据库中的增编削 查操作)通过用户名查询用户对象, 返回用户对象

获取数据库毗连

  1. 定义sql语句
  2. 预编译
  3. 设置参数
  4.  实行 查询,返回效果 集
  5. 判定 并分析效果 集
  6. 关闭资源
  1. package com.ftzlover.demo.dao;
  2. import com.ftzlover.demo.po.User;
  3. import com.ftzlover.demo.util.DBUtil;
  4. import java.sql.Connection;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. /**
  8. * Dao层:(数据访问层:数据库中的增删改查操作)
  9. * 通过用户名查询用户对象, 返回用户对象
  10. * 1. 获取数据库连接
  11. * 2. 定义sql语句
  12. * 3. 预编译
  13. * 4. 设置参数
  14. * 5. 执行查询,返回结果集
  15. * 6. 判断并分析结果集
  16. * 7. 关闭资源
  17. */
  18. public class UserDao {
  19. public User queryUserByName(String userName){
  20. //首先创建对象
  21. User user = null;
  22. Connection connection = null;
  23. PreparedStatement preparedStatement = null; //预编译对象
  24. ResultSet resultSet = null;
  25. try {
  26. // 1. 获取数据库连接
  27. connection = DBUtil.getConnetion();
  28. // 2. 定义sql语句
  29. String sql = "select * from tb_user where uname = ?";
  30. // 3. 预编译
  31. preparedStatement = connection.prepareStatement(sql);
  32. // 4. 设置参数
  33. preparedStatement.setString(1, userName);
  34. // 5. 执行查询,返回结果集
  35. resultSet = preparedStatement.executeQuery();
  36. // 6. 判断并分析结果集
  37. if (resultSet.next()) {
  38. user = new User();
  39. user.setUserId(resultSet.getInt("userId"));
  40. user.setUname(userName);
  41. user.setHead(resultSet.getString("head"));
  42. user.setMood(resultSet.getString("mood"));
  43. user.setNick(resultSet.getString("nick"));
  44. user.setUpwd(resultSet.getString("upwd"));
  45. }
  46. } catch (Exception e) {
  47. e.printStackTrace();
  48. } finally {
  49. // 7. 关闭资源
  50. DBUtil.close(resultSet,preparedStatement,connection);
  51. }
  52. return user;
  53. }
  54. }
复制代码

6、开始写service层

  1. package com.ftzlover.demo.service;
  2. import cn.hutool.core.util.StrUtil;
  3. import cn.hutool.crypto.digest.DigestUtil;
  4. import com.ftzlover.demo.dao.UserDao;
  5. import com.ftzlover.demo.po.User;
  6. import com.ftzlover.demo.vo.ResultInfo;
  7. /*Service层:(业务逻辑层:参数判断、业务逻辑处理)
  8. 1. 判断参数是否为空
  9. 如果为空
  10. 设置ResultInfo对象的状态码和提示信息
  11. 返回resultInfo对象
  12. 2. 如果不为空,通过用户名查询用户对象
  13. 3. 判断用户对象是否为空
  14. 如果为空
  15. 设置ResultInfo对象的状态码和提示信息
  16. 返回resultInfo对象
  17. 4. 如果用户对象不为空,将数据库中查询到的用户对象的密码与前台传递的密码作比较 (将密码加密后再比较)
  18. 如果密码不正确
  19. 设置ResultInfo对象的状态码和提示信息
  20. 返回resultInfo对象
  21. 5. 如果密码正确
  22. 设置ResultInfo对象的状态码和提示信息
  23. 6. 返回resultInfo对象
  24. */
  25. public class UserService {
  26. private UserDao userDao = new UserDao();
  27. public ResultInfo<User> userLogin(String userName,String userPwd){
  28. ResultInfo<User> resultInfo = new ResultInfo<>();
  29. // 数据回显:当登录实现时,将登录信息返回给页面显示
  30. User u = new User();
  31. u.setUname(userName);
  32. u.setUpwd(userPwd);
  33. // 设置到resultInfo对象中
  34. resultInfo.setResult(u);
  35. // 1. 判断参数是否为空
  36. if (StrUtil.isBlank(userName) || StrUtil.isBlank(userPwd)) {
  37. // 如果为空 设置ResultInfo对象的状态码和提示信息
  38. resultInfo.setCode(0);
  39. resultInfo.setMsg("用户姓名或密码不能为空!");
  40. // 返回resultInfo对象
  41. return resultInfo;
  42. }
  43. // 2. 如果不为空,通过用户名查询用户对象
  44. User user = userDao.queryUserByName(userName);
  45. // 3. 判断用户对象是否为空
  46. if (user == null) {
  47. // 如果为空,设置ResultInfo对象的状态码和提示信息
  48. resultInfo.setCode(0);
  49. resultInfo.setMsg("该用户不存在!");
  50. // 返回resultInfo对象
  51. return resultInfo;
  52. }
  53. // 4. 如果用户对象不为空,将数据库中查询到的用户对象的密码与前台传递的密码作比较 (将密码加密后再比较)
  54. // 将前台传递的密码按照MD5算法的方式加密
  55. userPwd = DigestUtil.md5Hex(userPwd);
  56. // 判断加密后的密码是否与数据库中的一致
  57. if (!userPwd.equals(user.getUpwd())) {
  58. // 如果密码不正确
  59. resultInfo.setCode(0);
  60. resultInfo.setMsg("用户密码不正确!");
  61. return resultInfo;
  62. }
  63. resultInfo.setCode(1);
  64. resultInfo.setResult(user);
  65. return resultInfo;
  66. }
  67. }
复制代码

7、编写末了 的Servelt层

7.1 用户登陆

  1. package com.ftzlover.demo.web;
  2. import com.ftzlover.demo.po.User;
  3. import com.ftzlover.demo.service.UserService;
  4. import com.ftzlover.demo.vo.ResultInfo;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.Cookie;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import java.io.IOException;
  12. @WebServlet("/user")
  13. public class UserServlet extends HttpServlet {
  14. private UserService userService = new UserService();
  15. @Override
  16. protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  17. // 接收用户行为
  18. String actionName = request.getParameter("actionName");
  19. if ("login".equals(actionName)) {
  20. // 用户登录
  21. userLogin(request, response);
  22. }
  23. }
  24. /**
  25. * 用户登录
  26. 1. 获取参数 (姓名、密码)
  27. 2. 调用Service层的方法,返回ResultInfo对象
  28. 3. 判断是否登录成功
  29. 如果失败
  30. 将resultInfo对象设置到request作用域中
  31. 请求转发跳转到登录页面
  32. 如果成功
  33. 将用户信息设置到session作用域中
  34. 判断用户是否选择记住密码(rem的值是1)
  35. 如果是,将用户姓名与密码存到cookie中,设置失效时间,并响应给客户端
  36. 如果否,清空原有的cookie对象
  37. 重定向跳转到index页面
  38. * @param request
  39. * @param response
  40. */
  41. private void userLogin(HttpServletRequest request, HttpServletResponse response) {
  42. // 1. 获取参数 (姓名、密码)
  43. String userName = request.getParameter("userName");
  44. String userPwd = request.getParameter("userPwd");
  45. // 2. 调用Service层的方法,返回ResultInfo对象
  46. ResultInfo<User> resultInfo = userService.userLogin(userName, userPwd);
  47. // 3. 判断是否登录成功
  48. if (resultInfo.getCode() == 1) { // 如果成功
  49. // 将用户信息设置到session作用域中
  50. request.getSession().setAttribute("user", resultInfo.getResult());
  51. // 判断用户是否选择记住密码(rem的值是1)
  52. String rem = request.getParameter("rem");
  53. // 如果是,将用户姓名与密码存到cookie中,设置失效时间,并响应给客户端
  54. if ("1".equals(rem)) {
  55. // 得到Cookie对象
  56. Cookie cookie = new Cookie("user",userName +"-"+userPwd);
  57. // 设置失效时间
  58. cookie.setMaxAge(3*24*60*60);
  59. // 响应给客户端
  60. response.addCookie(cookie);
  61. } else {
  62. // 如果否,清空原有的cookie对象
  63. Cookie cookie = new Cookie("user", null);
  64. // 删除cookie,设置maxage为0
  65. cookie.setMaxAge(0);
  66. // 响应给客户端
  67. response.addCookie(cookie);
  68. }
  69. // 重定向跳转到index页面
  70. try {
  71. response.sendRedirect("index.html");
  72. } catch (IOException e) {
  73. e.printStackTrace();
  74. }
  75. } else { // 失败
  76. // 将resultInfo对象设置到request作用域中
  77. request.setAttribute("resultInfo", resultInfo);
  78. // 请求转发跳转到登录页面
  79. try {
  80. request.getRequestDispatcher("login.jsp").forward(request, response);
  81. } catch (ServletException e) {
  82. e.printStackTrace();
  83. } catch (IOException e) {
  84. e.printStackTrace();
  85. }
  86. }
  87. }
  88. }
复制代码

附件:util层的DBUtil

  1. package com.ftzlover.demo.util;
  2. import java.io.InputStream;
  3. import java.sql.*;
  4. import java.util.Properties;
  5. public class DBUtil {
  6. // 得到配置文件对象
  7. private static Properties properties = new Properties();
  8. static {
  9. try {
  10. // 加载配置文件(输入流)
  11. InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
  12. System.out.println("是否获取到流对象:" + in);
  13. System.out.println("流对象:" + properties);
  14. // 通过load()方法将输入流的内容加载到配置文件对象中
  15. properties.load(in);
  16. // 通过配置文件对象的getProperty()方法获取驱动名,并加载驱动
  17. Class.forName(properties.getProperty("jdbcName"));
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. public static Connection getConnetion() {
  23. Connection connection = null;
  24. try {
  25. // 得到数据库连接的相关信息
  26. String dbUrl = properties.getProperty("dbUrl");
  27. System.out.println(dbUrl);
  28. String dbName = properties.getProperty("dbName");
  29. System.out.println(dbName);
  30. String dbPwd = properties.getProperty("dbPwd");
  31. System.out.println(dbName);
  32. // 得到数据库连接
  33. connection = DriverManager.getConnection(dbUrl, dbName, dbPwd);
  34. System.out.println(connection);
  35. } catch (SQLException throwables) {
  36. throwables.printStackTrace();
  37. }
  38. return connection;
  39. }
  40. public static void close(ResultSet resultSet,
  41. PreparedStatement preparedStatement,
  42. Connection connection) {
  43. try {
  44. // 判断资源对象如果不为空,则关闭
  45. if (resultSet != null) {
  46. resultSet.close();
  47. }
  48. if (preparedStatement != null) {
  49. preparedStatement.close();
  50. }
  51. if (connection != null) {
  52. connection.close();
  53. }
  54. } catch (Exception e) {
  55. e.printStackTrace();
  56. }
  57. }
  58. }
复制代码

8、示例

关于JSP用户登录毗连
数据库详情

关于JSP用户登录毗连
数据库详情

非常 炫酷的登陆界面加美满 的后台登陆界面截图:

关于JSP用户登录毗连
数据库详情

关于JSP用户登录毗连
数据库详情

关于JSP用户登录毗连
数据库详情

数据库代码:新建数据库名叫my 建表名叫tb_user

  1. CREATE TABLE `tb_user` (
  2. `userId` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键,自动增长',
  3. `uname` varchar(50) NOT NULL COMMENT '用户名',
  4. `upwd` varchar(50) DEFAULT NULL COMMENT '密码',
  5. `nick` varchar(50) DEFAULT NULL COMMENT '昵称',
  6. `head` varchar(100) DEFAULT NULL COMMENT '头像',
  7. `mood` varchar(500) DEFAULT NULL COMMENT '心情',
  8. PRIMARY KEY (`userId`)
  9. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
复制代码

到此这篇关于关于JSP用户登录毗连 数据库详情的文章就先容 到这了,更多干系 JSP用户登录毗连 数据库内容请搜刮 脚本之家从前 的文章或继续欣赏 下面的干系 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 后会无期846 | 2021-9-12 17:50:11 | 显示全部楼层
听admin楼主一席话,省我十本书!
回复

使用道具 举报

avatar 123457125 | 2021-9-18 09:49:18 | 显示全部楼层
有机会找admin楼主好好聊聊!
回复

使用道具 举报

avatar 123456819 | 2021-9-18 10:57:52 | 显示全部楼层
禽兽不如应该不是说admin楼主的的吧?
回复

使用道具 举报

avatar 卬起頭丶嶶笑 | 2021-9-19 15:48:51 | 显示全部楼层
admin楼主英明!
回复

使用道具 举报

avatar 网路游民甲厝 | 2021-9-20 12:26:41 | 显示全部楼层
精神病院在通缉admin楼主!
回复

使用道具 举报

avatar 核桃脆 | 2021-9-24 10:28:11 | 显示全部楼层
admin楼主会死的很有节奏的!
回复

使用道具 举报

avatar ssffgsa | 2021-9-24 10:28:14 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,影视频道的网站所有电影和连续剧都可以免费看的。访问地址:http://tv.mxswl.com
回复

使用道具 举报

avatar 里干整团 | 2021-9-26 13:07:24 | 显示全部楼层
我回帖admin楼主给加积分吗?
回复

使用道具 举报

avatar 话筒他常te | 2021-10-3 08:28:52 | 显示全部楼层
最近精神病院在打折,admin楼主去看看吧?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则