Action的概述:
1`:搭建strust2的环境,配置web.xml 和Struts2.xml,并且导入需要的struts2的包
2:Action和action
action:代表struts2的一个请求
Action:能够处理struts2的请求的一个类
3:属性名字必须遵守与javabeans相同的命名规则
4:必须有一个不带参数的构造器:通过反射创建实列
5:至少有个供struts在执行调用的action的方法
6:同一个Action可以有多个action
7:struts2会为每个HTTP请求创建一个Action实列,即action不是单列的,是线程安全的
在Action访问web资源
1:什么是web资源?
Httpservletrequest,Httpsession,ServletContext等原生的servletAPI
2:为什么要访问web资源?
B\S的应用controller中必须要访问的资源:向域对象中填写熟性,读写cookies,获取realpath
3:怎么访问web资源?
(1)通过解耦的方式:只能访问有限的servlet API的对象和有限的方法(列:读取请求参数,读写域对象的属性,使session失效等)
使用ActionContext(上下文)
使用XXXAware
(2)通过耦合的方式:可以访问更多的servlet API的对象和的方法
4:actionsupport是默认的action:如果一个Action节点没有配置class,则执行actionsuppprt默认的方法
在手工验证,错误,国际化
通配符应用:
<action>
*
{1}
<action>
5:动态方法的调用
,
通过URL动态调用Action中的方法而忽略配置文件,不推荐(因为在URL中可以看到调用那个方法)
6:OGNL(如何在页面上访问到值栈的对象属性---对象导航图语言)
我们从页面上获取值其实并不是在请求域里获取的,而是在值栈里获取的,值放在值栈的root下
值栈里有两个逻辑对象
objectstack:Struts把Action的相关的对象放入其中
contextMap:Struts把各种映射关系放入其中,实际上就是ActionContext的一个引用
compoundRoot:是一个定义ArrayList的值栈保存对象
Struts 用 s:property用来输出值栈中的属性
值栈中的属性 :
1:对于对象栈
读取objectStatck里的属性值的三种方式
1:object.propertyName 2:object['propertyName'] 3:object["propertyName"]
2:map栈:request,session,application的属性值,或一个请求
3:默认情况下,Action自动被struts放到值栈的栈顶
文件上传
1:struts2上传文件实际上用的是commons FileUpload组件,所以需要导入两个架包,commons-fileupload-1.3.jar 和commons_io-2.1.jar
2:struts2上传文件需要用到FileUpload拦截器
3:基本上传,可以直接在action里写三个属性,并使用set get方法,
//文件对应的对象
1、private File FileFIledname;
//文件类型
2、private String contentType;
//文件名
3、private String Filename;
4:使用IO流进行文件上传
1、一次传多个文件?
如上传多个文件,上述属性改为list
1、private list<File> FileFIledname;
2:限制对上传的文件进行限制
可以通过配置FileuploadInterceptor拦截器的参数进行配置
3:定制消息,可以通过国际化资源文件中定义