Struts2 学习笔记(1)
第一章:Struts2基本概念
- 1.1 三层架构和三大框架
- 1.1.1 三层架构
开发架构分为C/S架构和B/S架构,其中B/S架构中系统标准三层架构为:web(表现)层,service(业务)层,dao(持久)层。
web层:用户向服务端发送请求,服务端接受请求并作出回应(http请求响应)。web层分为控制层和展示层,控制层接收请求,展示层展示结果。其业务需求依赖service层。
web层设计一般采用MVC模型,即modle(数据模型),view(视图),controller(控制器)。MVC模型只应用于web(表现)层。
service层:处理业务逻辑和事务一致,依赖dao层,被web层依赖。
dao层:负责数据持久化。
- 1.1.2 三大框架
三大框架功能如图:Struts2主要负责web层的请求封装处理,hibernate主要负责dao层的数据持久化,Spring为整体服务提供IoC(控制反转)和AOP(面向切面编程)。
IoC:将组件之间依赖关系从程序内部提到容器外部,并在程序运行期间动态创建组件需要的对象实例,以注入的方式发送给各个组件(依赖注入DI)。
AOP:剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来。
-
1.2 Struts2介绍
struts2是采用MVC架构的轻量化Web框架,采用拦截器(intercepter)机制处理用户请求。主要用于web层用户请求的封装处理和响应。
第二章:Struts2入门
- 2.1 Struts2执行时序
1) tomcat启动,加载web.xml文件,遇到标签会创建过滤器对象。
2) struts2的核心过滤器(StrutsPrepareAndExcuteFilter)会负责加载struts.xml配置文件。
3) 当用户发送请求,前端控制器(StrutsPrepareAndExcuteFilter)会根据请求找到struts.xml中相应的配置。
4) 匹配完成,实例化动作类。
5) 调用指定动作方法(方法有返回值)。
6) 根据返回值,找到与返回值对应的结果视图。
7) 响应浏览器
- 2.2 struts2内部执行流程
1)浏览器发送请求,进入struts2过滤器进行过滤
2)符合要求,进入struts2内部,创建动作类。不符合,进入下个过滤器或放行
3)进入系列拦截器,符合要求则执行动作方法
4)倒序重新进入拦截器
第三章:Struts2配置文件
-
3.1 struts2中的配置文件
当tomcat加载应用时同时加载struts2的配置文件。按加载顺序包括:
1) default.properties(不可修改)
2) struts.default.xml(不可修改)
3) struts-plugin.xml(不可修改)
4) struts.xml(可修改)
5) struts.properties(可修改)
6) web.xml(可修改,给过滤器配置参数) -
3.2 struts.xml中的标签
-
3.2.1 标签
<!—开启开发者模式-- >
作用:更改struts2中的常量
属性:name:常量名字;value:指定的值
- 3.2.2 标签
struts2引入面向对象概念,采用分包管理,且包与包之间可以有序继承。管理方便,易于模块开发。
其他属性:
abstract:声明抽象包,只要没有action标签即可
namespace:命名空间,模块管理url,以‘/’开头
- 3.2.3 标签
作用:关联动作名称,动作类,动作方法
属性:
name:动作名称,唯一
class:动作类名(全限定类名)
method:动作方法名称
- 3.3 动作类的三种创建方式
- 3.3.1 无侵入式(不用
)
写一个动作类,写明动作方法,struts.xml文件中写明全部属性
- 3.3.2 实现Action接口(少用)
动作类 implement Action。接口方法为execute(),因为默认execute()方法,所以不用指定action标签中的method。
PS:Action接口中定义的常量
SUCCESS:一般用于成功
ERROR:一般用于动作方法执行失败
LOGIN:一般用于返回登录界面
NONE:不返回任何结果视图,和return null一样
INPUT:一般用于回显
- 3.3.3 继承ActionSupport类(默认动作类)
ActionSupport类实现了Action接口
- 3.4 action业务配置方式
- 3.4.1 一个请求对应一个业务控制类的一个方法
- 3.4.2 动态调用方法
一般不使用,有漏洞
一个请求匹配一个动作类,不指定动作。
请求格式:Action名称!方法名.action
url:/userMgr!add
配置:
- 3.4.3 通配符方式
- 3.4.4 注解的方式
导入三个jar包:
asm-3.3.jar
asm-commons-3.3.jar
struts2-convention-plugin-2.3.16.3.jar
例子:
// 相当于package的extends
@ParentPackage(“struts-default”)
// 相当于package的namespace
@Namespace("/")
public class LoginAction {
// login请求所对应的业务处理类,name为视图名称,location为返回的页面
@Action(value=“login”,results={
@Result(name=“success”,location="/main.jsp"),
@Result(name=“fail”,location="/error.jsp")
})
public String execute() {
if (loginName.equals(“admin”)) {
return “success”;
} else {
return “fail”;
}
}