黄色电影一区二区,韩国少妇自慰A片免费看,精品人妻少妇一级毛片免费蜜桃AV按摩师 ,超碰 香蕉

關于JSP用戶登錄連接數(shù)據(jù)庫詳情
目錄

關于jsp用戶登錄連接數(shù)據(jù)庫詳情

1、首先創(chuàng)建po類

與數(shù)據(jù)庫一一對應

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、創(chuàng)建底層userdao

這里就是所有創(chuàng)建好的層

3、創(chuàng)建userservice(一般都會調(diào)用userdao)

 private userdao userdao = new userdao();

4、寫web層usersrevlet

注意:

  • 首先需要寫@webservlet("/user")在頂端,
  • 接下來讓其調(diào)用service層private userservice userservice = new userservice();
  • 然后讓后讓這個類繼承 httpservlet
  • public class userservlet extends httpservlet {

    4.1 重寫方法 

    @override
        protected void service(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
    
    

    4.2創(chuàng)建vo層并在里面創(chuàng)建resultinfo類用于封裝返回數(shù)據(jù)

    創(chuàng)建狀態(tài)碼code 提示信息 返回對象

    @getter
    @setter
    public class resultinfo<t> {
    
        private integer code; // 狀態(tài)碼 成功=1,失敗=0
        private string msg; // 提示信息
        private t result; // 返回的對象(字符串、javabean、集合、map等)
    
    }
    
    

    5、開始從dao開始寫

    dao層:(數(shù)據(jù)訪問層:數(shù)據(jù)庫中的增刪改查操作)通過用戶名查詢用戶對象, 返回用戶對象

    獲取數(shù)據(jù)庫連接

  • 定義sql語句
  • 預編譯
  • 設置參數(shù)
  •  執(zhí)行查詢,返回結(jié)果集
  • 判斷并分析結(jié)果集
  • 關閉資源
  • 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層:(數(shù)據(jù)訪問層:數(shù)據(jù)庫中的增刪改查操作)
     *         通過用戶名查詢用戶對象, 返回用戶對象
     *             1. 獲取數(shù)據(jù)庫連接
     *             2. 定義sql語句
     *             3. 預編譯
     *             4. 設置參數(shù)
     *             5. 執(zhí)行查詢,返回結(jié)果集
     *             6. 判斷并分析結(jié)果集
     *             7. 關閉資源
     */
    public class userdao {
    
        public user queryuserbyname(string username){
            //首先創(chuàng)建對象
            user user = null;
            connection connection = null;
            preparedstatement preparedstatement = null;  //預編譯對象
            resultset resultset = null;
    
            try {
                // 1. 獲取數(shù)據(jù)庫連接
                connection = dbutil.getconnetion();
                // 2. 定義sql語句
                string sql = "select * from tb_user where uname = ?";
                // 3. 預編譯
                preparedstatement = connection.preparestatement(sql);
                // 4. 設置參數(shù)
                preparedstatement.setstring(1, username);
                // 5. 執(zhí)行查詢,返回結(jié)果集
                resultset = preparedstatement.executequery();
                // 6. 判斷并分析結(jié)果集
                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;
    /*service層:(業(yè)務邏輯層:參數(shù)判斷、業(yè)務邏輯處理)
            1. 判斷參數(shù)是否為空
            如果為空
            設置resultinfo對象的狀態(tài)碼和提示信息
            返回resultinfo對象
            2. 如果不為空,通過用戶名查詢用戶對象
            3. 判斷用戶對象是否為空
            如果為空
            設置resultinfo對象的狀態(tài)碼和提示信息
            返回resultinfo對象
            4. 如果用戶對象不為空,將數(shù)據(jù)庫中查詢到的用戶對象的密碼與前臺傳遞的密碼作比較 (將密碼加密后再比較)
            如果密碼不正確
            設置resultinfo對象的狀態(tài)碼和提示信息
            返回resultinfo對象
            5. 如果密碼正確
            設置resultinfo對象的狀態(tài)碼和提示信息
            6. 返回resultinfo對象
    
     */
    public class userservice {
        private userdao userdao = new userdao();
    
        public resultinfo<user> userlogin(string username,string userpwd){
            resultinfo<user> resultinfo = new resultinfo<>();
    
            // 數(shù)據(jù)回顯:當?shù)卿泴崿F(xiàn)時,將登錄信息返回給頁面顯示
            user u = new user();
            u.setuname(username);
            u.setupwd(userpwd);
            // 設置到resultinfo對象中
            resultinfo.setresult(u);
    
            //  1. 判斷參數(shù)是否為空
            if (strutil.isblank(username) || strutil.isblank(userpwd)) {
                // 如果為空 設置resultinfo對象的狀態(tài)碼和提示信息
                resultinfo.setcode(0);
                resultinfo.setmsg("用戶姓名或密碼不能為空!");
                // 返回resultinfo對象
                return resultinfo;
    
            }
    
            // 2. 如果不為空,通過用戶名查詢用戶對象
            user user = userdao.queryuserbyname(username);
    
    
            // 3. 判斷用戶對象是否為空
            if (user == null) {
                // 如果為空,設置resultinfo對象的狀態(tài)碼和提示信息
                resultinfo.setcode(0);
                resultinfo.setmsg("該用戶不存在!");
                // 返回resultinfo對象
                return resultinfo;
            }
    
            //  4. 如果用戶對象不為空,將數(shù)據(jù)庫中查詢到的用戶對象的密碼與前臺傳遞的密碼作比較 (將密碼加密后再比較)
            // 將前臺傳遞的密碼按照md5算法的方式加密
            userpwd = digestutil.md5hex(userpwd);
    
            // 判斷加密后的密碼是否與數(shù)據(jù)庫中的一致
            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);
    
            }
    
    
        }
        /**
         * 用戶登錄
         1. 獲取參數(shù) (姓名、密碼)
         2. 調(diào)用service層的方法,返回resultinfo對象
         3. 判斷是否登錄成功
         如果失敗
            將resultinfo對象設置到request作用域中
            請求轉(zhuǎn)發(fā)跳轉(zhuǎn)到登錄頁面
         如果成功
            將用戶信息設置到session作用域中
               判斷用戶是否選擇記住密碼(rem的值是1)
                  如果是,將用戶姓名與密碼存到cookie中,設置失效時間,并響應給客戶端
                  如果否,清空原有的cookie對象
         重定向跳轉(zhuǎn)到index頁面
         * @param request
         * @param response
         */
    
        private void userlogin(httpservletrequest request, httpservletresponse response) {
            // 1. 獲取參數(shù) (姓名、密碼)
            string username = request.getparameter("username");
            string userpwd = request.getparameter("userpwd");
    
            // 2. 調(diào)用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);
                }
                // 重定向跳轉(zhuǎn)到index頁面
                try {
                    response.sendredirect("index.html");
                } catch (ioexception e) {
                    e.printstacktrace();
                }
    
            } else { // 失敗
                // 將resultinfo對象設置到request作用域中
                request.setattribute("resultinfo", resultinfo);
                // 請求轉(zhuǎn)發(fā)跳轉(zhuǎn)到登錄頁面
                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()方法將輸入流的內(nèi)容加載到配置文件對象中
                properties.load(in);
                // 通過配置文件對象的getproperty()方法獲取驅(qū)動名,并加載驅(qū)動
                class.forname(properties.getproperty("jdbcname"));
            } catch (exception e) {
                e.printstacktrace();
            }
        }
    
    
        public static connection getconnetion() {
            connection connection = null;
            try {
                // 得到數(shù)據(jù)庫連接的相關信息
                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);
                // 得到數(shù)據(jù)庫連接
                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、示例

    十分炫酷的登陸界面加完善的后臺登陸界面截圖:

    數(shù)據(jù)庫代碼:新建數(shù)據(jù)庫名叫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用戶登錄連接數(shù)據(jù)庫詳情的文章就介紹到這了,更多相關jsp用戶登錄連接數(shù)據(jù)庫內(nèi)容請搜索碩編程以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持碩編程!

    相關文章