一、拦截器
1、拦截器概述
概述:interceptor是struts2的核心组成部分,可动态拦截Action的调用对象,类似Servlet中的过滤器。可插拔,实现AOP。
拦截器组合在一起=拦截器链/栈,对应各个功能的拦截器按照一定的顺序排列在一起形成的链,链组成的集合就是栈。
2、拦截器工作原理
通常以代理的方式调用,在一个Action执行前后进行拦截,围绕Action和Result的执行而执行,以链式,对真正要执行的execute方法进行拦截。
3、拦截器配置
3.1、拦截器
在struts.xml文件中配置,标签:< interceptor >
name属性指定拦截器名称,class属性指定拦截器的实现类。
传参用< param >标签,其中name指定参数名,param Value表示参数的值。
<interceptor name="login_icpt" class="login_interceptor">
<param name="name">param Value</param>
</interceptor>
3.2、拦截器栈
拦截器栈被附加到一个Action上时,在执行Action之前必先执行栈中的每一个拦截器。
定义拦截器栈使用标签interceptors元素和interceptors-stack子元素,当配置多个拦截器时,interceptor-ref元素指定多个拦截器
<package name="defualt" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="icpt1" class="interceptorClass1"/>
<interceptor name="icpt2" class="interceptorClass2"/>
<!--定义一个拦截器栈,myStack,包含俩拦截器和一个拦截器栈-->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="icpt1"></interceptor-ref>
<interceptor-ref name="icpt2"></interceptor-ref>
</interceptor-stack>
</interceptors>
</package>
3.3、默认拦截器栈
配置默认拦截器用标签:< default-interceptor-ref>
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<action name="login" class="action.UserLoginAction">
<result name="success">/login_success.jsp</result>
</action>
3.4、内建拦截器
在struts-default.xml文件中,拦截器以name-class的形式配置。位置如下:
4、自定义拦截器
4.1、实现自定义拦截器
方式一:
实现自定义拦截器=直接或间接的实现com.opensymphony.xwork2.interceptor.Interceptor接口。
实现其中的三个方法:void init()、
void destory()、
String intercept(ActionInvocation invocation) throws Exception
方式二:
继承抽象拦截器类AbstractInterceptor,该类实现了上述接口的方法,只需实现interceptor()就可以创建自定义拦截器。
4.2、举个栗子
步骤:
1)、必须实现Interceptor接口或者继承AbstractInterceptor类;
2)、在struts.xml中自定义拦截器;
3)、在struts.xml中Action使用拦截器。
举个栗子:(懒得自己写了。。。)
https://jingyan.baidu.com/article/63f236285c13260208ab3d93.html
二、标签
1、分类
主要分为:普通标签和UI标签。
标签库 | 细分 |
---|---|
普通标签 | control标签,data标签 |
UI标签 | Form、Non-Form、Ajax标签 |
标签库:
2、控制标签
控制标签 | 说明 |
---|---|
<s:if> | 可单独使用,程序的分支逻辑控制。必须指定test属性,用于设置标签的判断条件,其值为布尔类型的条件表达式 |
<s:elseif> | 结合<s:if>使用,程序的分支逻辑控制。必须指定test属性,用于设置标签的判断条件,其值为布尔类型的条件表达式 |
<s:else> | 结合<s:if>使用,程序的分支逻辑控制。 |
<s:iterator> | 用于对集合中的数据进行迭代,可根据条件遍历集合。 |
control_tags.jsp控制标签:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>控制标签</title>
</head>
<body>
<center>
<table border="1px" cellpadding="0" cellspacing="0">
<s:iterator var="name" value="{'java','python','sql','c','c#'}" status="st">
<s:if test="#st.odd">
<tr style="background-color: aliceblue">
<td><s:property value="name"/> </td>
</tr>
</s:if>
<s:else>
<tr style="background-color: darkgray">
<td><s:property value="name"/> </td>
</tr>
</s:else>
</s:iterator>
</table>
</center>
</body>
</html>
s:iterator循环输出集合中的值,status属性的odd方法获取作为if,else标签的判断条件,对行数进行显示控制。
使用iterator遍历List集合时,判断索引的奇偶决定表格的颜色。
3、数据标签
< s:property>
< s:a>
< s:debug>
< s:include>
< s:param>
3.1、< s:property >标签
属性 | 说明 |
---|---|
id | 可选,指定该元素的标识 |
default | 可选,若输出属性值为null,则显示default属性的指定值 |
escape | 可选,指定是否忽略html代码(true忽略) |
value | 可选,指定需要输出的属性值,没有则默认输出ValueStack栈顶值 |
property_tags.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>数据标签</title>
</head>
<body>
<center><h2>数据标签property</h2>
输出字符串:
<s:property value="'keep going!'"/><br>
忽略html代码:
<