2、Struts2生命周期:
2.1) 生命周期
1) 客户端发出请求给Web服务器
2) 请求经过一系列的过滤器(包括Struts2的过滤器和其它过滤器)
3) 如果是到达了Struts2的过滤器,底层有核心控制器会被调用,访问ActionMapper来判断当前请求是否需要调用Action。
4) 如果ActionMapper判断是需要调用某个Action,核心控制器把控制权委派给ActionProxy(注意:jsp不需要调用Action,放行)
5) ActionProxy通过Configuration Manager访问框架的配置文件(struts.xml),找到需要调用的Action类
6) ActionProxy创建一个ActionInvocation的实例
7) ActionInvocation负责调用Action的执行方法,在调用方法前会执行一系列的拦截器。
8) Action执行完毕,ActionInvocation负责根据结果视图图在struts.xml的配置中找到对应的结果视图
9) 拦截器被再次执行
10) 过滤器被再次执行
2.2) Struts2核心接口和类
1) ActionMapper类:根据请求的url查找是否存在对应的Action调用。
2) ActionMapping类:保存调用Action的映射信息。例如:namespace,name(actionName),class(actionClass)等
3) ActionProxy接口:Action代理类去对每一个Action的请求的操作。
4) ActionInvocation接口:表示Action的执行状态,保存拦截器、Action实例。
5) Interceptor接口:在请求处理之前或之后执行Struts2组件。(注意:Struts2的很多功能都是通过拦截器完成的,
所以拦截器是Struts2的真正的核心)。
2.3) Struts2自带拦截器:
1) params:负责将请求参数设置到Action属性中。
2) fileUpload:对文件实现上传支持
3) servletConfig:将Servlet API的各种对象注入到Action中
4) modelDriven:注入某个类型的对象到Action属性中
5) validation:调用验证框架进行数据验证。
3、拦截器(Interceptor)
1) 为什么要使用拦截器?
Struts2将核心功能放在多个拦截器中实现,每个拦截器完成某项特定功能。拦截器可以自由选择和组合,增加灵活性,
有利于系统的解耦。
2)什么是拦截器?
拦截器的原理和过滤器类似。
Struts2将核心功能放在多个拦截器中实现,每个拦截器完成某项特定功能。
拦截器在Action方法之前或之后执行。
为Action增加附加功能,不需要修改Action代码,就使用拦截器来提供。
3) 自定义拦截器
3.1) 实现Interceptor接口
3.2) 继承AbstractInterceptor类:AbstractInterceptor类实现了Interceptor接口,AbstractInterceptor类类似于ActionSupport类与Action的关系。