Struts2学习:Overview之Nutshell

简介:

 写在前面的话:对Struts2的理解一直处于似懂非懂的状态让我很是苦闷,在使用的过程中Struts2的强大已经让我叹为观止,不知道这个用词是否准确。为了更好的理解Struts2,决定拜读下官方的guide,顺便做下翻译,希望自己能够坚持下来,阅读的过程中肯定有很多地方理解不了,但是还是打算直接译出来,也许一段时间以后再毒一遍的话就能够理解的更深刻了。

1.坚果壳中的apache struts2 体系

不知道为什么struts2的官方文档中为什么要使用nutshell这个词语来表述,我只好直译了,也许是要表达一个框架的意思吧,整个struts2框架体系如下图所示:


它的具体流程如下:

a.  首先浏览器发出请求,请求一个服务器端资源,这也许是一个action,也许是别的   什么东西
b.  FilterDispatcher会对每个请求进行检查,然后选择合适的action
c.  拦截器会自动对客户端的亲求进行一些一般化的操作,例如工作流(workflow)、确认(validation)以及文件上传的处理
d.  Action中的方法被执行,它通常都是向数据库中存储数据或者检索数据
e.  Result会将输出返回到浏览器,这通常是一个html文件或者图片等等

2.坚果壳中的struts标签

Struts中的标签库确实为我们程序的编写提供了很大的方便,使用struts标签之后,程序代码的数量确实减少了很多。除了减少代码量之外,struts标签相对于普通的html标签而言功能更加强大,例如有的标签还支持国际化、本地化等等,总之呢,struts标签就是好,^_^,而且容易理解。不过说实话,我在项目中还是很不习惯又这个struts标签,我一般都是采用的普通html标签再加上jstl标签。

3.坚果壳中的struts配置

一个web应用程序通常使用一个部署描述符来初始化诸如过滤器、监听器之类的支援,这个部署描述符通常都是以xml文件的形式存在,并且命名为web.xml。在struts2中你可以通过生命在web.xml中的java类来初始化资源,你还可以通过一个叫struts.xml的文件来完全控制这些配置。下面展示了一个典型的struts.xml配置文件:

  <struts>   
 <package name="default" extends="struts-default">        
        <action name="Logon" class="mailreader2.Logon">  
          <result name="input">/pages/Logon.jsp</result> 
           <result name="cancel" type="redirect-action">Welcome</result> 
           <result type="redirect-action">MainMenu</result>
            <result name="expired" type="chain">ChangePassword</result>
        </action> 
       <action name="Logoff" class="mailreader2.Logoff">
            <result type="redirect-action">Welcome</result>
        </action>
    </package>
  </struts>

3.坚果壳中的Struts MVC

Struts2是一个MVC框架,它提供了控制器(controller)和视图(viewer)组件,并且和其它技术相结合来提供Model组件。框架的控制器可以看作是应用程序的Model和Web的view之间的一个桥梁。

为了使动态显示数据更加方便,struts框架还提供了一个标记库。这些标签能够同框架的验证(validation)、国际化(internationalization)特征相互作用,确保输入的正确性和输出的本土化。标签库能同JSP、FreeMarker等一起使用,而且不影响其它的标签库如JSTL等的使用,它还支持JSF组件。

当一个请求达到的时候,控制器(Controller)会调用一个Action类。这个Action类会在“咨询”Model组件(代表业务逻辑)后检查或者更新应用程序的状态,为了在Model层和View层之间传输数据,我们可以在Action类中放置属性,或者在一个POJO中放置。

绝大多数时候,Model看起来就像一个JavaBean对象。Model承担了大多数的工作,而Action就像一个交通警察或者适配器一样,只是负责一下监管。框架还提供了非常成熟且自动化的类型转换器,藉此来简化丰富的域对象与纯文本的http请求之间的数据传输工作。

Struts的扩展性非常好,它部署的每一个类都是面向借口的,它提供了一个应用程序可能用到的所有基础类,如果应用还需要别的类,你可以自己去主动的添加,这就是面向接口的好处。尽管struts提供了很多了功能,但是开发人员还是可以以他们自己的方式来开发。

4.总结

    基于已有的行业标准和设计模式,struts2可以帮助我们为企业级开发创建一个可扩展的开发环境,如果我们只是要开发一个小的系统的话,我们完全可以采用JSP Model1开发模式;如果我们要开发的是一个更加复杂的系统,包含很多的页面,并且可能要运行很久的话,使用Struts是一个不错的选择,^_^。










本文转自 646676684 51CTO博客,原文链接:http://blog.51cto.com/2402766/569994,如需转载请自行联系原作者
目录
相关文章
|
SQL 数据库 C++
Entity Framework初体验
Entity Framework初体验
157 0
Entity Framework初体验
SAP Analytics Path Framework的filter实现原理分析
I am recently doing self study on Analytics Path Framework and as a beginner I have finished some “Hello world” exercise and I have written down my steps to finish those “Hello world” project in these two blogs:
SAP Analytics Path Framework的filter实现原理分析
|
XML 数据库 数据格式
一起谈.NET技术,NHibernate3剖析:Mapping篇之ConfORM实战(1):概览
  ORuM思想浮出   对于ORM(Object Relational Mapping)我们太熟悉了,但是我们从另一个角度可以想象出ORuM(Object Relational un-Mapping)的思想理念。
939 0
一起谈.NET技术,NHibernate3剖析:Mapping篇之ConfORM实战(5):Component语义
  Component语义   使用ConfORM“映射”组件,我们无需特别设置,ConfORM内部会根据Domain定义来判定组件,一般而言,没有主键的类就是组件。 [Test]public void ComponentMappingDemo(){//show how work with comp...
956 0
|
Java Android开发 应用服务中间件