Struts2学习笔记(三)

来源:互联网 发布:淘宝指数在哪 编辑:程序博客网 时间:2024/06/05 18:28

MethodFilterInterceptor自定义拦截器,可以通过参数注入的方式确定拦截哪些和不拦截哪些方法

访问action的特定方法

在使用struts2的时候,不指定方法就会访问action的默认方法execute,如果指定了则会访问指定的方法。这个技巧可以用来初始化页面

<!-- 指定upload方法,则调用upload方法 --><action name="upload" method="upload" class="com.cheng.web.action.FileAction">    <result name="success">/WEB-INF/file/upload.jsp</result></action><!-- 不指定upload方法,则默认调用execute方法 --><action name="upload" class="com.cheng.web.action.FileAction">    <result name="success">/WEB-INF/file/upload.jsp</result></action>

使用OGNL(Object Graphic Navigation Language)表达式自定义文件下载名

private String downName;public String download() throws FileNotFoundException {    String realPath = ServletActionContext.getServletContext().getRealPath("/WEB-INF/upload/百度.png");    setDownName("百度");    inputStream = new FileInputStream(new File(realPath));    return SUCCESS;}
<!-- ognl调用静态方法需要打开allowStaticMethodAccess --><constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant><param name="contentDisposition">    attachment;filename=${@java.net.URLEncoder@encode(downName,"UTF-8")}.jpg</param>
声明文件中的<package></package>的继承关系,配置在package中的拦截器只对本包中的Action生效,不写有默认,写了没默认,需要手动添加ref

Struts的ContextMap

动作类的生命周期,每次动作访问,动作类都会实例化,所以是是线程安全的。产生的请求数据都放到哪儿了?每次访问动作,都会由核心控制器StrutsPrepareAndExcecuteFilter创建一个ActionContext和ValueStack对象,这两个对象存储了整个动作访问期间用到的数据,并且把数据绑定到了线程局部变量(ThreadLocal)上,所以它是线程安全的。

-Context Map是OGNL上下文
-ActionContext 是一个Map集合
-application Map,封装应用域属性
-session Map,封装会话域属性
-request Map,封装请求域属性
-parameters Map,封装参数
-attr(searcher page,request,session,the application scopes)
Map,封装四域所有属性
-value stack(root) 是一个List集合

Action动作类的引用,默认情况下就在ValueStack的栈顶

Iterator迭代标签

var属性:取值是一个字符串
如果写了,就把var的值作为key,把当前遍历的元素作为value,放到ActionContext的大Map中
如果不写,把当前遍历的元素压入栈顶,输出后弹栈

status属性:存放遍历时的一些计数信息

int getIndex        计数从0开始int getCount        计数从1开始boolean isFirst     第一boolean isLast      最后boolean isOdd       奇数boolean isEven      偶数

在标签中使用采用反射的方法,调用status的属性,所以需要去掉get set is

<s:iterator value="list" var="s" status="vs"></s:iterator><s:if test="#vs.odd">    <tr style="background-color: red"></s:if><s:property value="#vs.count"></s:property>

Struts2中的一些其他常用标签,
value中填写的都是ognl表达式,要转成字符串需要加单引号

<s:set><s:action><s:if><s:ifelse><s:else><s:url var="填写的是key" action="填写value">放到ActionContext的中这个标签的作用是网址后缀的自动转换,可用于伪静态<s:url action="fun" var="url"></s:url><a href="${pageContext.request.contextPath}/fun">单纯</a><a href="<s:property value='url'/>">伪装</a>

Struts2中#,$,%

取context中的key,ognl创建Map对象时使用
$使用el表达式,在xml中使用ognl取值
%把字符串当成ognl表达式
ModelDriven中的模型对象要自己实例化
ModelDriven把模型对象压入栈顶,然后动态参数封装get set值
防止表单重复提交

<interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="tokenSession"></interceptor-ref><result name="invalid.token">/resubmit.jsp</result>
原创粉丝点击