準備工作:
導入所需要的jar包,導入到web目錄下的WEB-INF目錄下的lib包中,並將其加入到模塊中 包放在另外一個。包可以在網上網上搜索
如下圖:
配置數據庫文件 druid.properties
可能出現的問題:
1.不能連接到數據庫
- 解決方法: 應該是電腦上的數據庫版本和此項目中的mysql-connection-java的jar版本不一致,重新下載導入即可
2.問題中出現一大堆亂碼等問題:
- 解決方法: 將url修改爲如下:
jdbc:mysql:///day14?charactarEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///day14 #day14爲數據庫名稱 可以自己創建數據庫
username=root
password=123456
initialSize=5
maxActive=10
maxWait=3000
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/anliLogin/loginServlet" method="post">
用戶名:<input type="text" name="username"> <br>
密碼:<input type="password" name="password"><br>
<input type="submit" value="登錄">
</form>
</body>
</html>
需要注意的是: from中的action中寫的路徑應該是/虛擬路徑/登錄的Servlet路徑
1.創建User類
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
2.創建JDBC工具類,使用Druid連接池
public class JDBCUtils {
private static DataSource ds;
static {
try {
/**
* 1.加載配置文件
*/
Properties pro=new Properties();
//使用ClassLoader加載配置文件,獲取字節輸入流
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.創建UserDao類,操作數據庫中User類的方法
public class UserDao {
private JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());
/**
* 登錄方法
* @param loginUser
* @return
*/
public User login(User loginUser){
try {
String sql="select * from user where username=? and password=?";
User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), loginUser.getUsername(), loginUser.getPassword());
return user;
}catch (Exception e){ //如果查找不到賬號密碼,就拋出異常
e.printStackTrace(); //記錄日誌
return null;
}
}
}
4.Servlet部分:
1. LoginServlet.java
2. 如果用戶名和密碼正確,則轉到successServlet.java。否則就是FailServlet.java
LoginServlet部分:
@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.設置編碼
req.setCharacterEncoding("utf-8");
//2.獲取請求參數
/*String username=req.getParameter("username");
String password=req.getParameter("password");
//3.封裝user對象
User loginUser = new User();
loginUser.setUsername(username);
loginUser.setPassword(password);*/
Map<String,String[]> map=req.getParameterMap();
User loginUser=new User();
try {
BeanUtils.populate(loginUser,map); //可以封裝多份數據
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//4.調用UserDao的login方法
UserDao dao = new UserDao();
User user=dao.login(loginUser);
//5.判斷user
if(user==null){
req.getRequestDispatcher("/failServlet").forward(req,resp);
}else {
req.setAttribute("user",user);
req.getRequestDispatcher("/successServlet").forward(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
SuccessServlet.java
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//獲取request域中共享的user對象
User user = (User) req.getAttribute("user");
if (user != null) {
//設置編碼
resp.setContentType("text/html;charset=utf-8");
//輸出
resp.getWriter().write("登錄成功!" + user.getUsername() + ",歡迎您");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
FailServlet.java
@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//設置編碼
resp.setContentType("text/html;charset=utf-8");
//輸出
resp.getWriter().write("登錄失敗,用戶名或密碼錯誤!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}