,最早使用在SmallTalk-80环境中,并应用于用户交互应用程序中。最smalltalk语言和java语言有很多相似的地方,比如都是面向对象语言。Microsoft的MFC基础类也遵循了MVC的思想。MVC设计模式更深层次的影响了软件开发人员的分工,也更加便于分工。
事件(Event)导致控制器(Controller)改变模型(Model)或试图(View),或者同时改变两者。只要Controller发生了改变Model的数据或属性,所有依赖的视图都会自动更新。类似的,只要Controller改变了View,View会从Model中获取数据来刷新自己。
MVC是一种架构,需要其他模式协作完成。Struts2只实现的是MVC中的View和Controller两个部分,Model部分需要开发者自己来实现,Struts2提供了抽象类Action使开发者能将Model应用于Struts2框架中。
MVC模型的原理如图2.1所示:
图2.1 MVC模型原理图
MVC三个部分在Java EE架构中都有自己的位置。MVC与Java EE架构的对应关系是:View处于Web Tier或是Client Tier,通常是JSP/Servlet,即页面显示部分;Controller也处于Web Tier,通常用Struts2来实现,即页面显示的逻辑部分实现;Model处于Middle Tier,通
常用服务端的spring或者EJB实现,即业务逻辑部分的实现。
2.2 Struts2框架结构及工作原理
Struts2【8】是Struts的下一代产品。是在struts和WebWork的技术基础上进行了合并,全新的Struts2框架。其全新的Struts2的体系结构与Struts1的体系结构的差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的
设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts2可以理解为WebWork的更新产品。因为Struts2和Struts1有着太大的变化,但是相对于WebWork,Struts2只有很小的变化。
Apache Struts2是一个优雅的,可扩展的Java EE
web框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。
Apache Struts2是大家所熟知的WebWork2,在经历了几年的各自发展后,WebWork和Struts社区决定合二为一而成的产品。
Struts2的工作流程如图2.2所示:
1.首先Struts2接收到一个httprequest时Interceptor对其进行一些拦截或者初始的工作。这时候如果有外部的httpservletrequest到来时,数据就会到servlet容器中,然后被传递给一个标准的过滤器链ActionContextCleanUp。
2.然后Struts2开始调用Dispatecher会去查找相应的ActionMapper,如果找到了相应的ActionMapper Struts2将会将控制权限交给ActionProxy。接着ActionProxy通过ConfigurationManager来查找配置struts.xml文件。
3.最后Struts2通过ActionInvocation来负责命令模式的实现,action返回Result。(返回的Result类型可以是 jsp或者freeMark 等)。
图2.2 Struts2响应用户请求的工作流程
2.3 JSP技术
JSP【13】(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用
程序的开发变得迅速和容易。
Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JS