一、模型-视图-控制器(MVC)
- 模型代表数据,与数据格式无关,这样一个模型能为多个视图提供数据。拥有最多的处理任务。
- 视图显示模型数据,是用户看到并与之交互的界面,发送用户动作(例如按钮点击)到控制器。 (MVC好处是它能为应用程序处理很多不同的视图)
- 控制器提供模型数据至视图,接受用户的输入,解释用户的行为,如按钮的点击。调用模型和视图去完成用户的需求。控制器依赖于视图和模型。在一些情况下,控制器和视图可以合二为一。
二、MVC设计模式的主要优点和缺点
优点:
1. MVC使得模型类可重复使用而无需修改。(耦合性低)
控制器存在的目的是消除模型与视图依赖关系。 从模型中移除视图依赖后,模型代码变得整洁起来。
2. MVC可以使视图可重复使用而无需修改。(重用性高)
MVC模型不仅使得模型简洁,视图同样如此。 理想情况下,列表视图应该能够显示的任何列表。要想视图(如列表视图,或表格视图)和模型代码同时可重复使用,MVC是唯一的选择。 控制器移除模型和视图间的依赖关系,这使得它们在其他地方可以被复用。
3. 部署快可维护性高
使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改
4. 有利软件工程化管理
由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。控制器也提供了一个好处,就是可以使用控制器来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。
缺点:
MVC并没有明确的定义,同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。
不适合小型,中等规模的应用程序,增加系统结构和实现的复杂性。
一般高级的界面工具或构造器不支持模式
三、Java Web 应用程序的主要组件
1. Servlet组件
Servlet是用来处理客户端请求的动态资源
Servlet的任务有:获取请求数据、处理请求、完成响应
2. Filter组件
不同于Servlet,它们不用于处理客户端请求,只用于对request、
response进行修改或者对context、session、request事件进行监听。
Filter意为滤镜或者过滤器,用于Servlet之外对request或者response进行修改Filter来决定是否调用Servlet,当执行完成Servlet的代码后,还会执行Filter后面的代码。
3. JavaBean组件
JavaBean组件是一种符合特定规范的Java对象。在JavaBean组件中定义一系列的属性,并且每个属性都提供setter和getter方法,这样就可以使用该组件存储一些中间数据。例如Servlet Request的请求信息、从数据库中查询出来的信息等。
4. Listener组件
监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行。
5.EJB组件
Enterprise Java Bean组件同Java Bean一样都用于实现企业应用的业务逻辑,他们的根本区别是EJB组件总是分布式的。在Struts中,它位于MVC设计模式的模型层。
四、Java Web解决方案(开发方法)
1. JSP+JavaBean开发模式:
特点:该模式将业务逻辑与页面表现进行分离,在一定程度上增加了程序的可调试性和维护性。
缺点:页面将控制与显示集于一身。
结论:简单,适合小型项目的快速构建与运行。
2. JSP+Servlet+JavaBean开发模式:
特点:JSP作为视图,来表现页面;Servlet作为控制器,控制程序的流程并调用业务进行处理;JavaBean封装了业务逻辑。遵循了MVC设计模式。
缺点:没有统一的开发框架导致开发周期长。
3. Struts开发方案:
特点:成熟的MVC开发框架。
构成:
(1)控制器:Action Servlet 组件:Struts框架的中央控制器。
(2)Request Processor 组件:每个子模块都具有的请求处理器。
(3)Action 组件:业务代理,它将调用模型进行一项具体的业务逻辑处理。
(4)视图:主要由JSP页面构成,还包括HTML文档;标准标签库(JSTL)和Struts标签库;
(5)JavaScript脚本和CSS样式;多媒体文件;消息资源文件; Action Form类。
(6)模式:通常在Struts中使用其他模型组建来实现业务逻辑。如:JavaBean技术、EJB技术、Hibernates设计模式。
结论:对于一些大型的项目,Struts框架会提高开发效率,并对后期的维护有很大好处。
4. Spring开发方案:
特点:拥有IOC和AOP两种先进的技术为基础,完美的简化了企业级开发的复杂度,是一个理想的Web程序框架。
构成:
(1)核心模块:实现了IOC模式,包含Bean Factory类负责对JavaBean的配置与管理。
(2)上下文模块:继承Bean Factory类,添加了事件处理、国际化、资源装载、透明装载以及数据校验等功能,提供了框架式的Bean访问方式和很多企业级功能。如:JNDI访问、支持EJB、远程调用、继承模板框架、E-mail和定时任务调度等。
(3)AOP模块:提供了用标准Java语言编写的AOP框架,使应用程序抛开EJB的复杂性,但拥有传统EJB的关键功能。
(4)DAO模块:提供了JDBC的抽象层,并且提供了对声明式事物和编程式事务的支持。
(5)Web模块:建立在上下文模块基础之上,提供了Servlet监听器的Context和Web应用的上下文。对现有的Web框架如:JSF、Tapestry、Struts等提供了集成。
(6)O/R映射模块:提供了对现有ORM框架的支持如Hibernate。
Spring MVC框架:建立在核心模块之上,嫩够适应于多种多视图、模板技术、国际化和验证服务,实现控制逻辑和业务逻辑清晰的分离。
5. Struts+Hibernate开发方案:
特点:利用Struts的MVC设计模式,与Hibernate持久化对象组成的开发方案。
6. Struts+Spring+Hibernate开发方案:
特点:Struts负责表示层,Spring负责逻辑层的业务, Hibernate持久层中数据库的操作,组成的开发方案。
五、常用的Java Web的MVC框架
目前比较好的MVC,老牌的有Struts、Web work。新兴的MVC 框架有Spring MVC、Tapestry、JSF等。这些大多是著名团队的作品,另外还有一些边缘团队的作品,也相当出色,如Dina mica、VRaptor等。这些框架都提供了较好的层次分隔能力。在实现良好的MVC 分隔的基础上,通过提供一些现成的辅助类库,同时也促进了生产效率的提高。
(1) SSM框架,是spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统。集成SSM框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。
(2) SSH 为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。SSH具有简单、易用、轻量、可测试、便于管理等特点。可以在一定程度上提高开发效率,同时也便于制定编程规范,这对团队开发是极为有利的。
(3)SSI框架(struts2+spring+ibatis)
(4) Zend Framework(简写ZF)是由 Zend 公司支持开发的完全基于 PHP5 的开源PHP开发框架,可用于开发 Web 程序和服务,ZF采用 MVC架构模式来分离应用程序中不同的部分方便程序的开发和维护。
(5).NET MVC是微软官方提供的以MVC模式为基础的.NET Web应用程序框架。