概述:interceptor是struts2的核心组成部分,可动态拦截Action的调用对象,相似Servlet中的过滤器。可插拔,实现AOP。
拦截器组合在一块儿=拦截器链/栈,对应各个功能的拦截器按照必定的顺序排列在一块儿造成的链,链组成的集合就是栈。php
一般以代理的方式调用,在一个Action执行先后进行拦截,围绕Action和Result的执行而执行,以链式,对真正要执行的execute方法进行拦截。
css
在struts.xml文件中配置,标签:< interceptor >
name属性指定拦截器名称,class属性指定拦截器的实现类。
传参用< param >标签,其中name指定参数名,param Value表示参数的值。html
<interceptor name="login_icpt" class="login_interceptor"> <param name="name">param Value</param> </interceptor>
拦截器栈被附加到一个Action上时,在执行Action以前必先执行栈中的每个拦截器。
定义拦截器栈使用标签interceptors元素和interceptors-stack子元素,当配置多个拦截器时,interceptor-ref元素指定多个拦截器java
<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>
配置默认拦截器用标签:< default-interceptor-ref>python
<default-interceptor-ref name="myStack"></default-interceptor-ref> <action name="login" class="action.UserLoginAction"> <result name="success">/login_success.jsp</result> </action>
在struts-default.xml文件中,拦截器以name-class的形式配置。位置以下:
mysql
方式一:
实现自定义拦截器=直接或间接的实现com.opensymphony.xwork2.interceptor.Interceptor接口。
实现其中的三个方法:void init()、
void destory()、
String intercept(ActionInvocation invocation) throws Exception
方式二:
继承抽象拦截器类AbstractInterceptor,该类实现了上述接口的方法,只需实现interceptor()就能够建立自定义拦截器。web
步骤:
1)、必须实现Interceptor接口或者继承AbstractInterceptor类;
2)、在struts.xml中自定义拦截器;
3)、在struts.xml中Action使用拦截器。
举个栗子:(懒得本身写了。。。)
https://jingyan.baidu.com/article/63f236285c13260208ab3d93.htmlsql
主要分为:普通标签和UI标签。数据库
标签库 | 细分 |
---|---|
普通标签 | control标签,data标签 |
UI标签 | Form、Non-Form、Ajax标签 |
标签库:
apache
控制标签 | 说明 |
---|---|
<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集合时,判断索引的奇偶决定表格的颜色。
< s:property>
< s:a>
< s:debug>
< s:include>
< s:param>
属性 | 说明 |
---|---|
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>
构造页面超连接
属性 | 说明 |
---|---|
href | 可选,String,指定超连接地址 |
action | 可选,String,指定超连接Action地址 |
namespace | 可选,String,指定Action地址 |
id | 可选,String,指定id |
method | 可选,String,指定Action调用方法 |
使用该标签,网页中会生成debug的连接,输出服务器对象信息。
一个属性:value
指定被包含的jsp、Servlet等
< param >子标签:用来传参,name参数名,value参数值
<s:include value="property_tags.jsp"> <s:param name="user" value="aa"/> </s:include>
结合其余标签使用
1)使用value指定参数值
2)经过标签体指定参数值
<s:param name="color" value="red"/> <s:param name="color">red</s:param>
simple:
最简单的主题,每一个UI标签只生成最基本的html元素,没有任何附加功能。
xhtml:
stryts2的默认主题,扩展了simple主题,提供布局功能、lable显示名称、验证框架和国际化框架的集成。
css_html:
扩展xhtml,添加了对css的支持和控制。
Ajax:
继承了xhtml,提供Ajax支持。
用来向服务器提交用户输入信息,全部表单标签在org.apache.struts2.components包都有一个相对应的类,继承自UIBean类。
form标签输出一个html输入表单,此外,xhtml主题的form标签还输出表单元素外围的表格。
使用时通常包含其它的表单元素,如:< s:textfield >、< s:radio >等
submit标签输出一个提交按钮。submit标签和form标签一块儿使用能够提供异步表单提交功能。
属性 | 说明 |
---|---|
action | 可选,String,指定提交时对应的action |
method | 可选,String,指定action中调用的方法 |
submit标签能够输出如下三种类型提交按钮。
input:等价于:<input type="submit" .../> image:等价于:<input type="image" .../> button:等价于:<input type="button" .../>
都用于建立文本框
textfield标签: textfield标签输出一个HMTL单行文本输入控件,等价于:
<input type="text" .../> <s:form action="register" method="post"> <s:textfield name="username" lable="用户名"/>
textarea标签:输出一个html多行文本输入控件,等价于: <s:textarea name="description" lable="描述"/>
password标签输出一个HTML口令输入控件,密码输入框,
属性 | 说明 |
---|---|
name | 指定输入框名称 |
size | 指定输入框的显示宽度,字符数 |
maxlength | 限定输入框的最大输入字符串个数 |
shoePassword | 是否显示初始值,密文显示 掩码代替 |
举栗子:
<s:password label="password" name="password" maxLength="15" size="6" showPassword="true"/>
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>
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>
select标签输出一个html下拉列表框,等价于:<select …><option …>< /option>< /select >
举个栗子:
<s:select list="{'软件','计科','空信','电科','电信','物联网','通讯'}" label="所学专业" size="3" multiple="false"/><br>
multiple布尔类型,指定是否多选,默认为false。
list必选,生成下拉框的集合。
size可选,Int类型,指定最多能够同时显示多少个选项。
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>
用于建立文件选择框,生成html中的< input type=“file”/>标签。
举栗子:
<s:file name="upLoadfile" accept="text/*"/><br> <s:file name="other" accept="text/html,text/plain"/>
accept指定接收文件类型,默认input。
hidden标签输出一个html隐藏表单元素,等价于:<input type="hidden" .../>
<s:hidden name="id" value="5"/>
重置按钮,属性 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>
重置后:
非表单标签 | 说明 |
---|---|
< s:actionerror> | 若是action实例的getActionError()方法返回不为null,该标签负责输出该方法返回的系列错误 |
<s:actionmessage> | 若是action实例的getActionMessager()方法返回不为null,该标签负责输出该方法返回的系列消息 |
< s:fielderror> | 若是action实例存在表单域的类型转换错误、校验错误,该标签负责输出错误提示 |