1.1.2 模型2和MVC
在模型1中,JSP页面嵌入了流程控制代码和部分的逻辑处理代码,我们可以将这部分代码提取出来,放到一个单独的角色中,这个角色就是控制器角色,而这样的Web架构就是模型2了。模型2符合MVC架构模式,MVC即模型-视图-控制器(Model-View-Controller)。
MVC架构有助于将应用程序分割成若干逻辑部件,使程序设计变得更加容易。MVC架构提供了一种按功能对各种对象进行分割的方法(这些对象是用来维护和表现数据的),其目的是为了将各对象间的耦合程度降至最低。MVC架构原本是为了将传统的输入(input)、处理(processing)和输出(output)任务运用到图形化用户交互模型中而设计的,但是,将这些概念运用到基于Web的企业级多层应用领域也是很适合的。
在MVC架构中,一个应用被分成三个部分:模型(Model)、视图(View)和控制器(Controller)。
模型代表应用程序的数据以及用于访问控制和修改这些数据的业务规则。当模型发生改变时,它会通知视图,并为视图提供查询模型相关状态的能力。同时,它也为控制器提供访问封装在模型内部的应用程序功能的能力。
视图用来组织模型的内容。它从模型那里获得数据并指定这些数据如何表现。当模型变化时,视图负责维护数据表现的一致性。视图同时将用户的请求通知控制器。
控制器定义了应用程序的行为。它负责对来自视图的用户请求进行解释,并把这些请求映射成相应的行为,这些行为由模型负责实现。在独立运行的GUI客户端,用户的请求可能是一些鼠标单击或是菜单选择操作。在一个Web应用程序中,它们的表现形式可能是一些来自客户端的GET或POST的HTTP请求。模型所实现的行为包括处理业务和修改模型的状态。根据用户请求和模型行为的结果,控制器选择一个视图作为对用户请求的响应。图1-2描述了在MVC应用程序中模型、视图、控制器三部分的关系。
|
| 图1-2 MVC模型、视图、控制器的关系图 |
|
| 图1-3 模型2架构示意图 |
Servlet充当控制器的角色,它接受请求,并且根据请求信息将它们分发给相应的JSP页面来产生响应。Servlet控制器还根据JSP视图的需求生成JavaBean的实例并输出给JSP环境。JSP视图可以通过直接调用JavaBean实例的方法或使用
下面我们按照模型2的架构重写用户登录验证的程序。在本例中,两个JavaBean类(UserBean和UserCheckBean)和welcome.jsp仍然用模型1例子中的程序,主要增加作为控制器使用的Servlet。
在模型2的login.jsp中,我们增加了一个隐藏输入域,如下:
服务器端的控制器可以根据这个隐藏字段的值来判断用户是请求登录表单,还是提交登录信息。
ControllerServlet类充当控制器,它接收用户的请求,根据请求的不同进行相应的处理,并选择对应的视图呈现给用户。例如,当用户提交登录表单时,ControllerServlet实例化UserBean对象保存用户登录信息,实例化UserCheckBean对象对用户登录信息进行验证,并根据登录成功与否选择欢迎或者失败页面呈现给用户。ControllerServlet类的代码如例1-6所示。
例1-6 ControllerServlet.java
package org.sunxin.struts2.ch01.model2.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import org.sunxin.struts2.ch01.model2.UserBean; public class ControllerServlet extends HttpServlet String action = request.getParameter("action"); //如果用户提交登录信息,则对用户登录信息进行验证 UserCheckBean uc = new UserCheckBean(user); if (uc.validate()) /** /** |
完整的代码请参看本书配套光盘中的ch01目录,测试时,输入URL:
http://localhost:8080/ch01/model2/login
本例中的JSP页面不包含任何的流程控制和业务处理逻辑,它只是简单地检索控制器创建的JavaBean对象,然后将动态内容插入到预定义的页面模板中。
采用模型2的架构,可以将页面的显示、业务逻辑的处理和流程的控制很清晰地区分开,JSP负责数据的显示,JavaBean负责承载数据以及业务逻辑的处理,Servlet负责流程的控制。采用模型2架构的Web应用程序很容易维护和扩展,因为作为视图的JSP页面之间没有直接的关联。另外,在大型项目的开发过程中,采用模型2的架构,可以充分利用前端页面设计人员和后端Java开发人员所掌握的不同技能,页面设计人员可以发挥自己的美术和设计才能来表现页面,程序开发人员可以发挥自己擅长逻辑思维的特点,实现项目中的业务逻辑处理。
在项目中,采用哪种模型要根据实际的业务需求来确定。一般来说,对于小型的、业务逻辑处理不多的应用,采用模型1比较合适。如果应用有着较复杂的逻辑,并且返回的视图也不同,那么采用模型2较为合适。
| 回书目 上一节 下一节 |
|
· Linux笔试面试题选摘测.. · 08年5月软考网管上午真.. · 性能测试从零开始 目录 · 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. · 08年5月各大网上书店及.. |
· 2008年5月24日软考试题.. · 软件设计师专家临考模.. · 上周网络管理员专家自.. · 网络工程师自测获奖名.. · 08年4月各大网上书店及.. · 系统分析师自测获奖名.. |
|
||||
| · CISSP认证成长之路 · SQL Server 2008/2005.. · SQL Server入门到精通 · 网络工程师职业规划与.. · 浏览器的战国时代 · 运营商封堵ADSL共享 中.. · 微软出价446亿美元收购.. · 技术人求职简历完备手册 |
· 开源虚拟化技术Xen · Windows Server 2008专.. · 隐私保护技术探讨 · 绿色IT人健康生存手册 · 杀毒软件评测专题 · 访问控制列表(ACL)介绍 · Vista SP1对决XP SP3 · 华为员工自杀频频拷问.. |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Apache技术专题 · Windows集群服务应用 · 国际文档格式标准开战 |
· 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 · 了解统一威胁管理(UTM).. · 专题:AIX操作系统管理.. · 访问控制列表(ACL)介绍 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · 三层交换技术专题 · Apache技术专题 · 企业数据恢复指南 · Windows集群服务应用 |
· 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 · 访问控制列表(ACL)介绍 · PHP开发应用手册 · 专题:AIX操作系统管理.. |
|||