ssh之struts2篇拦截器&常用标签

2022年10月19日13:17:28

一、拦截器

1、拦截器概述

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

2、拦截器工作原理

通常以代理的方式调用,在一个Action执行前后进行拦截,围绕Action和Result的执行而执行,以链式,对真正要执行的execute方法进行拦截。
ssh之struts2篇拦截器&常用标签

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的形式配置。位置如下:
ssh之struts2篇拦截器&常用标签

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标签

标签库:
ssh之struts2篇拦截器&常用标签

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集合时,判断索引的奇偶决定表格的颜色。
ssh之struts2篇拦截器&常用标签

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>

ssh之struts2篇拦截器&常用标签

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"/>

ssh之struts2篇拦截器&常用标签

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>

ssh之struts2篇拦截器&常用标签

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>

ssh之struts2篇拦截器&常用标签

5.7、< s:select >标签

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

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

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

ssh之struts2篇拦截器&常用标签

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>

ssh之struts2篇拦截器&常用标签

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。
ssh之struts2篇拦截器&常用标签

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>

ssh之struts2篇拦截器&常用标签
重置后:
ssh之struts2篇拦截器&常用标签

6、非表单标签

非表单标签 说明
< s:actionerror> 如果action实例的getActionError()方法返回不为null,该标签负责输出该方法返回的系列错误
<s:actionmessage> 如果action实例的getActionMessager()方法返回不为null,该标签负责输出该方法返回的系列消息
< s:fielderror> 如果action实例存在表单域的类型转换错误、校验错误,该标签负责输出错误提示
  • 作者:bug制造者。
  • 原文链接:https://blog.csdn.net/weixin_44467344/article/details/105556611
    更新时间:2022年10月19日13:17:28 ,共 7985 字。