JavaWeb實(shí)戰(zhàn)之用Servlet+JDBC實(shí)現(xiàn)用戶登錄與注冊(cè)
一、前言
使用到的技術(shù)棧:
(1)JDBC
(2)Servlet
(3)MySQL
二、準(zhǔn)備工作
(1)書(shū)城用戶數(shù)據(jù)庫(kù)與表創(chuàng)建
(2)編寫(xiě)用戶類對(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.查詢一個(gè)對(duì)象(返回一個(gè)對(duì)象)
3.查詢一個(gè)數(shù)組對(duì)象(數(shù)組返回多個(gè)對(duì)象)
4.返回某一個(gè)特定值對(duì)象(返回一個(gè)值)
- pojo中定義著與數(shù)據(jù)庫(kù)用戶表類
- service中定義著需要實(shí)現(xiàn)的用戶業(yè)務(wù)
1.用戶注冊(cè)
2.用戶登錄
3.用戶姓名查詢
- test中編寫(xiě)對(duì)JDBC、UserDao、UserServiceImplTest的測(cè)試
- utils中編寫(xiě)JDBC工具類
1.獲取數(shù)據(jù)庫(kù)連接
2.關(guān)閉數(shù)據(jù)庫(kù)連接
- web中編寫(xiě)兩個(gè)Servlet程序
1.登錄請(qǐng)求
2.注冊(cè)請(qǐng)求
三、編寫(xiě)web層
(1)用戶注冊(cè)請(qǐng)求
使用Servlet進(jìn)行注冊(cè)表單處理,需要提前設(shè)置base標(biāo)簽為工程路徑
- 在RegisterServlet類讓它繼承HttpServlet
- 重寫(xiě)doPost請(qǐng)求方法
- 在web.xml中配置Servlet與Servlet-mapping
- 在HTML頁(yè)面表單action處配置操作,同時(shí)method為post請(qǐng)求
- 拿到表單中出現(xiàn)的用戶信息,然后:
1.檢查驗(yàn)證碼是否正確(第一階段寫(xiě)死驗(yàn)證碼為abcd)
2.檢查數(shù)據(jù)庫(kù)中是否存在該用戶姓名
可用,向數(shù)據(jù)庫(kù)中進(jìn)行注冊(cè)同時(shí)跳轉(zhuǎn)登錄頁(yè)面
不可用,再次跳轉(zhuǎn)注冊(cè)頁(yè)面
以上的處理模塊,借助在service中編寫(xiě)好的UserServiceImpl實(shí)現(xiàn)類進(jìn)行實(shí)現(xiàn),UserServiceImpl又借助了UserDao進(jìn)行實(shí)現(xiàn);
(2)用戶登錄
使用Servlet進(jìn)行登錄表單處理,也需要提前設(shè)置base標(biāo)簽為工程路徑
- 在LoginServlet類讓它繼承HttpServlet
- 重寫(xiě)doPost請(qǐng)求方法
- 在web.xml中配置Servlet與Servlet-mapping
- 在HTML頁(yè)面表單action處配置操作,同時(shí)method為post請(qǐng)求
- 拿到表單中出現(xiàn)的用戶信息,然后:
1.獲取HTML頁(yè)面提交的表單
2.檢查數(shù)據(jù)庫(kù)中是否存在一個(gè)用戶名與密碼都與獲取相同的對(duì)象
有,跳轉(zhuǎn)成功頁(yè)面
沒(méi)有,提示用戶輸入錯(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)用戶登錄
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、檢查 用戶名是否可用
if (userService.existsUsername(username)){
System.out.println("用戶名[" + 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)用戶登錄與注冊(cè)的文章就介紹到這了,更多相關(guān)JavaWeb實(shí)現(xiàn)用戶登錄與注冊(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 解決Javaweb 提交表單到servlet時(shí)出現(xiàn)空白頁(yè)面,但網(wǎng)站不報(bào)錯(cuò)問(wèn)題
- JavaWeb Servlet實(shí)現(xiàn)網(wǎng)頁(yè)登錄功能
- Servlet開(kāi)發(fā)JavaWeb工程示例詳解
- JavaWeb項(xiàng)目Servlet無(wú)法訪問(wèn)問(wèn)題解決
- IDEA新建javaWeb以及Servlet簡(jiǎn)單實(shí)現(xiàn)小結(jié)
- JavaWeb Servlet中url-pattern的使用
- javaweb中ajax請(qǐng)求后臺(tái)servlet(實(shí)例)
- Javaweb中使用Servlet編寫(xiě)簡(jiǎn)單的接口案例詳解
相關(guā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
Spring框架的ImportSelector詳細(xì)解讀
這篇文章主要介紹了Spring框架的ImportSelector詳細(xì)解讀,Spring中一個(gè)非常重要的注解@Import中的ImportSelector接口的作用以及它到底有啥作用,也會(huì)捎帶一部分源碼說(shuō)一下DeferredImportSelector是干啥的,需要的朋友可以參考下2024-01-01
Springboot快速集成sse服務(wù)端推流(最新整理)
SSE?Server-Sent?Events是一種允許服務(wù)器向客戶端推送實(shí)時(shí)數(shù)據(jù)的技術(shù),它建立在?HTTP?和簡(jiǎn)單文本格式之上,提供了一種輕量級(jí)的服務(wù)器推送方式,通常也被稱為“事件流”(Event?Stream),這篇文章主要介紹了Springboot快速集成sse服務(wù)端推流(最新整理),需要的朋友可以參考下2024-02-02
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

