Web层设计目标
a.清晰的层次规划
清晰的层次是将Web层中控制流以及调用业务对象(由Java处理的控制对象)从表示(由JSP租组件处理)分离出来。
b.保持JSP页面代码纯净
保持JSP页面代码纯净是指JSP页面中不在是JAVA代码,而是必要的根据用户动作初始化业务流程与显示结果。他应该只包含控制逻辑,而不是业务逻辑。
Web层分成三个不同的对象:
a.控制对象:接收用户输入并引用业务逻辑来创建和修改模型对象。(C:Controller)
b.模型对象:提供业务逻辑方法以及业务数据。(M:Model)
b.视图对象:显示模型数据。(V:View)
MVC 将交互式应用程序组织成三个独立的模块:
应用程序模块,用于表示数据和业务逻辑
数据表示
控制器,用于发送请求和控制应用程序的流程
MVC设计模式原理:
a.视图:代表用户交互界面
b.模型:业务流程/状态的处理以及业务规则的制定
c.控制器:控制器可以理解为从用户接受请求,将模型与视图匹配在一起,共同完成用户的请求
d.MVC 的优点
a.使用同一模型处理多个请求
b.模型层和视图层松散耦合
c.可以很灵活地设计 和实现模型对象
e.MVC 体系结构的各种对象包括:
a.模型对象 表示 Web 应用程序的数据元素,用户可与这些数据元素进行交互
b.视图对象 提供模型组件以开发用户界面
c.控制器对象 充当应用程序视图对象和模型对象之间的中间对象
f.MVC处理过程
首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理;然后模型根据用户请求进行相应的业务逻辑处理,并返回数据;最后控制器调用相应的视图 来格式化模型返回的数据,并通过视图呈现给用户。
基于 MVC 体系结构的应用程序-用户登录
步骤一、新建表t_user,sql脚本如下:
... CREATE TABLE t_user( name varchar(20) primary key, -- 姓名 pwd varchar(20) NOT NULL -- 密码 ) ...
步骤二、新建web工程ch12,在工程下建立四个包:com.bo,com.dao,com.vo,com.control,在vo包下新建Use.java实体类,代码如下:
public class User {
String name;
String pwd; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; }
}
步骤三、在dao包下编写数据访问类UserDAO.java,定义方法findById
public User findById(String name) { User user ; Connection conn; PreparedStatement ps; ResultSet rs; try { conn = DbUtil.getConn(); String sql = “select * from t_user where name=?"; ps = conn.prepareStatement(sql); ps.setString(1,name); rs = ps.executeQuery(); while (rs.next()) { user = new User(); user.setName(rs.getString("name")); user.setPwd(rs.getString("pwd"));} } catch (Exception ex) { ex.printStackTrace(); } return user; }
步骤四、在bo包下编写UserBO.java业务逻辑类
//业务逻辑层 public class UserBO { UserDAO userdao = new UserDAO(); //检测用户有效性 public boolean checkUser(String name,String pwd){ boolean result = false; User user = userdao.findById(name); if(user!=null&&user.getPwd().equals(pwd)) { result = true; } return result; } }
步骤五、编写登录页面login.jsp
... <body> <center> <h3>用户登录</h3> <form action="userAction" method="post"> 用户名:<input type="text" name=“name"/><br/> 密码:<input type="password" name=“pwd"/><br/> <input type="submit" value="登录"/><br/> </form> </center> </body> ...
步骤六、在com.control包下编写UserAction.java用于登录验证
.............. //获取数据 String uname = request.getParameter(“name"); String pwd =request.getParameter("pwd"); boolean validate = userbo.checkUser(uname,pwd); if(validate) { //获取用户 User user = userdao.findById(uname); //把用户信息放到session中 session.setAttribute("loginUser", user); } else { response.sendRedirect("login.jsp"); } ..............