返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >关于JSP用户登录连接数据库详情
  • 613
分享到

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

2024-04-02 19:04:59 613人浏览 安东尼
摘要

目录关于jsP用户登录连接数据库详情1、首先创建po类2、创建底层UserDao3、创建UserService(一般都会调用UserDao)4、写WEB层UserSrevlet4.1

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

1、首先创建po类

与数据库一一对应

lombok生成get set方法


package com.ftzlover.demo.po;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {

    private Integer userId; // 用户ID
    private String uname; // 用户名称
    private String upwd; // 用户密码
    private String nick; // 用户昵称
    private String head; // 用户头像
    private String mood; // 用户签名
}

2、创建底层UserDao

这里就是所有创建好的层

3、创建UserService(一般都会调用UserDao)

 private UserDao userDao = new UserDao();

4、写web层UserSrevlet

注意:

  1. 首先需要写@WebServlet("/user")在顶端,
  2. 接下来让其调用service层private UserService userService = new UserService();
  3. 然后让后让这个类继承 httpservlet

public class UserServlet extends HttpServlet {

4.1 重写方法 


@Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

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

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


@Getter
@Setter
public class ResultInfo<T> {

    private Integer code; // 状态码 成功=1,失败=0
    private String msg; // 提示信息
    private T result; // 返回的对象(字符串、JavaBean、集合、Map等)

}

5、开始从Dao开始写

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

获取数据库连接

  1. 定义sql语句
  2. 预编译
  3. 设置参数
  4.  执行查询,返回结果集
  5. 判断并分析结果集
  6. 关闭资源

package com.ftzlover.demo.dao;

import com.ftzlover.demo.po.User;
import com.ftzlover.demo.util.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;


public class UserDao {

    public User queryUserByName(String userName){
        //首先创建对象
        User user = null;
        Connection connection = null;
        PreparedStatement preparedStatement = null;  //预编译对象
        ResultSet resultSet = null;

        try {
            // 1. 获取数据库连接
            connection = DBUtil.getConnetion();
            // 2. 定义sql语句
            String sql = "select * from tb_user where uname = ?";
            // 3. 预编译
            preparedStatement = connection.prepareStatement(sql);
            // 4. 设置参数
            preparedStatement.setString(1, userName);
            // 5. 执行查询,返回结果集
            resultSet = preparedStatement.executeQuery();
            // 6. 判断并分析结果集
            if (resultSet.next()) {
                user = new User();
                user.setUserId(resultSet.getInt("userId"));
                user.setUname(userName);
                user.setHead(resultSet.getString("head"));
                user.setMood(resultSet.getString("mood"));
                user.setNick(resultSet.getString("nick"));
                user.setUpwd(resultSet.getString("upwd"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 7. 关闭资源
            DBUtil.close(resultSet,preparedStatement,connection);
        }


        return  user;
    }
}

6、开始写service层


package com.ftzlover.demo.service;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import com.ftzlover.demo.dao.UserDao;
import com.ftzlover.demo.po.User;
import com.ftzlover.demo.vo.ResultInfo;

public class UserService {
    private UserDao userDao = new UserDao();

    public ResultInfo<User> userLogin(String userName,String userPwd){
        ResultInfo<User> resultInfo = new ResultInfo<>();

        // 数据回显:当登录实现时,将登录信息返回给页面显示
        User u = new User();
        u.setUname(userName);
        u.setUpwd(userPwd);
        // 设置到resultInfo对象中
        resultInfo.setResult(u);

        //  1. 判断参数是否为空
        if (StrUtil.isBlank(userName) || StrUtil.isBlank(userPwd)) {
            // 如果为空 设置ResultInfo对象的状态码和提示信息
            resultInfo.setCode(0);
            resultInfo.setMsg("用户姓名或密码不能为空!");
            // 返回resultInfo对象
            return resultInfo;

        }

        // 2. 如果不为空,通过用户名查询用户对象
        User user = userDao.queryUserByName(userName);


        // 3. 判断用户对象是否为空
        if (user == null) {
            // 如果为空,设置ResultInfo对象的状态码和提示信息
            resultInfo.setCode(0);
            resultInfo.setMsg("该用户不存在!");
            // 返回resultInfo对象
            return resultInfo;
        }

        //  4. 如果用户对象不为空,将数据库中查询到的用户对象的密码与前台传递的密码作比较 (将密码加密后再比较)
        // 将前台传递的密码按照MD5算法的方式加密
        userPwd = DigestUtil.md5Hex(userPwd);

        // 判断加密后的密码是否与数据库中的一致
        if (!userPwd.equals(user.getUpwd())) {
            // 如果密码不正确
            resultInfo.setCode(0);
            resultInfo.setMsg("用户密码不正确!");
            return resultInfo;
        }
        resultInfo.setCode(1);
        resultInfo.setResult(user);
        return resultInfo;
    }
}

7、编写最后的Servelt层

7.1 用户登陆


package com.ftzlover.demo.web;

import com.ftzlover.demo.po.User;
import com.ftzlover.demo.service.UserService;
import com.ftzlover.demo.vo.ResultInfo;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/user")
public class UserServlet extends HttpServlet {

    private UserService userService = new UserService();

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        // 接收用户行为
        String actionName = request.getParameter("actionName");
        if ("login".equals(actionName)) {

            // 用户登录
            userLogin(request, response);

        }


    }
    

    private void userLogin(HttpServletRequest request, HttpServletResponse response) {
        // 1. 获取参数 (姓名、密码)
        String userName = request.getParameter("userName");
        String userPwd = request.getParameter("userPwd");

        // 2. 调用Service层的方法,返回ResultInfo对象
        ResultInfo<User> resultInfo = userService.userLogin(userName, userPwd);

        // 3. 判断是否登录成功
        if (resultInfo.getCode() == 1) { // 如果成功
            //  将用户信息设置到session作用域中
            request.getSession().setAttribute("user", resultInfo.getResult());
            //  判断用户是否选择记住密码(rem的值是1)
            String rem = request.getParameter("rem");
            // 如果是,将用户姓名与密码存到cookie中,设置失效时间,并响应给客户端
            if ("1".equals(rem)) {
                // 得到Cookie对象
                Cookie cookie = new Cookie("user",userName +"-"+userPwd);
                // 设置失效时间
                cookie.setMaxAge(3*24*60*60);
                // 响应给客户端
                response.addCookie(cookie);
            } else {
                // 如果否,清空原有的cookie对象
                Cookie cookie = new Cookie("user", null);
                // 删除cookie,设置maxage为0
                cookie.setMaxAge(0);
                // 响应给客户端
                response.addCookie(cookie);
            }
            // 重定向跳转到index页面
            try {
                response.sendRedirect("index.html");
            } catch (IOException e) {
                e.printStackTrace();
            }

        } else { // 失败
            // 将resultInfo对象设置到request作用域中
            request.setAttribute("resultInfo", resultInfo);
            // 请求转发跳转到登录页面
            try {
                request.getRequestDispatcher("login.jsp").forward(request, response);
            } catch (ServletException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }


}

附件:util层的DBUtil


package com.ftzlover.demo.util;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;


public class DBUtil {

    // 得到配置文件对象
    private static Properties properties = new Properties();

    static {
        try {
            // 加载配置文件(输入流)
            InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
            System.out.println("是否获取到流对象:" + in);
            System.out.println("流对象:" + properties);
            // 通过load()方法将输入流的内容加载到配置文件对象中
            properties.load(in);
            // 通过配置文件对象的getProperty()方法获取驱动名,并加载驱动
            Class.forName(properties.getProperty("jdbcName"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public static Connection getConnetion() {
        Connection connection = null;
        try {
            // 得到数据库连接的相关信息
            String dbUrl = properties.getProperty("dbUrl");
            System.out.println(dbUrl);
            String dbName = properties.getProperty("dbName");
            System.out.println(dbName);
            String dbPwd = properties.getProperty("dbPwd");
            System.out.println(dbName);
            // 得到数据库连接
            connection = DriverManager.getConnection(dbUrl, dbName, dbPwd);
            System.out.println(connection);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        return connection;
    }


    public static void close(ResultSet resultSet,
                             PreparedStatement preparedStatement,
                             Connection connection) {

        try {
            // 判断资源对象如果不为空,则关闭
            if (resultSet != null) {
                resultSet.close();
            }
            if (preparedStatement != null) {
                preparedStatement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

8、示例

十分炫酷的登陆界面加完善的后台登陆界面截图:

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


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

到此这篇关于关于JSP用户登录连接数据库详情的文章就介绍到这了,更多相关JSP用户登录连接数据库内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 关于JSP用户登录连接数据库详情

本文链接: https://lsjlt.com/news/134803.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 关于JSP用户登录连接数据库详情
    目录关于JSP用户登录连接数据库详情1、首先创建po类2、创建底层UserDao3、创建UserService(一般都会调用UserDao)4、写web层UserSrevlet4.1...
    99+
    2024-04-02
  • 关于node+mysql数据库连接池连接
     mysql有两种连接方式:一种是直接连接 另一种是池化连接,我们这篇讲的是池化连接。 为了让解惑,我简答的写份直接连接的代码,如下: var mysql = requi...
    99+
    2023-05-16
    node+mysql node连接mysql
  • Servlet连接数据库实现用户登录的实现示例
    目录一、需求:二、先复习一下JDBC1.概述:2.开发步骤:三、代码实现:1.登录界面代码:2.登录成功界面:3.servlet代码:4.数据库数据5.登录成功页面:6.登录失败界面...
    99+
    2024-04-02
  • 详细说明关于Java的数据库连接(JDBC)
    目录Java的数据库连接(JDBC)1、什么是JDBC2、JDBC的原理3、演示JDBC的使用4、数据库连接方式5、JDBC的查询6、SQL注入7、预处理查询7.1 查询 已解决注入...
    99+
    2024-04-02
  • 如何使用JSP连接MYSQL数据库
    这篇文章主要介绍如何使用JSP连接MYSQL数据库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 第一步你已经完成了,但是我想,那个只是最基础的。最迫切...
    99+
    2024-04-02
  • mysql登录数据库连接的方法
    这篇文章主要介绍了mysql登录数据库连接的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql登录数据库连接的方法:首先打开Workb...
    99+
    2024-04-02
  • jsp怎么使用mysql数据库连接池
    jsp使用mysql数据库连接池的方法在conf目录中打开context.xml文件,并在文件写如下代码;Web-INF/web.xml然后打开web.xml文件,在文件写入代码;GuestBookjdbc/ConnectionPoolja...
    99+
    2024-04-02
  • Spring事务管理中关于数据库连接池详解
    目录Spring事务管理环境搭建标准配置声明式事务总结SqlSessionFactoryXML中构建SqlSessionFactory获得SqlSession的实例代码实现作用域(S...
    99+
    2022-12-09
    Spring数据库连接池 Spring事务管理
  • 关于mysql数据库连接编码问题
    前几天使用springboot做一个数据库查询功能,发现使用中文就无法查到数据,经过测试SQL语句是没有问题的,但是就是查询不到数据,一直显示为null。 后来,我灵机一动尝试了一下查询参数改为英文,显示出查询结果是正常...
    99+
    2023-04-14
    mysql数据库 mysql编码
  • SqlServer数据库远程连接访问设置详情
    目录步骤一:设置sql server数据库1.登录sql server数据库2.点击根目录右键,选择属性3.设置服务器的方面选项4.设置sql server 配置管理器步骤二:设置防...
    99+
    2024-04-02
  • SQL Server使用登录名连接数据库报错:18456
    文章目录 解决办法 错误:18456是因密码或用户名错误而使身份验证失败,如果用户名密码正确,则该登录名没有连接数据库引擎权限,登录权限也被无情剥夺了,开启服务器【SQL Serve...
    99+
    2023-10-26
    数据库 服务器 运维
  • 关于C#连接SQL Server时提示用户登录失败的解决方法
    在用C#开发windows端程序并连接SQL Server时有可能会遇到数据库登录失败的问题,报错现象如下图所示: 报错信息如下: System.Data.SqlClient.S...
    99+
    2024-04-02
  • 阿里云服务器JSP连接数据库步骤详解
    一、阿里云服务器JSP连接数据库步骤 本文将详细解释如何在阿里云服务器上使用JSP技术连接数据库,包括安装MySQL数据库、创建数据库、建立连接以及实现数据操作等步骤。通过阅读本文,您将能够掌握使用JSP连接数据库的基本方法和技巧。二、安装...
    99+
    2024-01-26
    阿里 详解 步骤
  • 关于MybatisPlus配置双数据库驱动连接数据库问题
    最近项目中需要用到2种数据库驱动连接数据库,下面我们基于MybatisPlus实现一下 具体实现 1、在pom.xml中添加如下依赖: <properties> ...
    99+
    2024-04-02
  • Sql Server数据库远程连接访问设置详情
    目录步骤一:设置sql server数据库1.登录sql server数据库2.点击根目录右键,选择属性3.设置服务器的方面选项4.设置sql server 配置管理器步骤二:设置防火墙入站规则步骤三:华为云服务器安装s...
    99+
    2024-04-02
  • 使用jsp、HttpServlet完成一个登录、注册,并用MySQL连接数据进行操作
    第一步 我们先MySQL创建数据库,写数据 这两个是写数据库的软件。  启动MySQL对应的版本型号。 user表 判断存在(有没有login的数据库,有就删掉)即删除。 DROP DATABASE IF EXISTS lo...
    99+
    2023-10-28
    数据库 mysql sql java servlet
  • 如何进行ORACLE数据库连接与登录校验
    本篇文章为大家展示了如何进行ORACLE数据库连接与登录校验,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。   Oracle数...
    99+
    2024-04-02
  • PHP连接数据库实现简单的登录页面
    最后实现结果如下图所示: 如果输入的用户名或密码为空,则会弹出对话框提示 同样的,如果输入的密码不正确也会弹出对话框提示:  登录成功页面:  具体实现代码如下: HTML代码: 登陆 来源地址:https:/...
    99+
    2023-10-03
    php html css 数据库
  • php连接数据库注册和登录失败原因
    PHP连接数据库注册和登录失败原因PHP是一种流行的开源脚本语言,可用于创建动态网站和应用程序。数据库是包含重要信息的重要组件,因此,PHP连接数据库是Web开发中必不可少的部分。在开发流程中,注册和登录是最基本的功能。然而,有时候这些功能...
    99+
    2023-05-14
    php
  • 查看用户连接到特定数据库
    平时运维中,要发现用户连接到哪个数据库,使用dmv 视图达不到需要的 关键信息: 比如主机名,进程号等。 使用如下sql,可以查到主机名和应用程序和本地进程号,如果确认该连接是非法的,可以进行kill。 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作