ssh之struts2篇(二)拦截器&经常使用标签

1、拦截器

一、拦截器概述

概述:interceptor是struts2的核心组成部分,可动态拦截Action的调用对象,相似Servlet中的过滤器。可插拔,实现AOP。
拦截器组合在一块儿=拦截器链/栈,对应各个功能的拦截器按照必定的顺序排列在一块儿造成的链,链组成的集合就是栈。php

二、拦截器工做原理

一般以代理的方式调用,在一个Action执行先后进行拦截,围绕Action和Result的执行而执行,以链式,对真正要执行的execute方法进行拦截。
在这里插入图片描述css

三、拦截器配置

3.一、拦截器

在struts.xml文件中配置,标签:< interceptor >
name属性指定拦截器名称,class属性指定拦截器的实现类。
传参用< param >标签,其中name指定参数名,param Value表示参数的值。html

<interceptor name="login_icpt" class="login_interceptor">
                <param name="name">param Value</param>
 </interceptor>

3.二、拦截器栈

拦截器栈被附加到一个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>

3.三、默认拦截器栈

配置默认拦截器用标签:< 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>

3.四、内建拦截器

在struts-default.xml文件中,拦截器以name-class的形式配置。位置以下:
在这里插入图片描述mysql

四、自定义拦截器

4.一、实现自定义拦截器

方式一:
实现自定义拦截器=直接或间接的实现com.opensymphony.xwork2.interceptor.Interceptor接口。
实现其中的三个方法:void init()、
void destory()、
String intercept(ActionInvocation invocation) throws Exception
方式二:
继承抽象拦截器类AbstractInterceptor,该类实现了上述接口的方法,只需实现interceptor()就能够建立自定义拦截器。web

4.二、举个栗子

步骤:
1)、必须实现Interceptor接口或者继承AbstractInterceptor类;
2)、在struts.xml中自定义拦截器;
3)、在struts.xml中Action使用拦截器。
举个栗子:(懒得本身写了。。。)
https://jingyan.baidu.com/article/63f236285c13260208ab3d93.htmlsql

2、标签

一、分类

主要分为:普通标签和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>

3.一、< 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.二、< s:a >标签

构造页面超连接

属性 说明
href 可选,String,指定超连接地址
action 可选,String,指定超连接Action地址
namespace 可选,String,指定Action地址
id 可选,String,指定id
method 可选,String,指定Action调用方法

3.三、< s:debug >标签

使用该标签,网页中会生成debug的连接,输出服务器对象信息。

3.四、< s:include >标签

一个属性:value
指定被包含的jsp、Servlet等
< param >子标签:用来传参,name参数名,value参数值

<s:include value="property_tags.jsp">
  <s:param name="user" value="aa"/>
</s:include>

3.五、< s:param >标签

结合其余标签使用
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类。

5.一、< s:form >标签

form标签输出一个html输入表单,此外,xhtml主题的form标签还输出表单元素外围的表格。
使用时通常包含其它的表单元素,如:< s:textfield >、< s:radio >等

5.二、< 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.三、< 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.四、< s:password >标签

password标签输出一个HTML口令输入控件,密码输入框,

属性 说明
name 指定输入框名称
size 指定输入框的显示宽度,字符数
maxlength 限定输入框的最大输入字符串个数
shoePassword 是否显示初始值,密文显示 掩码代替

举栗子:

<s:password label="password" name="password" maxLength="15" size="6" showPassword="true"/>

在这里插入图片描述

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.六、< 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.七、< s:select >标签

select标签输出一个html下拉列表框,等价于:<select …><option …>< /option>< /select >
举个栗子:

<s:select list="{'软件','计科','空信','电科','电信','物联网','通讯'}" label="所学专业" size="3" multiple="false"/><br>

multiple布尔类型,指定是否多选,默认为false。
list必选,生成下拉框的集合。
size可选,Int类型,指定最多能够同时显示多少个选项。

在这里插入图片描述

5.八、< 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.九、< 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.十、< s:hidden >标签

hidden标签输出一个html隐藏表单元素,等价于:<input type="hidden" .../>

<s:hidden name="id" value="5"/>

5.十一、< 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>

在这里插入图片描述
重置后:
在这里插入图片描述

六、非表单标签

非表单标签 说明
< s:actionerror> 若是action实例的getActionError()方法返回不为null,该标签负责输出该方法返回的系列错误
<s:actionmessage> 若是action实例的getActionMessager()方法返回不为null,该标签负责输出该方法返回的系列消息
< s:fielderror> 若是action实例存在表单域的类型转换错误、校验错误,该标签负责输出错误提示