mvc設計模式實現簡單登入跳轉
阿新 • • 發佈:2019-02-04
MVC模式
MVC最初應用於桌面程式中,M指資料模型,V指使用者介面,C指控制器,是Xerox PARC在20世紀80年代為程式語言“Smalltalk-80”發明的一種軟體設計模式,至今已被廣泛使用。基於JavaEE的Web應用開發,經歷了Model1和Model2的不同時代。
Model1:
在Model 1中,不使用Servlet,JSP和JavaBean協作共同完成任務,不是真正的MVC模式。
優點:架構簡單,適合小型專案的開發。
缺點:JSP職責過重,可維護性較差。
Model2:
Model 2已經是MVC設計思想下的架構,Servlet充當控制器,JSP充當檢視,JavaBean作為模型。瀏覽器的請求都提交給Servlet,Servlet例項化JavaBean處理請求,並根據處理結果跳轉到不同的JSP頁面,生成響應到客戶端瀏覽器。JavaBean可以使用JDBC訪問資料庫。
優點:職責清晰,適合大、中型專案。
缺點:不適合小型專案(主要是層過多)
專案結構和資料庫表,DBUtils工具類筆者前面文章有這裡就不放了
建立實體類User
package com.entity; public class User { private Long id; private String userName; private String password; private Integer age; private String gender; private String address; public Long getId() { return id; } public void setId(Long 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 Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public User(String userName, String password) { super(); this.userName = userName; this.password = password; } }
編寫Dao
package com.dao; import java.sql.SQLException; import com.utils.DBUtils; public class UserDao { /** * 根據使用者名稱和密碼查詢滿足條件的使用者數 * @param username * @param password * @return */ public Long queryUserByNamePwd(String username,String password){ String sql = "select count(*) from t_user where UserName = ? and Password =?"; try { return (Long) DBUtils.executeScalar(sql, username,password); } catch (SQLException e) { e.printStackTrace(); } return 0L; } }
編寫service
package com.service;
import com.dao.UserDao;
import com.entity.User;
public class UserService {
private UserDao dao = new UserDao();
/**
* 登入驗證
* @param username 使用者名稱
* @param password 密碼
* @return true:驗證通過 false:驗證失敗
*/
public boolean login(User user){
Long result = dao.queryUserByNamePwd(user.getUserName(), user.getPassword());
return result > 0;
}
}
編寫servlet,並在制器中呼叫Service的方法
package com.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.entity.User;
import com.service.UserService;
public class LoginServlet extends HttpServlet {
//呼叫service
private UserService service = new UserService();
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("pwd");
User user = new User(username,password);
if(service.login(user)){
resp.sendRedirect("index.jsp");
}else{
resp.sendRedirect("login.jsp");
}
}
}
編寫登入jsp,並在檢視中指定Servlet
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'login.jsp' starting page</title>
</head>
<body>
<form action="LoginServlet" method="POST">
<table>
<tr>
<td>使用者名稱</td>
<td><input type="text" name="username" id="username"></td>
</tr>
<tr>
<td>密碼</td>
<td><input type="password" name="pwd" id="pwd"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="登入">
</td>
</tr>
</table>
</form>
</body>
</html>