Struts2简介:
Struts 2是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制,来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开
Struts和Webwork同为服务于Web的一种MVC框架
Struts2的核心功能:
在Action的实现方面,可以是一个普通的POJO(Plain Old Java Objects)。
线程模型方面,Action是一个请求对应一个实例(新new一个对象),没有线程安全方面的问题。
Servlet依赖方面,Action不再依赖于Servlet API,有利于测试,实现TDD(Test-Driven Development,测试驱动开发)。
封装请求参数,可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。
表达式语言方面,整合了OGNL (Object Graph NavigationLanguage )对象图形导航语言。
绑定值到视图技术,使用"ValueStack"技术。
类型转换,使用OGNL进行转换,可以更方便的使用。
数据校验,支持重写validate方法或者使用XWork的验证框架。
基于Spring AOP思想的拦截器机制,更易扩展
Struts2的下载:
下载地址:http://struts.apache.org/download.cgi
下载后的目录结构:
apps 该文件夹包含了基于struts2 的示例应用,这些示例应用对于学习者是非常有用的
docs 该文件夹下包含了struts2 相关文档,包括struts2 快速入门、struts2的文档以及API文档等
lib 该文件夹下包含了Struts2框架和核心类库,以及struts2第三方插件类库
src 该文件夹下包含了Struts2框架的全部源代码
Struts2的jar包介绍:
struts2-core-2.3.14.jar :Struts 2框架的核心类库
xwork-core-2.3.14.jar :Command模式框架,WebWork和Struts2都基于xwork
ognl-3.0.6.jar :对象图导航语言(Object Graph Navigation Language), struts2框架通过其读写对象的属性
freemarker-2.3.19.jar :Struts 2的UI标签的模板使用FreeMarker编写
commons-logging-1.1.x.jar :ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。
commons-fileupload-1.2.2.jar 文件上传组件,2.1.6版本后需要加入此文件
commons-io-2.0.1.jar 传文件依赖的jar包
commons-lang3-3.1.jar 对java.lang包的增强
asm-3.3.jar:提供了字节码的读写的功能,包含了核心的功能,而其他的jar,都是基于这个核心的扩展.
asm-commons-3.3.jar: 提供了基于事件的表现形式。
asm-tree-3.3.jar: 提供了基于对象的表现形式。
javassist-3.11.0.GA.jar:代码生成工具, struts2用它在运行时扩展 Java类
开发时可以直接拷贝:/apps/struts2-blank/WEB-INF/lib所有的jar文件
Struts2的原理:
Struts2官方的原理图:
Struts的核心过滤器:
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
Struts2请求流程:
拦截器:struts2 已经完成的功能,都是通过拦截器,进行处理的。
struts2使用代理,在执行自定义action方法时,对当前方法进行增强,执行已经定义好的拦截器
拦截器栈:一组拦截器的集合。栈中的所有拦截器,必须按照指定的顺序进行拦截。
struts2默认情况指定的默认拦截器栈defaultStack中的拦截器