JavaWeb實現使用者登入與註冊功能(伺服器)
阿新 • • 發佈:2021-08-24
本文例項為大家分享了Web實現使用者登入與註冊功能的具體程式碼,供大家參考,具體內容如下
用到的知識
客戶端:HTML ()
伺服器:JAVA基礎 JSP Servlet JDBC Tomcat
:
用到的Jar包 druid資料庫連線池 dbutils JDBC資料庫操作工具 MySQL jar包
總體結構:
客戶端資料庫部分網址
思路:
伺服器部分採用JavaEE三層架構
(1)、表現層:通俗講就是展現給使用者的介面,即使用者在使用一個系統的時候他的所見所得。
(2)、業務邏輯層:針對具體問題的操作,也可以說是對資料層的操作,對資料業務邏輯處理。
(3)、資料訪問層:該層所做事務直接操作資料庫,針對資料的增添、刪除、修改、查詢等。
先建立基本的資料夾架構,三層的資料夾依次為web ,servlet ,DAO。 此外還有其他相關資料夾工具類utils,JAVABean類pojo,測試類test 。依次實現從DAO層到Servce層再到Web層。
資料夾架構
資原始檔 jdbc.properties
username=root password=123456 url=jdbc:mysql://localhost:3306/book driverClassName=com.mysql.jdbc.Driver initialSize=5 maxActive=10
一、DAO層
0.寫好JAVABean User類
package com.book.pojo; public class User { private Integer id; private String username; private String password; private String email; public User() { } public User(Integer id,String username,String password,String email) { this.id = id; this.username = username; this.password = password; this.email = email; } public Integer getId() { return id; } public void setId(Integer 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; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User{" + "id=" + id + ",username='" + username + '\'' + ",password='" + password + '\'' + ",email='" + email +'\'' + '}'; } }
1.先實現資料連線
JDBCUtils
package com.book.utils; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; public class JDBCUtils { private static DruidDataSource druidDataSource; //資料庫連線池初始化 static { try { InputStream resourceAsStream = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");//類載入器預設是從classPath路徑載入資源 Properties properties = new Properties(); properties.load(resourceAsStream); //建立資料庫連線池 druidDataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { System.out.println("資料庫連線池初始化異常"); } } //獲取資料庫連線池中的連線 public static Connection getConnection() { Connection connection= null; try { connection = druidDataSource.getConnection(); } catch (SQLException throwables) { throwables.printStackTrace(); } return connection; } public static void close(Connection connection) { try { connection.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } public static void main(String[] argwww.cppcns.coms) { JDBCUtils jdbcUtils=new JDBCUtils(); System.out.println(jdbcUtils.getConnection()); } }
2.測試連線是否成功
3.編寫BaseDAO 實現對資料庫的基本通用操作
package com.book.DAO;
import com.book.utils.JDBCUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public abstract class BaseDAO {
private QueryRunner queryRunner=new QueryRunner();
//資料庫通用操作,使用dbutils來操作
//用來執行updata,delete,insert
public int updata(String sql,Object...objects){
Connection connection= JDBCUtils.getConnection();
try {
return queryRunner.update(connection,sql,objects);//返回影響的行數
} catch (SQLException throwables) {
throwables.printStackTrace();
uZSLpYvA}
return -1;
}
//用來執行查詢操作
public <T>T queryForOne(Class<T>clazz,String sql,Object...objects){
Connection connection=JDBCUtils.getConnection();
try {
return queryRunner.query(connection,new BeanHandler<T>(clazz),objects);
} catch (Exception throwables) {
throwables.printStackTrace();
}
return null;
}
//查詢多個結果
public <T>List<T> queryForList(Class<T>clazz,Object...objects){
Connection connection=JDBCUtils.getConnection();
List<T>list=new ArrayList<>();
try {
list=queryRunner.query(connection,new BeanListHandler<T>(clazz),objects);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return list;
}
//查詢單個數
public Object queryForSingleValue(String sql,Object...objects){
Connection connection= JDBCUtils.getConnection();
try {
return queryRunner.query(connection,new ScalarHandler(),objects);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
}
4.編寫UserDAO介面確定需要的操作
package com.book.DAO; import com.book.pojo.User; public interface UserDAO { // 註冊時判斷是否該使用者名稱已經被註冊 根據使用者名稱查詢使用者資訊 如果返回null說明沒有該使用者 public User queryUserByUsername(String username); //註冊成功 儲存使用者資訊 public int saveUser(User user); //登入操作 根據使用者名稱和密碼查詢使用者 查不到返回null public User queryUserByUsernameAndPassword(String username,String password); }
5.UserDAOImpl實現UserDAO介面
package com.book.DAO; import com.book.pojo.User; //所犯錯誤:繼承的子類會有父類的全部方法,不要在子類中宣告父類物件,呼叫父類方法 public class UserDAOimpl extends BaseDAO implements UserDAO{ @Override public User queryUserByUsername(String username) { String sql="select * from users where username=?"; User user =queryForOne(User.class,username); return user; } //所犯錯誤:輸入的郵箱不能重複 @Override public int saveUser(User user) { String sql="INSERT INTO `users`(`username`,`password`,`email`) VALUES(?,?,?)"; int n; n = updata(sql,user.getUsername(),user.getPassword(),user.getEmail()); return n; } @Override public User queryUserByUsernameAndPassword(String username,String password) { String sql="select * from users where username=? and password=?"; User user=queryForOne(User.class,username,password); return user; } }
二、Servlet層
1.UserServce介面確定業務需要的方法,用來與Web層進行互動
package com.book.servlet; import com.book.pojo.User; //業務層一個業務一個方法 public interface UserServce { //註冊業務 註冊成功將使用者儲存到資料庫中 public void registUser(User user); //登入業務 public User login(User user); //檢查使用者名稱是否可用 返回true表示使用者名稱已存在 public boolean existUsername(String username); }
2.UserServceImpl類實現UserServce介面
package com.book.servlet; import com.book.DAO.UserDAO; import com.book.DAO.UserDAOimpl; import com.book.pojo.User; public class UserServceImpl implements UserServce { private UserDAO userDAO=new UserDAOimpl(); @Override public void registUser(User user) { userDAO.saveUser(user); } @Override public User login(User user) { return userDAO.queryUserByUsernameAndPassword(user.getUsername(),user.getPassword()); } @Override public boolean existUsername(String username) { //使用者名稱不存在 if(userDAO.queryUserByUsername(username)==null){ return false; }else { return true; } } }
三、Web層
1.註冊操作
package com.book.web; import com.book.pojo.User; import com.book.servlet.UserServce; import com.book.servlet.UserServceImpl; 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 RegistServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException { UserServce userServce=new UserServceImpl(); //獲取請求引數 String username=req.getParameter("username"); String password=req.getParameter("password"); String email=req.getParameter("email"); String code=req.getParameter("code"); //判斷驗證碼是否正確 忽略大小寫 if("6n6np".equalsIgnoreCase(code)){ //判斷是否存在使用者名稱 if(!userServce.existUsername(username)){ //不存在則將註冊資訊寫入資料庫 User user=new User(null,password,email); userServce.registUser(user); //請求轉發到註冊成功頁面 req.getRequestDispatcher("/pages/user/regist_success.jsp").forward(req,resp); }else{ System.out.println("使用者名稱已存在"); //跳轉到註冊頁面 req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp); } }else { System.out.println("驗證碼錯誤"); //跳轉到註冊頁面 req.getRequestDispatcher("/pages/user/login.jsp").forward(req,resp); } } }
2.登入操作
package com.book.web; import com.book.pojo.User; import com.book.servlet.UserServce; import com.book.servlet.UserServceImpl; 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 UserServce userServce=new UserServceImpl(); @Override protected void doPost(HttpServletRequest req,IOException { //獲取請求引數 String username=req.getParameter("username"); String password=req.getParameter("password"); User user=new User(null,null); //判斷使用者的賬號密碼是否正確 if(userServce.login(user)!=null){ //登入成功跳轉到登入成功頁面 System.out.println("登入成功"); req.getRequestDispatcher("/pages/user/login_success.jsp").forward(req,resp); }else{ //賬號或密碼不正確 System.out.println("賬號或密碼不正確"); req.getRequestDispatcher("/pages/user/login.jsp").forward(req,resp); } } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。