Struts 2线程安全以及配置文件

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的简图:

原文地址:https://www.cnblogs.com/auldlangsynezh/p/8493830.html