1、线程安全:
在一个进程中有多个线程并发执行,每个线程执行的过程中变量值是相同的,执行结果也是相同的。
2.struts 2 每次请求都会创建新的action对象,所以线程安全。
由于action对象是struts2反射生成的,所以要求action类要有一个公共的无参构造方法。
3. 乱码配置:
4、团队协作开发配置:
5.配置文件加载顺序:
struts-default.xml——struts-plugin.xml——>struts.xml
6.package的配置:
name 是url请求名,不需要加后缀(.action)
class是处理url请求对应的java类,class要求包名+类名,并且该类是有公共的无参构造方法的,
method配置处理请求类的处理方法,默认是execute()方法,方法要满足是公共的,返回值类型是string ,无参 method 和name无关
7.result的配置:
name :匹配请求处理方法的返回值;默认是success
type :结果处理类型,默认是dispather (转发)
8.全局配置:
在Action的配置中,如果不去配置class属性,将会由默认的action来执行,默认的action是ActionSupport类
9.通配符的配置 * 表示匹配所有,占位符用{1}表示
10.减少Action的配置,还可以使用DMI 即动态方法调用,不推荐存在安全隐患。
11.Action的实现方式:
12.获取ServletAPI:
struts2获取ServletApi的两种方式:一种解耦;一种耦合;
解耦使得struts2来进行测试的时候不需要启动服务器,在一定程度上提高开发效率。
Action->Service->Dao
使用解耦的方式获取servlet Api 通过ActionContext对象获取。Map 容器
通过获取ServletActionContext获取HttpServletRequest对象
什么是ActionContext?
ActionContext是Map结构的容器,ActionContext是Action的上下文,存放Action执行过程中数据信息。ActionContext存放Action数据,ActionInvocation request的数据,session的数据,application的数据,local的数据等。每次请求时会为当前线程创建一个新的ActionContext。而ActionContext采用了ThreadLocal(容器)的方式来存放ActionContext所以ActionContext是线程安全的。
ActionContext.getContext()获取,由于ActionContext是线程安全的,并且通过静态方法获取的,所以在本线程中的非Action类中也可以直接访问。
注意:ActionContext是基于请求创建的。所以在非请求的线程中是不能使用ActionContext对象的。如:filter的init()方法。
ActionContext的简图: