资源描述
Struts2框架培训日志
8/25/2025
Struts2框架培训日志
l Struts框架的起源
Ø Struts是在2001年5月发布第一个版本。
View
Model
Ø Struts主要目的实现MVC模式开发。结合Servlet和JSP技术将业务逻辑代码与数据显示代码分离开,实现低耦合的开发方式。
Controller
JSP / Freemarker + Servlet + JavaBean(JDBC)/EJB
Ø Struts不断改进中两个最受瞩目的方案是Shale和Struts Ti。
Ø Shale是一个基于构件的框架,并在最近成为Apache的顶级项目。
Ø Struts Ti则是在Struts的成功经验基础上继续坚持对前端控制器(Front Controller)和MVC(model-view-controller)模式进行改进。
Ø WebWork是在2002年3月发布的。
Ø 在2005年12月,WebWork与Struts Ti宣布合并。与此同时,Struts Ti改名为Struts Action Framework 2.0。
Ø Struts1.x与Struts2区别
1. Struts2核心控制器由Servlet修改为Filter(核心控制器控制对目标程序(Action程序)的访问.)
2. Action对象多实例,不需要考虑线程安全问题。
3. 支持多种视图展现技术(JSP,Freemarker,Volicity)
4. 扩展性强,提供了拦截器 Interceptor
5. Struts2不是Struts1的升级,而是继承webwork的血统,它吸收了struts1和webwork的优势。
因为struts1框架存在固有的一些问题,所以这里我们只介绍Struts2框架。Struts1框架不再做介绍。
l Struts2框架是一个轻量级的MVC流程框架
Ø 轻量级:用普通JavaBean程序代替EJB完成代码开发,从开发角度,从运行角度,比较快速和简单.无侵入性.
Ø MVC:Model – View – Controller
1. Model : 做业务逻辑代码(Service),数据处理代码(DAO),数据封装(User/Page) -> JavaBean/EJB
2. View : 数据展示JSP(JSTL/EL)/Freemarker
3. Controller : 流程控制(接收数据,调用Model,跳转页面) Servlet/Filter
Ø 流程: 数据流程. 数据从哪来的,到哪里去
Ø 框架: 框架是对通用代码进行封装,做项目开发利用框架来做,可以提高开发效率,程序员将开发任务重点放在业务逻辑代码的实现上. 框架从设计的角度,利用6大开发原则(开闭原则(OCP);迪米特法则,依赖倒转原则,里氏代换原则,接口隔离原则,合成聚合/复用原则),以及相关设计模式(工厂,模板,适配器,代理,单例,多例…),所以,框架都遵循迪米特法则.
l Struts2框架的文件结构: http://www.apache.org
Ø apps : 包含了框架的多个应用压缩包(war)
Ø docs : 框架的说明文档(学习手册,API文档)。
Ø lib : 框架依赖的jar包
Ø src : 框架的源码文件夹
l Struts2框架的环境搭建
Ø Web项目
Ø JAR包
Ø 配置文件(struts.xml)
Ø 业务类及页面(HelloWorldAction, HelloWorld.jsp)
Ø web.xml(增加过滤器:核心控制器)
l struts2框架的第一个例子
Ø 参考struts2框架自带的例子:struts2-blank-2.x.war(需要将文件拷贝到tomcat服务器的webapps中)
l struts2框架的源码解读
Ø struts2框架是MVC流程框架,所以重点就在流程上,如果能将源码的实现看懂,那么对于框架的应用和技术实现就更加容易理解
Ø 通过源码的解读,可以发现,框架采用工厂模式和代理模式等设计模式,并且底层采用反射方式实现,所以理解好反射,对于框架的学习会更好。
Ø 通过分析Struts2的源代码,讲解设计到的JavaEE设计模式和GoF设计模式。JavaEE前端控制器模式、GoF的代理模式ActionProxy、工厂模式(抽象工厂模式)ObjectFactory、责任链模式Interceptor、策略模式ResultType、模版方法模式ResultType内部实现、缺省适配器模式Interceptor内部实现;
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
开发原则:
l 开闭原则(OCP- Open Closed Principle)
l 里氏代换原则(LSP- Liskov Substitution Principle LSP)
l 依赖倒转原则(DIP- Dependence Inversion Principle)
l 接口隔离原则(ISP- Interface Segregation Principle)
l 合成/聚合复用原则(Composite/Aggregate Reuse Principle ,CARP)
l 迪米特法则(Law of Demeter)又叫作最少知道原则(Least Knowledge Principle 简写LKP)
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 默认栈引用20个拦截器
u 自定义拦截器增加后,框架不再提供默认拦截器
u 拦截器的声明顺序。
u 拦截器模拟过滤器的实现机制
15) 异常处理
u 统一异常处理
u 全局异常映射
u 全局结果映射
16) 团队的支持
u 配置文件可以划分多个子配置文件
u 划分的规则是根据功能模块进行划分
u 从主配置文件包含子配置文件
17) 注解零配置。
u 执行框架流程,不需要增加配置文件
u 使用JDK1.5版本之后的新特性,注解功能
u 不推荐使用,违背OCP开发原则。
l 在 Struts2 中,模型-视图-控制器模式通过五个核心组件来实现 :
1) Action
2) 拦截器
3) 值栈/OGNL
4) 结果类型
5) 结果/视图技术
l Struts2框架MVC 架构图
l Struts2的总结
1) Struts2框架的优点
u 轻量级的MVC的流程框架
l 统一管理页面流转
l 简化了表单向控制器的赋值
l 简化上传操作
l 规范了团队开发
l 体现了独立服务概念(IOC)
u 增加拦截器的处理机制,可以很容易进行功能的扩展。遵循AOP编程模式
u 提供了多种视图展现技术。
u 线程安全。
u 测试起来更加的容易。
u 拥有由积极活跃的开发人员与用户组成的成熟社区
2) Struts2框架的缺点
u 多例创建对象,性能下降(内存消耗大),执行效率低于servlet,所以在使用时会有局限性
u Action比较臃肿,难于维护
u 底层实现方式非常复杂,导致学习成本增加(时间,难度)
u 由于设计的原因会导致安全隐患。
l
l
2013年7月17日高危漏洞
l Apache Struts2高危漏洞,影响到Struts 2.0.0 -Struts 2.3.15的所有版本。包括国内很多知名网站在内的大量网站受到此漏洞不同程度的影响。攻击者可以利用该漏洞执行恶意java代码,最终导致网站数据被窃取、网页被篡改等严重后果,使网站及网民安全受到了极大的威胁。
l Struts2的竞争对手
1) SpringMVC
2) JSF
3) WebWork
l
5/5
展开阅读全文