Struts2框架
Struts2框架
l Struts框架的起源
- Struts :英文单词含义为金属支架,在程序中表示起支撑作用的通用程序代码
- Struts框架出现的时间为2001年,主要目的是为了提高servlet和JSP的开发水准,和进行统一化的流程设定,在当时非常流行,但是随着时间的推移,早期代码的问题也逐渐显露出来。
- struts框架基于servlet进行开发的,所以servlet的问题在这个框架中都能体现出来
- struts框架的流程是固定的,想要扩展业务流程非常的不方便。
- 只支持动态视图JSP展现数据,对于现在的SEO(搜索引擎优化)支持不好
SEO(Search Engine Optimization),汉译为搜索引擎优化。搜索引擎优化是一种利用搜索引擎的搜索规则来提高目的网站在有关搜索引擎内的排名的方式。SEO目的理解是:为网站提供生态式的自我营销解决方案,让网站在行业内占据领先地位,从而获得品牌收益。SEO包含站外SEO和站内SEO两方面。
。。。
所以框架的开发人员在2007年对框架进行了版本的升级。但是这个升级不是简单的代码改善,而是从本质上改变了实现的方式,并且参考了其他优秀的框架产品(WebWork),所以产生了struts2的框架,之前的框架称之为struts1框架。
Struts2框架改善的地方
- 核心基于Filter
- 流程可以动态扩展
- 多例创建对象
- 支持多种视图展现技术(JSP,Freemarker,Volicity)
因为struts1框架存在固有的一些问题,所以这里我们只介绍Struts2框架。Struts1框架不再做介绍。
l Struts2框架是一个轻量级的MVC流程框架
- 轻量级 :程序代码不是很多,并且运行时,占用的资源不是很多,还有就是框架没有侵入性
- MVC :模型,视图,控制器,分层代码。
- 流程 :数据流程,数据从哪里来,怎么传播的,在什么地方显示出来。
l Struts2框架的文件结构
- apps : 包含了框架的多个应用压缩包(war)
- docs : 框架的说明文档。
- lib : 框架依赖的jar包
- src : 框架的源码文件夹
l Struts2框架的环境搭建
- JAR包(6个)
- 配置文件(struts.xml)
- web.xml(增加过滤器)
l struts2框架的第一个例子
- 参考struts2框架自带的例子:struts2-blank-2.1.8.1.war(需要将文件拷贝到tomcat服务器的webapps中)
- 扩展用户登录的功能,采用框架实现
l struts2框架的源码解读
- struts2框架是MVC流程框架,所以重点就在流程上,如果能将源码的实现看懂,那么对于框架的应用和技术实现就更加容易理解
- 通过源码的解读,可以发现,框架采用工厂模式和代理模式等设计模式,并且底层采用反射方式实现,所以理解好反射,对于框架的学习会更好。
- 通过分析Struts2的源代码,讲解设计到的JavaEE设计模式和GoF设计模式。JavaEE前端控制器模式、GoF的代理模式ActionProxy、工厂模式(抽象工厂模式)ObjectFactory、责任链模式Interceptor、策略模式ResultType、模版方法模式ResultType内部实现、缺省适配器模式Interceptor内部实现;
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
l Struts2流程图
l Struts2的应用
1) Action默认执行的方法名称为execute
u 继承ActinSupport类(推荐)
u 实现Action接口
2) 扩展名
u 默认情况下的扩展名有2个(action, 空字符串)
u 修改默认的扩展名
l struts.xml文件中增加常量标签(推荐)
l struts.properties资源配置文件
l 过滤器初始化参数
3) 字符编码
u 默认的字符编码 UTF-8
u 框架核心是过滤器,所以可以直接设定字符编码。
u 只能解决post的乱码问题。
4) 重新加载配置文件
u 默认情况下,修改配置文件,必须重新启动服务器才可以起作用。影响开发效率
u 设定常量,让程序运行时就可以重新加载配置文件,可以提高开发效率
u 开发模式
u 重新加载配置文件的设置以及开发模式的设置只能应用在开发阶段,在生产环境中一定不能设置为true
5) 命名空间
u 类似于java中的包
u 应用于访问action的路径
u 命名空间的访问规则。
6) Action创建
u 框架通过配置文件中的class属性反射创建对象。
u 多例创建,不会出现线程安全问题。
7) 动态方法调用
u 在请求路径中,将方法名和action的访问路径使用感叹号连接起来。
u 在配置文件中增加method属性(推荐)
u 默认的方法名就是execute
u 方法名也可以通过通配符进行设定。
8) 数据的流转
u OGNL和ValueStack
u 数据的展示
l 使用El表达式可以直接访问action的属性。
u 数据的存储
l 属性驱动模式
l 模型驱动模式
l 域驱动模式
u 数据的传播
l 访问存储对象(Map)
l 访问真正的HTTP对象
9) 文件上传
u 将文件的内容放置在请求体中传递给服务器
u 框架支持3中上传组件(cos,pell),默认为commons-fileupload
u 框架屏蔽了组件的使用。对于开发人员来讲,只需要操作文件流就可以了。
10) 国际化
u 资源(多语种)文件 – 起名规则
u 国际化的应用的场景。
11) 页面跳转
u 默认使用转发方式(dispatcher)跳转
u Action转发 : chain
u 重定向 :redirect
u Action重定向 : redirectAction
12) 文件下载
u 是以流的方式完成页面的跳转。
u 需要注意配置文件和类之间的关联。
13) 模板视图技术
u Freemarker
u JSP
14) 拦截器
u 默认有18个拦截器
u 自定义拦截器增加后,框架不再提供默认拦截器
u 拦截器的声明顺序。
u 拦截器模拟过滤器的实现机制
15) 异常处理
u 统一异常处理
u 全局异常映射
u 全局结果映射
16) 团队的支持
u 配置文件可以划分多个子配置文件
u 划分的规则是根据功能模块进行划分
u 从主配置文件包含子配置文件
17) 对象工厂
u 框架的核心对象都是由对象工厂创建出来。
u 可以使用自定义的对象工厂覆盖框架的对象工厂。
18) 注解零配置。
u 执行框架流程,不需要增加配置文件
u 使用JDK1.5版本之后的新特性,注解功能
u 不推荐使用,违背OCP开发原则。
l 在 Struts2 中,模型-视图-控制器模式通过五个核心组件来实现 :
19) Action
20) 拦截器
21) 值栈/OGNL
22) 结果类型
23) 结果/视图技术
l Struts2框架MVC 架构图
l Struts2的总结
24) Struts2框架的优点
u 轻量级的MVC的流程框架
l 统一管理页面流转
l 简化了表单向控制器的赋值
l 简化上传操作
l 规范了团队开发
l 体现了独立服务概念(IOC)
u 增加拦截器的处理机制,可以很容易进行功能的扩展。遵循AOP编程模式
u 提供了多种视图展现技术。
u 线程安全。
u 测试起来更加的容易。
u 拥有由积极活跃的开发人员与用户组成的成熟社区
25) Struts2框架的缺点
u 多例创建对象,性能下降(内存消耗大),执行效率低于servlet,所以在使用时会有局限性
u Action比较臃肿,难于维护
u 底层实现方式非常复杂,导致学习成本增加(时间,难度)
u 由于设计的原因会导致安全隐患。
u http://www.egov.com/user/login!getUsercode.action?usercode=success
u http://www.egov.com/user/login!getUsercode.action?usercode=success&usertype=/WEB-INF/web.xml
l Struts2的竞争对手
26) SpringMVC
27) JSF
28) WebWork