Struts 2.X
Struts2.X与1.X完全不同。起源于WebWork,1.X与2.X无任何直接关系
1. 部署struts2的jar包时,注意删除其中无用的jar,如**-plugin.jar
struts2 中页面提交请求后,struts2将会截获请求,查找struts.xml,找到对应的Action
生成Action实例,将提交的数据置入该实例中,然后调用Action中的方法,进行处理
Struts1.x | Struts2.x |
线程不安全,公用action | 线程安全,每次创建新的Action |
ActionServlet作为分发器 | Filter作为分发器 |
使用POJO时需要显式在FormBean中实例对象 | 不需要 |
文件上传,将文件封装为FormFile | 将文件封装为java.io.File对象,只需要Action中定义File变量后,使用该变量 |
Struts2为线程安全,由于其每次都创建新的Action实例
2. 配置文件
strtus.properties web.xml struts.xml
Action接口 预置结果result success none error inputlogin
实现public String execute()方法的都可以作为Action
Struts2 零配置 通过@
注意:
struts2.0 程序入口
org.apache.struts2.dispatcher.FilterDispatche
struts2.1以后
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
3. use POJO
<struts:urlaction=”” includeParams=””/>
-----------------------------------------------------------------------------------
4. (1)数据类型转换器
继承DefaultTypeConverter类实现convertValue()
在src中配置xwork-conversion.properties
在struts.xml中配置,可只作用于某个Action
(2)获取response request
某些情况需要获取其得到session或cookie等
ServletActionContext的静态方法 非IoC
Struts通过该对象维护servlet对象
getResponse() getRequest()
Aware相关接口
Servlet***Aware (context/request/response/session)
(3)Validator 数据校验
xml配置
需要在Action所在的类中添加一个XML文件 Action类名_validation.xml
Action类名_Action别名_validation.xml
如果实现客户端提示,只需要使<struts:form>中的validate=”true”
或者 @
---------------------------------------------------------------------------------------
5. Sturts2.x 标签
ONGL,不支持EL,struts-tags.lib 存在于struts2-core-2.0.11.1.jar中
控制 appenditerator merge subset generator
/数据
/表单 autocompletAjaxTag(自动补全)
datatimepicker (时间)
doubleselect(联动选择)
optiontransferselect(左右各有一列,左可到右边,右可到左)
optgroup二级分租
/非表单 显示信息,
debug / fielderror /actionerror /actiionmessage
struts对div/submit/a/ajax封装(无刷新)
/tabbedPanel标签页
/tree 标签输出树 输出文件(java对象File)结构
加载动态数据 ,当数据量比较大时
-----------------------------------------------------------------------------------------
6. Struts2.x 拦截器(interceptor)
(1)
Timer
<actionname=”” class=””>
<interceptor-refname=”timer”></interceptor-ref>
</action>
(2)
Token 防重复提交 通过session标记,标记只能使用一次,保证最多只能提交一次
<action>
<interceptor-ref name=”token”/>
<interceptor-ref name=”basicStack”/>
<result….
..
<result name=”invalid.token”>toenInvalid.jsp</result>
</action>
在提交页面的form中需标记<struts:token/>
(3)
execAndWait 执行等待拦截器
需要定义completeStack和execAndWait两个拦截器
(4)
自定义拦截器 实现Interceptor接口,一般直接继承AbstractInterceptor
7. 文件上传
在文件上传时,在Action中定义File变量,struts2会将文件保存到临时文件夹,但在上传结束后会销毁该文件,方法中需要将该文件复制出来
fileUpload拦截器 :可限制上传文件的大小类型etc..