案例:用户登录界面最全详解(JavaWeb)
一.用戶登錄案例需求:
? ??? ? 1.編寫login.html登錄頁面
?? ??? ??? ?username & password 兩個輸入框
?? ??? ?2.使用Druid數(shù)據(jù)庫連接池技術(shù),操作mysql,day14數(shù)據(jù)庫中user表
?? ??? ?3.使用JdbcTemplate技術(shù)封裝JDBC
?? ??? ?4.登錄成功跳轉(zhuǎn)到SuccessServlet展示:登錄成功!用戶名,歡迎您
?? ??? ?5.登錄失敗跳轉(zhuǎn)到FailServlet展示:登錄失敗,用戶名或密碼錯誤
二.功能分析
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖1 功能分析圖?
?三.開發(fā)步驟
? ? ? 3.1. 創(chuàng)建項目,導(dǎo)入html頁面,配置文件,jar包
?
?
? 3.2. 創(chuàng)建數(shù)據(jù)庫環(huán)境?
CREATE DATABASE day14;USE day14;CREATE TABLE USER(id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(32) UNIQUE NOT NULL,PASSWORD VARCHAR(32) NOT NULL);3.3創(chuàng)建前端html和css頁面
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><form action="/loginProject/loginServlet" method="post">用戶名:<input type="text" name="username"> <br>密碼:<input type="password" name="password"><br><input type="submit" value="登錄"></form> </body> </html>3.4?創(chuàng)建類User,封裝前端傳過來的參數(shù)信息
/*** 用戶的實體類*/public class User {private int id;private String username;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +'}';}}3.5?創(chuàng)建包util,編寫工具類JDBCUtils,主要建立數(shù)據(jù)庫連接池對象
package util;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;import javax.xml.crypto.Data;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.SQLException;import java.util.Properties;/*** JDBC工具類 使用Durid連接池*/public class JDBCUtils {private static DataSource ds ;static {try {//1.加載配置文件Properties pro = new Properties();//使用ClassLoader加載配置文件,獲取字節(jié)輸入流InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");pro.load(is);//2.初始化連接池對象ds = DruidDataSourceFactory.createDataSource(pro);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}/*** 獲取連接池對象*/public static DataSource getDataSource(){return ds;}/*** 獲取連接Connection對象*/public static Connection getConnection() throws SQLException {return ds.getConnection();}}3.6?創(chuàng)建包dao,創(chuàng)建類UserDao,提供login方法,主要是與mysql數(shù)據(jù)庫連接,對數(shù)據(jù)庫進(jìn)行操作
package dao;import cn.itcast.domain.User;import cn.itcast.util.JDBCUtils;import org.springframework.dao.DataAccessException;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;/*** 操作數(shù)據(jù)庫中User表的類*/public class UserDao {//聲明JDBCTemplate對象共用private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());/*** 登錄方法* @param loginUser 只有用戶名和密碼* @return user包含用戶全部數(shù)據(jù),沒有查詢到,返回null*/public User login(User loginUser){try {//1.編寫sqlString sql = "select * from user where username = ? and password = ?";//2.調(diào)用query方法User user = template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),loginUser.getUsername(), loginUser.getPassword());return user;} catch (DataAccessException e) {e.printStackTrace();//記錄日志return null;}}}3.7. 編寫LoginServlet類,主要是進(jìn)行前端參數(shù)數(shù)據(jù)和UserDao進(jìn)行交互
package servlet;import cn.itcast.dao.UserDao; import cn.itcast.domain.User;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;@WebServlet("/loginServlet") public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.設(shè)置編碼req.setCharacterEncoding("utf-8");/*//2.獲取請求參數(shù)String username = req.getParameter("username");String password = req.getParameter("password");//3.封裝user對象User loginUser = new User();loginUser.setUsername(username);loginUser.setPassword(password);*///2.封裝成對象,可以使用BeanUtils類直接封裝前端傳過來的參數(shù)信息;需提前導(dǎo)入jar包//下面等同于上面注釋的語句Users loginUsers=new Users();Map<String,String[]> pMap=req.getParameterMap();//使用BeanUtil封裝對象try {BeanUtils.populate(loginUsers, pMap);} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}//4.驗證用戶名和密碼//4.調(diào)用UserDao的login方法UserDao dao = new UserDao();User user = dao.login(loginUser);//5.判斷userif(user == null){//登錄失敗req.getRequestDispatcher("/failServlet").forward(req,resp);}else{//登錄成功//存儲數(shù)據(jù)req.setAttribute("user",user);//轉(zhuǎn)發(fā)req.getRequestDispatcher("/successServlet").forward(req,resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req,resp);}}3.8.編寫FailServlet和SuccessServlet類
@WebServlet("/successServlet")public class SuccessServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//獲取request域中共享的user對象User user = (User) request.getAttribute("user");if(user != null){//給頁面寫一句話//設(shè)置編碼response.setContentType("text/html;charset=utf-8");//輸出response.getWriter().write("登錄成功!"+user.getUsername()+",歡迎您");}} @WebServlet("/failServlet")public class FailServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//給頁面寫一句話//設(shè)置編碼response.setContentType("text/html;charset=utf-8");//輸出response.getWriter().write("登錄失敗,用戶名或密碼錯誤");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}}其他:
?login.html中form表單的action路徑的寫法
?? ??? ??? ?* 虛擬目錄+Servlet的資源路徑
?BeanUtils工具類,簡化數(shù)據(jù)封裝
?? ??? ??? ?* 用于封裝JavaBean的
?? ??? ??? ?1. JavaBean:標(biāo)準(zhǔn)的Java類
?? ??? ??? ??? ?1. 要求:
?? ??? ??? ??? ??? ?1. 類必須被public修飾
?? ??? ??? ??? ??? ?2. 必須提供空參的構(gòu)造器
?? ??? ??? ??? ??? ?3. 成員變量必須使用private修飾
?? ??? ??? ??? ??? ?4. 提供公共setter和getter方法
?? ??? ??? ??? ?2. 功能:封裝數(shù)據(jù)
最后:用戶登錄的模塊功能全部結(jié)束!!!
總結(jié)
以上是生活随笔為你收集整理的案例:用户登录界面最全详解(JavaWeb)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: argparse.ArgumentPar
- 下一篇: java打出三角形乘法表_Java 练习