写在前面的话:对Struts2的理解一直处于似懂非懂的状态让我非常苦闷,在使用的过程当中Struts2的强大已经让我叹为观止,不知道这个用词是否准确。为了更好的理解Struts2,决定拜读下官方的guide,顺便作下翻译,但愿本身可以坚持下来,阅读的过程当中确定有不少地方理解不了,可是仍是打算直接译出来,也许一段时间之后再毒一遍的话就可以理解的更深入了。html
1.坚果壳中的apache struts2 体系java
不知道为何struts2的官方文档中为何要使用nutshell这个词语来表述,我只好直译了,也许是要表达一个框架的意思吧,整个struts2框架体系以下图所示:web
它的具体流程以下:shell
a. 首先浏览器发出请求,请求一个服务器端资源,这也许是一个action,也许是别的 什么东西
b. FilterDispatcher会对每一个请求进行检查,而后选择合适的action
c. 拦截器会自动对客户端的亲求进行一些通常化的操做,例如工做流(workflow)、确认(validation)以及文件上传的处理
d. Action中的方法被执行,它一般都是向数据库中存储数据或者检索数据
e. Result会将输出返回到浏览器,这一般是一个html文件或者图片等等数据库
2.坚果壳中的struts标签apache
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是一个不错的选择,^_^。