3.3 Struts2的核心概念
3.3.1 核心概念
在上面的运行流程图里,看到了很多Struts2的模块。本节将简要描述一下那些与实际开发息息相关的概念。
1:FilterDispatcher
Struts2的前端控制器,也是Struts2的MVC中的控制器部分。在实际开发中,只需要在web.xml中配置一次即可。但是一定要注意,如果还有其他的过滤器,那么FilterDispatcher的配置通常要出现在最后。
2:Action
动作类,作为MVC中的模型部分,既封装业务数据,也负责处理用户的请求,execute方法就是默认的动作处理方法。
3:Result
结果,代表Action运行之后要转向的下一个页面。Struts2本身支持多种结果类型,如jsp、velocity、freemarker、jasperreports等,在同一个web应用中,各种结果类型还能混用。
4:Interceptor
拦截器是Struts2中一个重要的概念。虽然,在做helloworld时,它并没有明显出现在我们视野里,但是每一个Struts2工程都一定使用了拦截器,只是使用了Struts2自带的内建拦截器与默认拦截器配置而已。
Struts2的许多功能都是由拦截器完成的,比如:
- 帮你把request参数设置到Action的属性中。
- 实现上传文件
- 防止重复提交
- 实现验证框架
- 通用错误处理
- 程序国际化
- 等等……
5:ActionContext、值栈与OGNL
虽然ActionContext没在架构图中出现,但是它扮演着至关重要的角色。Struts2在每个Action刚开始运行的时候,都会单独为它建立一个ActionContext,把所有能访问的数据,包括请求参数(request的parameter)、请求的属性(request的Attribute)、会话(session)信息等等,都放到ActionContext中。
这样一来,在以后取值、赋值的时候,就只需要访问ActionContext就可以了,所以说ActionContext可以被认为是每个Action拥有的一个独立的内存数据中心。
对象图导航语言OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL)。它通过简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
值栈可以用来容纳多个对象,主要用来存放一些临时对象。当使用OGNL访问值栈中对象的属性的时候,指定属性的引用会引用更靠近值栈栈顶方向对象,晚进栈的对象会覆盖早进栈的对象。简单点说,Struts2用值栈为我们使用Struts2做了很多引用上的简化,主要是缩短了OGNL表达式的长度。另外,值栈也可以作为一个内存数据中心,来存放一些Struts2标签临时定义的数据。
6:Struts2标签
Struts2的标签库功能强大,使用简单,大大简化了视图开发的工作。而且,它与框架的其他部分也非常自然的结合,如国际化、验证等等。
7:自动类型转换
在Action中可以有多种方式来对应页面的数据,从而自动获取页面的值。但是,从request里面接收的值都是String类型的,而Action的属性可以是各种类型的。这就需要Struts2的类型转换机制来支持,它节省了我们大量的手工进行类型转换的开发时间。
Struts2已经内置了大量的类型转换方式:
- 各种私有类型及其包装类
- 常见的各种数据类型,如String、Date、BigDecimal等等
- 各种集合概念,包括数组、Set、List、Map
- 甚至可以是枚举
Struts2提供的这些就已经够用了,还可以自己实现特殊的类型转换器,以满足特殊的功能需要。
8:国际化
i18n通常作为“国际化”的简称,其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数。
web应用通常应该支持多国语言,可以根据客户端请求所来自的国家和语言显示不同语种的用户界面。这样,当需要在应用程序中添加对一种新语言的支持时,就无需修改应用程序的代码了。
Struts2非常自然的实现了国际化,我们不需要考虑更多的事情,只是按照Struts2的要求,把不同语言的信息,放到对应的位置即可。
9:验证框架
做一个成熟、稳定的web应用,无论如何服务器端验证是少不了的。通常情况下,我们不会完全相信客户端传递过来的数据,应该在真正调用业务逻辑之前对数据进行校验,如果用户提交的数据不符合要求,就不会去调用业务逻辑。
Struts2为我们提供了一套完整、严密,可扩展的验证框架,保证在Action运行之前会判断用户提交的信息是否完整、符合条件。
小结:
好了,到这里应该对Struts2有一个较为系统和完整的了解了,接下来,就来对实际开发中需要的各个部分,进行系统的、全面的、深入的讲解,以帮助大家真正掌握Struts2的开发,成为应用Struts2开发的高手。
相关推荐
研磨Struts2
《研磨Struts2》原书配套源代码,配合Struts2原书使用,快速学习Struts2技术。
研磨struts2博文,详细讲解了struts2运行流程,值得大家阅读
由于文件较大,我把这个文档切割为2部分,这是第一部分,请下载完第一部分后一定要下载第二部分,否则不能阅读。
《研磨Struts2》原书配套PPT,结合《研磨Struts2》配套使用,快速学习Struts2框架。
研磨struts2_系列文章.pdf
研磨Struts2 高清完整版,请和第一部分一起下载啊
《研磨Struts 2》PDF版本下载
研磨Struts2_12859679_高清完整版
研磨Struts2-高清-完整目录-2011年10月,分享给所有需要的人
研磨struts,仅是简版,我也是从网上下来的。大家凑合看吧。
第3章 外观模式 第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式...
第3章 外观模式 第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式...
研磨设计模式.part2 一定要下载5部分
第3章 外观模式 第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型...
Java工程师三大框架面试题.pdf