一、 MVC模式简介

  MVC是一种架构型模式,它本身并不引入新的功能,只是用来指导我们改善应用程序的架构,使得应用的模型和视图相分离,从而得到更好

 

的开发和维护效率。在MVC模式中,应用程序被划分成了模型(Model)、视图(View)和控制器(Controller)三个部分。其中,模型部分

 

包含了应用程序的业务逻辑和业务数据;视图部分封装了应用程序的输出形式,也就是通常所说的页面或者是界面;而控制器部分负责协调

 

模型和视图,根据用户请求来选择要调用哪个模型来处理业务,以及最终由哪个视图为用户做出应答。MVC模式的这三个部分的职责非常明确

 

,而且相互分离,因此每个部分都可以独立的改变而不影响其他部分,从而大大提高了应用的灵活性和重用性。

 

二、Java Web应用程序的主要组件

1.Servlet组件

Servlet运行于Web容器中,如Tomcat,它可以被Web容器动态加载,接收浏览器请求,调用其他组件处理请求,然后把处理结果返回。

当浏览器访问某个Servlet时,Web容器将会创建一个ServletRequest对象和ServletResponse对象,并且把用户的请求信息封装在

 

ServletRequest对象中。然后把这两个对象作为参数传输给Servlet的特定方法中。在该方法中处理请求,把处理结果封装在

 

ServletResponse对象中,返回给Web容器。最后Web容器把结果返回到浏览器去解析、显示。

2.JSP组件

JSP是一种动态网页技术。它把HTML页面中加入Java脚本,以及JSP标签构成JSP文件。当浏览器请求某个JSP页面时,Tomcat会把JSP页面翻译

 

为Java文件。然后将它编译为class文件,接着执行它,把生成的HTML页面返回到客户端显示。

3.JavaBean组件

JavaBean组件是一种符合特定规范的Java对象。在JavaBean组件中定义一系列的属性,并且每个属性都提供setter和getter方法,这样就可

 

以使用该组件存储一些中间数据。例如ServletRequest的请求信息、从数据库中查询出来的信息等。

4.EJB组件

Enterprise Java Bean(EJB)组件是服务器端的Java组件。该组件基于标准分布式对象技术、CORBA和RMI等技术,用于实现企业级应用的额

 

业务逻辑。

5.XML语言

XML(Extensible Markup Language)是一种用来创建自定义标记的标记语言。

6.Web服务器和应用服务器

Web服务器用来处理HTTP请求,并返回HTTP数据。它主要用来和浏览器进行交互,给用户提供服务。应用服务器可以被Web服务器调用,进行

 

业务逻辑的处理。它返回的数据被Web服务器组织为HTML格式,然后返回到浏览器去解析。

 

三、Java Web解决方案(开发方法)

 

JSP+JAVABEAN开发模式:

    特点:该模式将业务逻辑与页面表现进行分离,在一定程度上增加了程序的可调试性和维护性。

    缺点:页面将控制与显示集于一身。

    结论:简单,适合小型项目的快速构建与运行。

 

JSP+Servlet+JavaBean开发模式:

    特点:JSP作为视图,来表现页面;Servlet作为控制器,控制程序的流程并调用业务进行处理;JavaBean封装了业务逻辑。遵循了MVC设

 

计模式。

    缺点:没有统一的开发框架导致开发周期长。

 

Struts开发方案:

    特点:成熟的MVC开发框架。

    构成:控制器:ActionServlet 组件:Struts框架的中央控制器。

                  RequestProcessor 组件:每个子模块都具有的请求处理器。

                  Action 组件:业务代理,它将调用模型进行一项具体的业务逻辑处理。

    视图:主要由JSP页面构成

                        还包括HTML文档;标准标签库(JSTL)和Struts标签库;

                        JavaScript脚本和CSS样式;

                        多媒体文件;

                        消息资源文件;

                        ActionForm类。

    模式:通常在Structs中使用其他模型组建来实现业务逻辑。

                       如:JavaBean技术、EJB技术、Hibernates设计模式。

    结论:对于一些大型的项目,Struts框架会提高开发效率,并对后期的维护有很大好处。

 

Spring开发方案:

    特点:拥有IOC和AOP两种先进的技术为基础,完美的简化了企业级开发的复杂度,

             是一个理想的Web程序框架。

    构成:核心模块:实现了IOC模式,包含BeanFactory类负责对JavaBean的配置与管理。

             上下文模块:继承BeanFactory类,

                                添加了事件处理、国际化、资源装载、透明装载以及数据校验等功能,

                                提供了框架式的Bean访问方式和很多企业级功能。

                                如:JNDI访问、支持EJB、远程调用、继承模板框架、E-mail和定时任务调度等。

              AOP模块:提供了用标准Java语言编写的AOP框架,

                               使应用程序抛开EJB的复杂性,但拥有传统EJB的关键功能。

              DAO模块:提供了JDBC的抽象层,并且提供了对声明式事物和编程式事务的支持。

              Web模块:建立在上下文模块基础之上,提供了Servlet监听器的Context和Web应用的上下文。

                               对现有的Web框架如:JSF、Tapestry、Struts等提供了集成。

              O/R映射模块:提供了对现有ORM框架的支持如Hibernate。

              Spring MVC框架:建立在核心模块之上,嫩够适应于多种多视图、模板技术、国际化和验证服务,

                                           实现控制逻辑和业务逻辑清晰的分离。

 

Struts+HIbernate开发方案:

    特点:利用Struts的MVC设计模式,与Hibernate持久化对象组成的开发方案。

 

Struts+Spring+Hibernate开发方案:

    特点:Struts负责表示层,

              Spring负责逻辑层的业务,

              Hibernate持久层中数据库的操作,组成的开发方案。

 

四、常用的Java Web的MVC框架

1、框架不是一开始就有的。在java web开发的世界里,最开始就只有一个可用的servlet API,你要开发web应用,就只能靠它了;

就单单这个简陋的API,开发起来,实在是捉襟见肘。于是在一个个前赴后继的'先烈'往这个坑里跳的同时,一部分人实在看不下去了,于是

 

便有了所谓的框架。其实这个时候的所谓框架就是个框框,帮你解决了一部分的工作,可是还是很难用,更别谈什么解耦、扩展,吧啦吧啦

 

滴;

2、MVC最开始对于Web开发者而言还不一定混的很熟,它也就是一个设计模式而已。突然某一天,某个大神发现这个东西用在Web开发上真是

 

物尽其用啊,很好地解耦了web请求过程中的数据、业务逻辑和信息展示,而且很好地提供了各个部分的扩展性。概括起来,就是说它妙不妙

 

,谁用谁知道啊!这个时候,MVC与Web开发的关系迅速进入蜜月期,作为一个web开发者,聊天的时候,你都不好意思说不知道MVC。于是,

 

各种web开发的MVC框架雨后春笋般的,往外冒...这个时期,struts是java世界中最被广大web开发者接受的大众情人了。

3、差不多与此同时,javaEE的世界还有另一个大众情人,那就是EJB了。不过她仗着大家对她的宠爱,越来越啰嗦、拖沓,养成了不少的坏

 

毛病。此时一个牛X哄哄的家伙看不爽了,捧出了另一个新人-spring。这个家伙的横空出世,让java世界的小伙伴们惊呆了,他是那样的清

 

纯、优雅,令人着迷。于是,过不了一些时间,spring逐渐超越了EJB,成了java世界当之无愧的No.1大众情人了。毫无疑问,它对web开发

 

者展现了她独有的,性感的一面-spring MVC。

4、spring尽管光环无比闪耀,spring MVC拥有对web开发者独有的吸引力,但她为了扩大自己的魅力,同时与struts等老的大众情人交好,

 

提供友好的扩展。毕竟每个web开发者对于web MVC框架都有自己的心头好,每个web MVC框架也拥有自己的粉丝。此时,在Web MVC框架的领

 

地基本是百花争放,百家争鸣了。

5、没有不老的神话,也没有绝对的大众情人。在spring大行其道的今天,她为了吸引更多的粉丝,给自己的套上了一件又一件华丽的外衣,

 

以期满足所有web开发屌丝对女神的所有幻想。这样,之前的一些粉丝,觉得spring失去了其最初的纯粹,连带spring MVC也慢慢地不是那么

 

有吸引力了。这个时候,一些最开始的粉丝,开始转移目标,以spring为原型或者依托,捧红了像play framework、JFinal等一些小清新了

 

 

(1)Spring框架

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不

 

仅仅限于服务器端的开发。从简单性、可测试性和松耦合性的角度而言,绝大部分Java应用都可以从Spring中受益。

◆目的:解决企业应用开发的复杂性

◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

◆范围:任何Java应用Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。

 

Spring的初衷:

 

1、J2EE开始应该更加简单。

 

2、使用接口而不是使用类,是更好的编程习惯。Spring将使用接口的复杂度几乎降低到了零。

 

3、为JavaBean提供了一个更好的应用配置框架。

 

4、更多地强调面向对象的设计,而不是现行的技术如J2EE。

 

5、尽量减少不必要的异常捕捉。

 

6、使应用程序更加容易测试。

 

Spring的目标:

 

1、可以令人方便愉快的使用Spring。

 

2、应用程序代码并不依赖于Spring APIs。

 

3、Spring不和现有的解决方案竞争,而是致力于将它们融合在一起。

 

Spring的基本组成:

 

1、最完善的轻量级核心框架。

 

2、通用的事务管理抽象层。

 

3、JDBC抽象层。

 

4、集成了Toplink, Hibernate, JDO, and iBATIS SQL Maps。

 

5、AOP功能。

 

6、灵活的MVC Web应用框架。

 

优点:

 

◆J2EE应该更加容易使用。

 

◆面向对象的设计比任何实现技术(比如J2EE)都重要。

 

◆面向接口编程,而不是针对类编程。Spring将使用接口的复杂度降低到零。(面向接口编程有哪些复杂度?)

 

◆代码应该易于测试。Spring框架会帮助你,使代码的测试更加简单。

 

◆JavaBean提供了应用程序配置的最好方法。

 

◆在Java中,已检查异常(Checked exception)被过度使用。框架不应该迫使你捕获不能恢复的异常。

 

(2)Struts 2

Struts 2是Struts的下一代产品。是在 struts 和WebWork的技术基础上进行了合并,全新的Struts 2框架。其全新的Struts 2的体系结构与

 

Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够

 

与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。因为Struts 2和Struts 1有着太大的变化,但是相对于WebWork,

 

Struts 2只有很小的变化。Struts技术的发展概况  经过六年多的发展,Struts1已经成为了一个高度成熟的框架,不管是稳定性还是可靠

 

性都得到了广泛的证明。市场占有率超过20%,拥有丰富的开发人群,几乎已经成为了事实上的工业标准。但是随着时间的流逝,技术的进步

 

,Struts1的局限性也越来越多地暴露出来,并且制约了Struts1的继续发展。  对于Struts1框架而言,由于与JSP/Servlet耦合非常紧密

 

,因而导致了一些严重的问题。首先,Struts1支持的表现层技术单一。由于Struts1出现的年代比较早,那个时候没有FreeMarker、

 

Velocity等技术,因此它不可能与这些视图层的模版技术进行整合。其次,Struts1与Servlet API的严重耦合,使应用难于测试。最后,

 

Struts1代码严重依赖于Struts1 API,属于侵入性框架。  从目前的技术层面上看,出现了许多与Struts1竞争的视图层框架,比如JSF、

 

Tapestry和Spring MVC等。这些框架由于出现的年代比较近,应用了最新的设计理念,同时也从Struts1中吸取了经验,克服了很多不足。这

 

些框架的出现也促进了Struts的发展。目前,Struts已经分化成了两个框架:第一个是在传统的Struts1的基础上,融合了另外的一个优秀的

 

Web框架WebWork的Struts2。Struts2虽然是在Struts1的基础上发展起来的,但是实质上是以WebWork为核心的。Struts2为传统的Struts1注

 

入了WebWork的先进的设计理念,统一了Struts1和WebWork两个框架。Struts1分化出来的另外一个框架是Shale。这个框架远远超出了

 

Struts1原有的设计思想,与原有的Struts1关联很少,使用了全新的设计思想。Shale更像一个新的框架而不是Struts1的升级。 本文下面的

 

内容将主要讨论Struts2。Struts2体系结构  Struts2的体系与Struts1体系的差别非常大,因为Struts2使用了WebWork的设计核心,而不

 

是Struts1的设计核心。Struts2中大量使用拦截器来处理用户的请求,从而允许用户的业务逻辑控制器与Servlet API分离。

 

(3)IBATIS

IBATIS[1]一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。是一个基于SQL映射支持

BATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。

一站式

iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。

相对Hibernate和ApacheOJB等“一站式”ORM解决方案而言,ibatis 是一种“半自动化”的ORM实现。

ibatis框架

iBATIS 提供了三种语言实现的版本,包括:Java、.NET以及Ruby。右图是iBATIS的架构图:

主流

所谓“半自动”,可能理解上有点生涩。纵观主流的 ORM,无论 Hibernate 还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO到数据库表的全套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过 Hibernate或者OJB 提供的方法完成持久层操作。程序员甚至不需要对 SQL 的熟练掌握,Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的 SQL 并调用 JDBC 接口加以执行。

 

Java和·NET的持久层框架。它和Hibernate区别就在于自己要写完整sql语句。

优点:

 

1、减少代码量,简单;

 

2、性能增强;

 

3、Sql语句与程序代码分离;

 

4、增强了移植性;

 

缺点:

 

1、和Hibernate相比,sql需要自己写;

 

2、参数数量只能有一个,多个参数时不太方便。

posted on 2017-04-23 22:09  憧憧  阅读(345)  评论(0编辑  收藏  举报