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>