最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaWeb實(shí)戰(zhàn)之用Servlet+JDBC實(shí)現(xiàn)用戶(hù)登錄與注冊(cè)

 更新時(shí)間:2021年04月22日 10:29:20   作者:油炸冰可樂(lè)  
這篇文章主要介紹了JavaWeb實(shí)戰(zhàn)之用Servlet+JDBC實(shí)現(xiàn)用戶(hù)登錄與注冊(cè),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很大的幫助,需要的朋友可以參考下

一、前言

使用到的技術(shù)棧:

(1)JDBC

(2)Servlet

(3)MySQL

二、準(zhǔn)備工作

(1)書(shū)城用戶(hù)數(shù)據(jù)庫(kù)與表創(chuàng)建

(2)編寫(xiě)用戶(hù)類(lèi)對(duì)象JavaBean

(3)編寫(xiě)JdbcUtils對(duì)數(shù)據(jù)庫(kù)進(jìn)行交互(使用德魯伊數(shù)據(jù)庫(kù)連接池)

(4)編寫(xiě)web層

最終編寫(xiě)好的第二階段登陸注冊(cè)文件結(jié)構(gòu)為

在這里插入圖片描述

  • dao中定義了基礎(chǔ)的操作數(shù)據(jù)庫(kù)代碼,具體功能有

1.Insert、update、delete(修改)

2.查詢(xún)一個(gè)對(duì)象(返回一個(gè)對(duì)象)

3.查詢(xún)一個(gè)數(shù)組對(duì)象(數(shù)組返回多個(gè)對(duì)象)

4.返回某一個(gè)特定值對(duì)象(返回一個(gè)值)

  • pojo中定義著與數(shù)據(jù)庫(kù)用戶(hù)表類(lèi)
  • service中定義著需要實(shí)現(xiàn)的用戶(hù)業(yè)務(wù)

1.用戶(hù)注冊(cè)

2.用戶(hù)登錄

3.用戶(hù)姓名查詢(xún)

  • test中編寫(xiě)對(duì)JDBC、UserDao、UserServiceImplTest的測(cè)試
  • utils中編寫(xiě)JDBC工具類(lèi)

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

2.關(guān)閉數(shù)據(jù)庫(kù)連接

  • web中編寫(xiě)兩個(gè)Servlet程序

1.登錄請(qǐng)求

2.注冊(cè)請(qǐng)求

三、編寫(xiě)web層

(1)用戶(hù)注冊(cè)請(qǐng)求

使用Servlet進(jìn)行注冊(cè)表單處理,需要提前設(shè)置base標(biāo)簽為工程路徑

  • 在RegisterServlet類(lèi)讓它繼承HttpServlet
  • 重寫(xiě)doPost請(qǐng)求方法
  • 在web.xml中配置ServletServlet-mapping
  • 在HTML頁(yè)面表單action處配置操作,同時(shí)method為post請(qǐng)求
  • 拿到表單中出現(xiàn)的用戶(hù)信息,然后:

1.檢查驗(yàn)證碼是否正確(第一階段寫(xiě)死驗(yàn)證碼為abcd)

2.檢查數(shù)據(jù)庫(kù)中是否存在該用戶(hù)姓名

可用,向數(shù)據(jù)庫(kù)中進(jìn)行注冊(cè)同時(shí)跳轉(zhuǎn)登錄頁(yè)面

不可用,再次跳轉(zhuǎn)注冊(cè)頁(yè)面

以上的處理模塊,借助在service中編寫(xiě)好的UserServiceImpl實(shí)現(xiàn)類(lèi)進(jìn)行實(shí)現(xiàn),UserServiceImpl又借助了UserDao進(jìn)行實(shí)現(xiàn);

(2)用戶(hù)登錄

使用Servlet進(jìn)行登錄表單處理,也需要提前設(shè)置base標(biāo)簽為工程路徑

  • 在LoginServlet類(lèi)讓它繼承HttpServlet
  • 重寫(xiě)doPost請(qǐng)求方法
  • 在web.xml中配置ServletServlet-mapping
  • 在HTML頁(yè)面表單action處配置操作,同時(shí)method為post請(qǐng)求
  • 拿到表單中出現(xiàn)的用戶(hù)信息,然后:

1.獲取HTML頁(yè)面提交的表單

2.檢查數(shù)據(jù)庫(kù)中是否存在一個(gè)用戶(hù)名與密碼都與獲取相同的對(duì)象

有,跳轉(zhuǎn)成功頁(yè)面

沒(méi)有,提示用戶(hù)輸入錯(cuò)誤,重新跳轉(zhuǎn)登錄頁(yè)面

package wzy.web;

import wzy.dao.UserDao;
import wzy.pojo.User;
import wzy.service.UserService;
import wzy.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class loginServlet extends HttpServlet {

    private UserService userService = new UserServiceImpl();

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 實(shí)現(xiàn)用戶(hù)登錄
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        User user = userService.login(new User(null, username, password, null));

        if (user != null) {
            // 登陸成功
            req.getRequestDispatcher("/pages/user/login_success.html").forward(req,resp);
        } else {
            // 登陸失敗
            req.getRequestDispatcher("/pages/user/login.html").forward(req,resp);
        }
    }
}
package wzy.web;

import wzy.pojo.User;
import wzy.service.UserService;
import wzy.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RegisterServlet extends HttpServlet {
    private UserService userService = new UserServiceImpl();
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String email = req.getParameter("email");
        String code = req.getParameter("code");

        //        2、檢查 驗(yàn)證碼是否正確  === 寫(xiě)死,要求驗(yàn)證碼為:abcde
        if (code.equalsIgnoreCase("abcde")){
            // 3、檢查 用戶(hù)名是否可用
            if (userService.existsUsername(username)){
                System.out.println("用戶(hù)名[" + username + "]已存在");
                // 跳轉(zhuǎn)到登陸頁(yè)面
                req.getRequestDispatcher("/pages/user/regist.html").forward(req,resp);
            }else {
                // 可用
                userService.registerUser(new User(null,username,password,email));
                req.getRequestDispatcher("/pages/user/regist_success.html").forward(req,resp);
            }
        }else {
            System.out.println("驗(yàn)證碼 ["+code+"] 錯(cuò)誤");
            req.getRequestDispatcher("/pages/user/regist.html").forward(req,resp);
        }
    }
}

到此這篇關(guān)于JavaWeb實(shí)戰(zhàn)之用Servlet+JDBC實(shí)現(xiàn)用戶(hù)登錄與注冊(cè)的文章就介紹到這了,更多相關(guān)JavaWeb實(shí)現(xiàn)用戶(hù)登錄與注冊(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中通過(guò)實(shí)現(xiàn)WebMvcConfigurer參數(shù)校驗(yàn)的方法示例

    SpringBoot中通過(guò)實(shí)現(xiàn)WebMvcConfigurer參數(shù)校驗(yàn)的方法示例

    這篇文章主要介紹了SpringBoot中通過(guò)實(shí)現(xiàn)WebMvcConfigurer參數(shù)校驗(yàn)的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java 線程池全面總結(jié)與詳解

    Java 線程池全面總結(jié)與詳解

    在一個(gè)應(yīng)用程序中,我們需要多次使用線程,也就意味著,我們需要多次創(chuàng)建并銷(xiāo)毀線程。而創(chuàng)建并銷(xiāo)毀線程的過(guò)程勢(shì)必會(huì)消耗內(nèi)存。而在Java中,內(nèi)存資源是及其寶貴的,所以,我們就提出了線程池的概念
    2021-10-10
  • Spring框架的ImportSelector詳細(xì)解讀

    Spring框架的ImportSelector詳細(xì)解讀

    這篇文章主要介紹了Spring框架的ImportSelector詳細(xì)解讀,Spring中一個(gè)非常重要的注解@Import中的ImportSelector接口的作用以及它到底有啥作用,也會(huì)捎帶一部分源碼說(shuō)一下DeferredImportSelector是干啥的,需要的朋友可以參考下
    2024-01-01
  • elasticsearch聚合查詢(xún)實(shí)踐示例

    elasticsearch聚合查詢(xún)實(shí)踐示例

    這篇文章主要為大家介紹了elasticsearch聚合查詢(xún)實(shí)踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • mybatis源碼解讀之executor包懶加載功能?

    mybatis源碼解讀之executor包懶加載功能?

    這篇文章主要介紹了mybatis源碼解讀之executor包懶加載功能,mybatis的懶加載的實(shí)現(xiàn)由executor包的loader子包支持,下面文章詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-02-02
  • Java根據(jù)Request獲取客戶(hù)端IP

    Java根據(jù)Request獲取客戶(hù)端IP

    這篇文章主要介紹了Java根據(jù)Request獲取客戶(hù)端IP的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-05-05
  • Springboot快速集成sse服務(wù)端推流(最新整理)

    Springboot快速集成sse服務(wù)端推流(最新整理)

    SSE?Server-Sent?Events是一種允許服務(wù)器向客戶(hù)端推送實(shí)時(shí)數(shù)據(jù)的技術(shù),它建立在?HTTP?和簡(jiǎn)單文本格式之上,提供了一種輕量級(jí)的服務(wù)器推送方式,通常也被稱(chēng)為“事件流”(Event?Stream),這篇文章主要介紹了Springboot快速集成sse服務(wù)端推流(最新整理),需要的朋友可以參考下
    2024-02-02
  • 淺談Java中是否直接可以使用enum進(jìn)行傳輸

    淺談Java中是否直接可以使用enum進(jìn)行傳輸

    這篇文章主要介紹了淺談Java中是否直接可以使用enum進(jìn)行傳輸,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java學(xué)習(xí)教程之定時(shí)任務(wù)全家桶

    Java學(xué)習(xí)教程之定時(shí)任務(wù)全家桶

    這篇文章主要給大家介紹了關(guān)于Java學(xué)習(xí)教程之定時(shí)任務(wù)全家桶的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • java中的switch case語(yǔ)句使用詳解

    java中的switch case語(yǔ)句使用詳解

    這篇文章主要介紹了java中的switch case語(yǔ)句使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論

汝城县| 永川市| 辽中县| 永昌县| 三穗县| 绥棱县| 宜章县| 揭阳市| 甘孜县| 长武县| 手游| 池州市| 奉节县| 象州县| 博客| 弋阳县| 麻城市| 登封市| 岳西县| 嘉祥县| 化州市| 全州县| 沂南县| 石台县| 神池县| 卓尼县| 云龙县| 城口县| 高淳县| 榆林市| 铜鼓县| 松溪县| 乌兰浩特市| 镇康县| 攀枝花市| 齐河县| 吉木萨尔县| 伊宁县| 淮南市| 交口县| 三亚市|