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,如需转载请自行联系原作者
目录
相关文章
|
3天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
271 116
|
18天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
12天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
663 219
|
5天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
349 34
Meta SAM3开源:让图像分割,听懂你的话
|
10天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1575 157
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
897 61
|
7天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
295 140