前言
在之前的兩期中,我們完成了Mysql資料庫表的創建以及Html界面的設計,本期我們將完成最后一部分——用戶登錄功能的設計,
其主要用到:JDBC,Servlet,Java面向物件等知識
其基本原理:登錄界面提交后,通過一個servlet小程式對用戶提交相關資訊來進行一個判斷,判斷的實作又通過JDBC來連接資料庫,通過Java代碼實作一個用戶類,將其相關資料資訊與Mysql資料庫中內容進行比對,判斷完成后進行請求的轉發;若正確轉向登陸后網頁,若失敗轉向相關提示的界面,
正文
Java代碼部分:
Ⅰ.user類:和資料庫中的資訊對應,用來儲存請求頭中的用戶資訊
public class User {//用戶類
private int id;
private String userName;
private String userCipher;
public User() {
}
public User(int id, String userName, String userCipher) {
this.id = id;
this.userName = userName;
this.userCipher = userCipher;
}
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 getUserCipher() {
return userCipher;
}
public void setUserCipher(String userCipher) {
this.userCipher = userCipher;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", userCipher='" + userCipher + '\'' +
'}';
}
}
Ⅱ.userdao類(登錄實體類):實作用戶資訊的比對
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
public class UserDao {
private JdbcTemplate jdbcTemplate = new JdbcTemplate(MyJDBCUtils.getDataSource());
public User login(User loginUser) {
try {
String sql = "select * from userdata where username = ? and usercipher = ?";
User user = jdbcTemplate.queryForObject(sql,
new BeanPropertyRowMapper<User>(User.class),
loginUser.getUserName(), loginUser.getUserCipher());
return user;
} catch (DataAccessException e) {
e.printStackTrace();
return null;
}
}
}
Ⅲ.JDBCutils類:實作資料庫的連接
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
//JDBCUtils包,用來簡化鏈接資料庫池的步驟
public class MyJDBCUtils {
private static DataSource dataSource;//資料庫池
static {
try {
Properties pro = new Properties();//從檔案中獲得資訊
InputStream inputStream=MyJDBCUtils.class.getClassLoader().getResourceAsStream("javaDemo/druid.properties");
pro.load(inputStream);
dataSource = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//獲取鏈接
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
//釋放資源
public static void close(ResultSet resultSet, Connection connection, PreparedStatement preparedStatement) {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//獲取資料庫池
public static DataSource getDataSource() {
return dataSource;
}
}
Ⅳ.Test類:用來測驗資料庫是否可以成功連接
import org.junit.Test;
import java.lang.annotation.Target;
import java.sql.SQLException;
public class TestDome {
@Test
public void testLogin() throws SQLException {
User user=new User();
user.setUserName("小王");
user.setUserCipher("123456");
UserDao dao=new UserDao();
User nuser =dao.login(user);
System.out.println(nuser);
}
}
Ⅴ.properties組態檔
driverClassName = com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_1?&useSSL=false&serverTimezone=UTC&characterEncoding=utf8&characterSetResults=utf8
username=“你的資料庫用戶名”
password=“你的資料庫密碼”
# 初始化連接數量
initialSize=5
# 最大連接數
maxActive=10
# 最大等待時間(超時時間)
maxWait=3000
Servlet部分:
Ⅰ.loginServlet:用于用戶請求頭的處理和轉發
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(value = "/loginServlet")
public class loginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String usercipher = request.getParameter("usercipher");
User loginuser=new User();
loginuser.setUserName(username);
loginuser.setUserCipher(usercipher);
UserDao dao = new UserDao();
User user = dao.login(loginuser);
if (user == null) {
request.getRequestDispatcher("/failServlet").forward(request, response);
} else {
//存到請求域
request.setAttribute("user",user);
/*轉發到servlet*/
Servletrequest.getRequestDispatcher("/successServlet").forward(request, response);
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
Ⅱ.successServlet:登錄成功的狀態
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(value = "/successServlet")
public class successServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user = (User) request.getAttribute("user");
if (user != null) {
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("<h1>用戶" + user.getUserName() + "歡迎回來</h1>");
response.sendRedirect("/Web_war_exploded/CC-Page.html");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
Ⅲ.failServlet:登錄失敗的狀態
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(value = "/failServlet")
public class failServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("<h1>登錄失敗,用戶名或密碼錯誤</h1>");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
所用的的包

最終效果:


結語
以上就是本次用戶登錄專案的所有內容,在初次的實作程序中我們可能并非一帆風順,作者在這當中也曾遇到許多棘手的問題,但通過CSDN這個社區,雖然程序曲折,但最侄訓是成功解決困難,在后面的文章作者也會分享些該用戶登錄案例中常見的一些問題以及對于這些問題的解決方案,敬請期待!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/293943.html
標籤:java
上一篇:java 方法參考
