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

目录

  • 关于JSP用户登录连接数据库详情
    • 1、首先创建po类
    • 2、创建底层UserDao
    • 3、创建UserService(一般都会调用UserDao)
    • 4、写web层UserSrevlet
      • 4.1 重写方法
      • 4.2创建vo层并在里面创建ResultInfo类用于封装返回数据
    • 5、开始从Dao开始写
      • 6、开始写service层
        • 7、编写最后的Servelt层
          • 7.1 用户登陆
        • 8、示例

        关于JSP用户登录连接数据库详情 关于JSP用户登录连接数据库详情
        文章图片

        【关于JSP用户登录连接数据库详情】关于JSP用户登录连接数据库详情
        文章图片


        1、首先创建po类

        与数据库一一对应

        关于JSP用户登录连接数据库详情
        文章图片

        lombok生成get set方法
        package com.ftzlover.demo.po; import lombok.Getter; import lombok.Setter; @Getter@Setterpublic class User {private Integer userId; // 用户IDprivate 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 重写方法
        @Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        4.2创建vo层并在里面创建ResultInfo类用于封装返回数据
        创建状态码code 提示信息 返回对象

        @Getter@Setterpublic class ResultInfo {private Integer code; // 状态码 成功=1,失败=0private 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; /** *Dao层:(数据访问层:数据库中的增删改查操作) *通过用户名查询用户对象, 返回用户对象 *1. 获取数据库连接 *2. 定义sql语句 *3. 预编译 *4. 设置参数 *5. 执行查询,返回结果集 *6. 判断并分析结果集 *7. 关闭资源 */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); }returnuser; }}


        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; /*Service层:(业务逻辑层:参数判断、业务逻辑处理)1. 判断参数是否为空如果为空设置ResultInfo对象的状态码和提示信息返回resultInfo对象2. 如果不为空,通过用户名查询用户对象3. 判断用户对象是否为空如果为空设置ResultInfo对象的状态码和提示信息返回resultInfo对象4. 如果用户对象不为空,将数据库中查询到的用户对象的密码与前台传递的密码作比较 (将密码加密后再比较)如果密码不正确设置ResultInfo对象的状态码和提示信息返回resultInfo对象5. 如果密码正确设置ResultInfo对象的状态码和提示信息6. 返回resultInfo对象 */public class UserService {private UserDao userDao = new UserDao(); public ResultInfo userLogin(String userName,String userPwd){ResultInfo 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(); @Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 接收用户行为String actionName = request.getParameter("actionName"); if ("login".equals(actionName)) {// 用户登录userLogin(request, response); }}/*** 用户登录1. 获取参数 (姓名、密码)2. 调用Service层的方法,返回ResultInfo对象3. 判断是否登录成功如果失败将resultInfo对象设置到request作用域中请求转发跳转到登录页面如果成功将用户信息设置到session作用域中判断用户是否选择记住密码(rem的值是1)如果是,将用户姓名与密码存到cookie中,设置失效时间,并响应给客户端如果否,清空原有的cookie对象重定向跳转到index页面* @param request* @param response*/private void userLogin(HttpServletRequest request, HttpServletResponse response) {// 1. 获取参数 (姓名、密码)String userName = request.getParameter("userName"); String userPwd = request.getParameter("userPwd"); // 2. 调用Service层的方法,返回ResultInfo对象ResultInfo 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为0cookie.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、示例
        关于JSP用户登录连接数据库详情
        文章图片

        关于JSP用户登录连接数据库详情
        文章图片

        十分炫酷的登陆界面加完善的后台登陆界面截图:
        关于JSP用户登录连接数据库详情
        文章图片

        关于JSP用户登录连接数据库详情
        文章图片

        关于JSP用户登录连接数据库详情
        文章图片

        数据库代码:新建数据库名叫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用户登录连接数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

          推荐阅读