<属性驱动>:将需要用于接收的参数设置为Action的成员属性,仅作了解。
<域驱动>:在页面中利用生成的对象属性调用属性,例如:student.name,student.age,···
执行原理:程序运行时Struts2会在执行的Action中默认生成一个指定的空对象,该对象会被立即初始化(属性值全为默认空值),紧接着会按照先基本数据类型后引用数据类型的顺序执行实体的各setXXX(),最后返回填充数据的实体。
Tips:此时若页面中书写了<s:debug></s:debug>则在巡视执行顺序时会多出现一条获取整个对象属性的语句。
<模型驱动>:为请求Action类实现ModelDriven接口并指定对应的实体类泛型,生成返回对应实体的getModel()后即可在页面中直接获取对象的属性值,较为常用。
Tips:此过程会涉及到struts-default.xml中内置35个拦截器中默认开启的20个拦截器中的ModelDrivenInterceptor。
<集合数据接收>:在Action中定义泛型集合对象接收数据,其原理与域驱动的数据接收原理相同,仅作了解。
示例定义:private List students
示例获取:<s:property value=“students[0].name” /><s:property value=“students[0].age” />
<Action 与 Servlet>
* Action(对象多例):多用户并发进行Web访问时,系统会为每个用户创建一个RegisterAction实例以接收来自不同用户的数据,各用户间的数据各不相同且互不相干,这也说明了Action线程安全。
* Servlet(单例多线程):对于同一个业务Web容器只会创建一个Servlet实例(无法定义成员变量,可为Servlet添加一个自增的成员变量作为该Servlet的访问计数器),该实例允许多个请求(线程)共享,因此Servlet在多线程下并发访问不安全。