一、拦截器
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代码:
<s:property value="'<h3>keep going!</h3>'" escapeHtml="true"/><br>
不忽略:
<s:property value="'<h3>keep going!</h3>'" escapeHtml="false"/><br>
输出默认值:
<s:property value="" default="true"/>
</center>
</body>
</html>
3.2、< s:a >标签
构造页面超链接
属性 | 说明 |
---|---|
href | 可选,String,指定超链接地址 |
action | 可选,String,指定超链接Action地址 |
namespace | 可选,String,指定Action地址 |
id | 可选,String,指定id |
method | 可选,String,指定Action调用方法 |
3.3、< s:debug >标签
使用该标签,网页中会生成debug的链接,输出服务器对象信息。
3.4、< s:include >标签
一个属性:value
指定被包含的jsp、Servlet等
< param >子标签:用来传参,name参数名,value参数值
<s:include value="property_tags.jsp">
<s:param name="user" value="aa"/>
</s:include>
3.5、< s:param >标签
结合其他标签使用
1)使用value指定参数值
2)通过标签体指定参数值
<s:param name="color" value="red"/>
<s:param name="color">red</s:param>
4、模板和主题
simple:
最简单的主题,每个UI标签只生成最基本的html元素,没有任何附加功能。
xhtml:
stryts2的默认主题,扩展了simple主题,提供布局功能、lable显示名称、验证框架和国际化框架的集成。
css_html:
扩展xhtml,添加了对css的支持和控制。
Ajax:
继承了xhtml,提供Ajax支持。
5、表单标签
用来向服务器提交用户输入信息,所有表单标签在org.apache.struts2.components包都有一个相对应的类,继承自UIBean类。
5.1、< s:form >标签
form标签输出一个html输入表单,此外,xhtml主题的form标签还输出表单元素外围的表格。
使用时一般包含其它的表单元素,如:< s:textfield >、< s:radio >等
5.2、< s:submit >标签
submit标签输出一个提交按钮。submit标签和form标签一起使用可以提供异步表单提交功能。
属性 | 说明 |
---|---|
action | 可选,String,指定提交时对应的action |
method | 可选,String,指定action中调用的方法 |
submit标签可以输出以下三种类型提交按钮。
input:等价于:<input type="submit" .../>
image:等价于:<input type="image" .../>
button:等价于:<input type="button" .../>
5.3、< s:textfield >和< s:textarea >标签
都用于创建文本框
textfield标签: textfield标签输出一个HMTL单行文本输入控件,等价于:
<input type="text" .../>
<s:form action="register" method="post">
<s:textfield name="username" lable="用户名"/>
textarea标签:输出一个html多行文本输入控件,等价于:<s:textarea name="description" lable="描述"/>
5.4、< s:password >标签
password标签输出一个HTML口令输入控件,密码输入框,
属性 | 说明 |
---|---|
name | 指定输入框名称 |
size | 指定输入框的显示宽度,字符数 |
maxlength | 限定输入框的最大输入字符串个数 |
shoePassword | 是否显示初始值,密文显示 掩码代替 |
举栗子:
<s:password label="password" name="password" maxLength="15" size="6" showPassword="true"/>
5.5、< s:radio >标签
radio标签输出一组hmtl单选按钮:<input type="radio" .../>
属性 | 说明 |
---|---|
list | 必选,生成单选框的集合 |
listKey | 可选,指定集合对象的哪个属性作为选项的value |
listValue | 可选, 指定集合对象的哪个属性作为选项的内容 |
举个栗子:
<s:radio list="#{'0':'男','1':'女'}" name="sex" label="性别" value="0"/>
完整版:(顺便加个textarea的)
<%@ page contentType="text/html;charset=UTF-8" language="java"%><html><head><title>登录页面</title></head><body><div align="center"><form action="login" method="post">
用户名:<input type="text" name="username"/><br>
密 码:<input type="password" name="password"/><br><s:radio list="#{'0':'男','1':'女'}" name="sex" label="性别" value="0"/><br><s:textarea label="个性签名" name="description" rows="5" cols="15"/><br><br><input type="submit" value="login"/></form></div></body></html>
5.6、< s:checkbox >和< s:checkboxlist >标签
checkbox标签输出一个html复选框,等价于:<input type="checkbox" .../>
checkboxlist标签使用一个列表创建一系列复选框,属性设置与< s:select/>和< s:radio/>类似,只是创建的是html复选框。不同的是,checkboxlist标签是多选标签。
举个栗子:
<s:checkbox label="普通用户" name="user" value="ture" fieldValue="user"/><s:checkbox label="管理员" name="admin" fieldValue="admin"/><br><s:checkboxlist list="{'足球','篮球','排球','网球'}" name="intersters" label="球类运动" labelposition="left"/><s:checkboxlist list="{'java','c','python','php'}" name="course" label="计算机语言" labelposition="left" listKey="key" listValue="value"/><br>
5.7、< s:select >标签
select标签输出一个html下拉列表框,等价于:<select …><option …>< /option>< /select >
举个栗子:
<s:select list="{'软件','计科','空信','电科','电信','物联网','通信'}" label="所学专业" size="3" multiple="false"/><br>
multiple布尔类型,指定是否多选,默认为false。
list必选,生成下拉框的集合。
size可选,Int类型,指定最多可以同时显示多少个选项。
5.8、< s:optgroup >标签
optgroup标签作为select标签的子标签使用,用于创建选项组。
可以在select标签的标签体中使用一个或者多个optgroup标签,对选项进行逻辑分析组。
<s:select list="#{'java','数据库'}" label="所学" name="couses" listKey="value" listValue="key"><s:optgroup label="Java" list="#{'jsp':'jsp','servlet':'servlet','javabean':'javabean'}" listValue="key" listKey="value"/><s:optgroup label="数据库" list="#{'mysql':'mysql','oracle':'oracle','sqlserver':'sqlserver'}" listValue="key" listKey="value"/></s:select>
5.9、< s:file >标签
用于创建文件选择框,生成html中的< input type=“file”/>标签。
举栗子:
<s:file name="upLoadfile" accept="text/*"/><br><s:file name="other" accept="text/html,text/plain"/>
accept指定接收文件类型,默认input。
5.10、< s:hidden >标签
hidden标签输出一个html隐藏表单元素,等价于:<input type="hidden" .../>
<s:hidden name="id" value="5"/>
5.11、< s:reset >标签
重置按钮,属性 name ,指定重置按钮的名称;属性value ,显示按钮的值
举个栗子:
<form action="login" method="post">
用户名:<input type="text" name="username"/><br>
密 码:<input type="password" name="password"/><br><s:radio list="#{'0':'男','1':'女'}" name="sex" label="性别" value="0"/><br><s:textarea label="个性签名" name="description" rows="5" cols="15"/><br><s:file name="upLoadfile" accept="jpg/*" label="头像"/><br><br><s:reset value="重置"/><input type="submit" value="提交"/></form>
重置后:
6、非表单标签
非表单标签 | 说明 |
---|---|
< s:actionerror> | 如果action实例的getActionError()方法返回不为null,该标签负责输出该方法返回的系列错误 |
<s:actionmessage> | 如果action实例的getActionMessager()方法返回不为null,该标签负责输出该方法返回的系列消息 |
< s:fielderror> | 如果action实例存在表单域的类型转换错误、校验错误,该标签负责输出错误提示 |