STRUTS技术框架J2EE应用与开发-12主要内容12.1MVC与STRUTS12.2STRUTS技术框架12.3STRUTS2技术框架12.4Struts案例分析技术在实现时往往保留原来,重新再来12.1MVC体系结构MVC(Model-View–Controller)框架也称模型-视图-控制器体系结构。模型(Model):维护数据并提供数据访问方法视图(View):绘制模型的部分数据或者所有数据的可视图控制器(Controller):处理事件12.1MVC体系结构模型(Model)视图(View)控制器(Controller)强引用弱引用•MVC最早出现在Smalltalk–80(70年代末)中,并作为一种分离用户界面与基本应用程序数据的方法(简单示意图如下)12.1MVC示例时间模型(如时间计算公式)时间的数字显示时间控制器12.1.2MVC的优点1、各施其职,互不干涉任一层的需求发生了变化,一般不会影响到其它层2、有利于开发中的分工如网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层3、有利于组件的重用分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。12.2MVC-STRUTS12.2.1Struts的模型组件一般而言,模型组件的开发者将着重于创建支持所有功能性请求的JavaBean。在应用程序中的Bean一般可分为以下几类:1.ActionFormBean:用来在模型层和视图层中传输数据;2.系统状态Bean:用来表示系统的实际状态的JavaBean;3.业务逻辑Bean:为执行业务逻辑而设计的Bean。12.2.2Struts的视图组件视图是模型的外在表现形式,用户通过视图来了解模型的状态。同一个模型可以有多种视图,用户可以根据自己的需要来访问不同的视图。Struts除了提供与输入表单的交互外还提供对应用程序的国际化支持。12.2.2Struts的视图组件Struts的视图组件可以分为以下几个主要组件1.JSP页面:JSP是Struts视图层的核心部分,JSP中包含有用户与之进行交互的用户界面代码。Struts应用程序中的JSP与任何其它基于Java的Web应用程序中的JSP类似。但是,要遵循MVC体系结构,JSP就不应包含任何实现业务逻辑或直接访问数据源的代码。12.2.2Struts的视图组件2.Struts标签库:HTML;用于生成与StrutsAPI交互的HTML表单Bean:用于在JSP中处理JavaBean对象。Logic:用于在JSP中实现简单的条件逻辑。Nestd:用于嵌套任何多层的无法独立工作的HTML、Bean、和Logic标签。Struts提供了强大的控制器层组件,并将该层设计为可完全扩展。控制器层的核心是ActionServlet,它负责通过Struts配置文件初始化应用程序的配置,并负责接收发至应用程序的所有传入的请求。每当接收至一个请求,ActionServlet会将它委托给RequestProcessor类进行处理。RequestProcessor将处理请求的各个方面,包括选择与请求相关联的FormBean、用数据填充FormBean、验证FormBean的有效性以及选择正确的Action类来执行该请求。12.2.3Struts的控制器组件12.2.3Struts的控制器组件控制器层的生命周期如下图所示:浏览器ActionServletRequestProcessor操作模型视图12.2.3Struts的控制器组件控制器层的主要组件:1.ActionServlet类:主要的控制器类,用于接收应用程序所有传入的HTTP请求和负责初始化应用程序的Struts框架。2.RequestProcessor类:用于处理ActionServlet接收到的所有请求。3.Action类:它是Struts框架的终点和应用程序程序代码的起点。Action类将视图层与模型层联系在一起,并负责处理特定的请求。Action类旨在将视图层的数据传输至模型层中的特定事务处理,然后将事务处理后的数据返回视图层。12.3Struts2技术框架基于WebWork核心的MVC开发12.3.1Struts2与WebWork概述WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EEWeb框架。WebWork的最大优点是:简单性和灵活性。Struts2是WebWork的Struts版本,两种框架为了减轻程序员负担进行了融合。–WebWork框架比Struts1更为先进,而Struts的优势是拥有众多的使用者。–Struts使用WebWork,而WebWork则借助Struts的社区推广了自己–并不是Struts2出现后Struts1就被取代了,事实上它们是并行发展的12.3.1Struts2与WebWork概述Struts2从本质上看来源于Webwork,它同时具有Struts和Webwork的优点。并且使用了J2SE5的注释为程序员提供了另外一种配置方案。虽然Struts2好处很多,但它在使用上和Struts1.x有着很大的不同。因此,要想从Struts1.x跨越到Struts2,还需要进一步学习。12.3.1Struts2与WebWork概述12.3.2Struts1和Struts2区别1.Action类2.线程模型3.Servlet的依赖4.易测试性5.输入处理6.表达式语言7.表现层和类型值的绑定8.类型转换9.验证10.Action执行的控制12.3.3Struts2框架Struts2.0中两个配置文件struts.xml和struts.properties都放在WEB-INF/classes/下。struts.xml用于应用程序相关的配置struts.properties用于Struts2.0的运行时(Runtime)的配置12.3.3Struts2配置文件struts.xml文件这个文件的配置是最为重要的,也是比较容易出问题的地方,初学者对其中很多的参数不太明白,导致调试时候经常出错。下面先给出一个配置的代码:12.3.3Struts2配置文件!DOCTYPEstrutsPUBLIC-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN=struts-default.xml/packagename=package1extends=struts-defaultactionname=Helloclass=tutorial.HelloWorldresultname=aaaHelloWorld.jsp/result/actionactionname=HelloWorldclass=“package1.helloworld”resultname=bbbHelloWorld.jsp/result/action/package/struts12.3.3Struts2配置文件struts.properties:与struts.xml文件一样,位于classes目录下面:struts.devMode=true是否为struts开发模式struts.enable.DynamicMethodInvocation=false不允许动态方法调用struts.custom.i18n.resources=messageResouce加载附加的国际化属性文件(不包含.properties后缀)struts.multipart.maxSize请求信息的最大尺寸(文件上传用)struts.multipart.saveDir设置存储上传文件的目录夹12.3.3Struts2配置文件web.xml文件?xmlversion=1.0encoding=UTF-8?web-appid=WebApp_IDversion=2.4xmlns=:xsi=:schemaLocation=://java.sun.com/xml/ns/j2ee/web-app_2_4.xsddisplay-namestruts2/display-namefilterfilter-namestruts2/filter-namefilter-classorg.apache.struts2.dispatcher.FilterDispatcher/filter-class/filterfilter-mappingfilter-namestruts2/filter-nameurl-pattern/*/url-pattern/filter-mappingwelcome-file-listwelcome-fileindex.html/welcome-filewelcome-fileindex.htm/welcome-file/welcome-file-list/web-app12.3.3Struts2配置文件Struts2标签不依赖于任何表现层技术所有标签都在一个S标签库里面(Struts1在5个标签库)把所有标签都分成3类(用户界面标签,非用户界面标签,AJAX标签)使用OGNL(Object-GraphNavigationLanguage)表达式作为基础,因此对于集合,对象的访问功能非常强大12.3.4Struts2标签库小结本章小结MVC与JSFMVC与STRUTSSTRUTS技术框架STRUTS2技术框架Struts案例分析