struts2_拦截器与注解开发

Struts

拦截器

概述

在struts2中,拦截器(Interceptor)是用来动态拦截Action执行的对象。
拦截器是struts2的一个重要特性,Struts2框架的大多数核心功能都是通过拦截器来实现的,像避免表单重复提交、类型转换、对象组装、验证、文件上传等,都是在拦截器的帮助下实现的。拦截器之所以称为“拦截器”,是因为它可以在Action执行之前和执行之后拦截调用

优点

Struts2将它的核心功能放到拦截器中实现,而不是分散到Action中实现,有利于系统的解耦,使得功能的实现类似于个人电脑的组装,变成了可插拔的,需要某个功能就“插入”一个拦截器,不需要某个功能就“拔出”一个拦截器。你可以任意组合拦截器来为Action提供附加的功能,而不需要修改Action的代码。

拦截器执行流程

流程简略图

这里写图片描述

这里写图片描述

流程详细图
这里写图片描述

自定义拦截器

  1. 实现Interceptor接口

    public class MyInterceptor implements Interceptor {
        public void init() {}
        public void destroy() {}
        public String intercept(ActionInvocation invocation) throws Exception {
            return null;
        }
    }
  2. 在package标签中配置Interceptors

    <interceptors>
        <interceptor name="myInterceptor" class="org.itheima.struts.web.interceptor.MyInterceptor" />
    </interceptors>
  3. 在action标签中引用配置的Interceptor

    <interceptor-ref name="myInterceptor"></interceptor-ref>
  4. 完成Interceptor实现类中的intercept方法,完成拦截逻辑

    public String intercept(ActionInvocation invocation) throws Exception {
        System.out.println("拦截前");
        String result = invocation.invoke();        
        System.out.println("拦截后");
        return result;
    }
    • invocation

Interceptor接口

  • init方法
    struts框架启动时调用此方法初始化拦截器
  • destroy方法
    struts框架停止时调用此方法销毁拦截器
  • intercept方法
    请求过程中拦截action
  • AbstractInterceptor抽象类
    Interceptor接口的实现类,省去了init和destroy方法。
    建议继承此抽象类来实现拦截器。

MethodInterceptor

方法级别的拦截
<interceptor name="myMethodInterceptor" class="com.opensymphony.xwork2.interceptor.MethodFilterInterceptor">
    <param name="excludeMethods">test01</param>
</interceptor>

通过配置param来设置需要拦截的方法或者不拦截的方法

  • excludeMethods不拦截某些方法
  • includeMethods拦截某些方法

interceptor-stack配置

拦截器栈:一组拦截器。
  • 拦截器栈的配置:在package标签的interceptors标签中配置

    <interceptors>
            <interceptor-stack name="myStack">
                <interceptor-ref name="a" />
                <interceptor-ref name="b" />
            </interceptor-stack>
    </interceptors>
  • 拦截器执行的顺序
    自上而下的顺序执行。先配置的先执行

标签库

概述

Struts2标签库是一个比较完善,且功能强大的标签库,它将所有标签都统一到一个标签库中,从而简化了标签的使用,它还提供主题和模板的支持,极大地简化了视图页面代码的编写。

分类

  • 普通标签
    • 流程控制标签
    • 数据标签
  • UI标签
    • form标签

struts标签的引入(掌握)

在jsp页面中引入标签库

<%@ taglib uri="/struts-tags" prefix="s" %>

流程控制标签(掌握)

  • if标签elseif标签else标签

    <%
    request.setAttribute("score", 70);
    %>
    <!-- if elseif else -->
    <!-- 流程控制标签可以直接访问值栈 -->
    <s:if test="#request.score == 100">
    满分
    </s:if>
    <s:elseif test="#request.score > 90">
    优秀
    </s:elseif>
    <s:elseif test="#request.score > 80">
    良好
    </s:elseif>
    <s:elseif test="#request.score > 60">
    及格
    </s:elseif>
    <s:else>
    不合格
    </s:else>

    注意:

    struts的流程标签只支持 值栈操作,不支持EL表达式

  • iterator标签

    <%
    List<String> list = new ArrayList<String>();
    list.add("张三");
    list.add("李四");
    list.add("王五");
    list.add("赵六");
    request.setAttribute("list", list);
    %>
    <s:iterator var="item" begin="0" end="2" status="s" step="2"
        value="#request.list">
        var : <s:property value="#item" />
        <br />
        s: <s:property value="#s.count" />
        <br />
    </s:iterator>
    <%
    Map<String, String> map = new HashMap<String, String>();
    map.put("a", "张三");
    map.put("b", "李四");
    map.put("c", "王五");
    map.put("d", "赵六");
    request.setAttribute("map", map);
    %>
    <s:iterator var="item" status="s" value="#request.map">
        var : <s:property value="#item" />
        <br />
        s: <s:property value="#s.count" />
        <br />
    </s:iterator>
    • var: 用来声明循环的条目对象名称
    • id: 用来声明循环的条目对象名称
    • id和var不能共存,如果用var声明需要通过#访问,id声明不需要#
    • begin:开始遍历的索引。只适用于List遍历。
    • end:遍历的结束索引。只适用于List遍历。
    • step:遍历的步长。只适用于List遍历。
    • status:计数器对象
      • count 已经遍历的集合元素个数
      • index 当前遍历元素的索引值
      • odd 是否奇数行
      • even 是否偶数行
      • first 是否第一行
      • last 是否最后一行

数据标签

  • property标签:ognl表达式显示

    <s:property value="'hi'.length()" />
  • a标签

    <s:a href="control.jsp">访问jsp</s:a>
    <s:a namespace="/tags" action="action01">访问action</s:a>
    <s:a namespace="/tags" action="action01" method="test01">访问action的method</s:a>
    • href:指定url路径。可以省去上下文路径。
    • action:请求的动作名称(类名)
    • namespace:动作名称所在的名称空间
    • id:指定id
    • method:指定Action调用方法。要使用时,需要开启动态方法调用的常量配置。
  • url标签

    <s:url namespace="/tags" action="action01" var="url"></s:url>
    <a href="<s:property value='#url'/>">url标签</a>

    >

    • action:动作名称
    • namespace:名称空间
    • var:取值是一个普通字符串。会把action和namespace组成一个url作为value,把var的取值作为一个key,存入到值栈的上下文中
  • debug标签:调试值栈结构的

    <s:debug />
  • date标签

    <%
        request.setAttribute("date", new Date());
    %>
    data标签  :<s:date name="#request.date" format="yyyy/MM/dd hh:mm:ss" var="vdate"/>
    <br />
    vdate : <s:property value="#vdate"/>
    br />
    $vdate : ${vdate}    
    • name属性:取值是一个ognl表达式,表示要格式化的日期对象
    • format属性:指定格式
    • var属性:取值是一个普通的字符串。 把格式化好的日期字符串作为value,把var的取值作为key。存入到值栈的上下文区中

表单标签(了解)

表单标签通用属性

属性名主题数据类型说明
titlesimpleString设置表单元素的title属性
disabledsimpleString设置表单元素是否可用
labelxhtmlString设置表单元素的label属性
labelPositionxhtmlString设置label元素的显示位置,可选值 : top 和 left(默认)
namesimpleString设置表单元素的name属性,与Action中的属性名对应
valuesimpleString设置表单元素的值
cssClasssimpleString设置表单元素的class
cssStylesimpleString设置表单元素的style属性
requiredxhtmlBoolean设置表单元素为必填项
requiredpositonxhtmlString设置必填标记(默认为*)相对于label元素的位置,可选值:left 和right(默认)
tabindexsimpleString设置表单元素的tabindex属性
  • form标签:表单
属性名是否必填数据类型说明
actionString指定提交时对应的action,不需要action后缀
enctypeStringHTML表单enctype属性
methodStringHTML表单method属性
namespaceString所提交action的命名空间
  • textfield标签:文本输入框
  • password标签:密码框
属性名说明
name用于指定密码输入框的名称
size用于指定密码输入框的显示宽度,以字符数为单位
MaxLength用于限定密码输入框的最大输入字符串个数
showPassword是否显示初始值,即使显示也仍为密文显示,用掩码代替
  • radio标签:单选框
属性名是否必填数据类型说明
listCellection、Map、Enmumeration、Iterator,array用于生成单选框中的集合
listKeyString指定集合对象中的哪个属性作为选项的value
listValueString指定集合对象中的哪个属性作为选项的内容
  • checkbox标签:单个多选框
  • checkboxlist标签:多选框
属性名是否必填数据类型说明
listCellection、Map、Enmumeration、Iterator,array用于生成多选框的集合
nameString指定该元素的name
listKeyString生成checkbox的value属性
listValueString生成checkbox后面显示的文字

* select标签:下拉选择框

属性名是否必填数据类型说明
listCellection、Map、Enmumeration、Iterator,array用于生成下拉框的集合
listKeyString生成选项的value属性
listValueString生成选项的显示文字
headerKeyString在所有的选项前再加额外的一个选项作为其标题的value值
headerValueString显示在页面中header选项的内容
multipleBoolean指定是否多选,默认为 false
emptyOptionBoolean是否在标题和真实的选项之间加一个空选项
sizeInt下拉框的高度,即最多可以同时显示多少个选项
  • file标签:文件上传列表
  • textarea标签:文本区域
  • hidden标签:隐藏标签
  • submit标签:提交标签
  • reset标签:重置标签

struts2注解开发(了解)

开发流程

  1. 导入struts的环境jar,导入注解的插件jarstruts2-convention-plugin-x.x.x.jar
  2. 在action类中配置注解标签

注解


  • Namespace 注解

用来模拟package标签的namespace属性的。

需要在Action的类上配置。

  • ParentPackage 注解
    用来模拟package标签的extends属性的。

    需要在Action的类上配置。
  • Action注解
    用来模拟action标签的。需要在action类中的action方法上配置。

    * value注解参数用来模拟 action标签中的name属性
    * results注解参数用来模拟 action标签内的result标签
  • Result注解
    用来模拟result标签的。可以在action类上配置或者在action方法上配置。
    action类上配置就是全局的。action方法上的配置是局部的。

    * name注解参数用来模拟result标签name属性
    * type注解参数用来模拟result标签type属性
    * locaction注解参数用来模拟result标签的标签内容
    * params注解参数用来模拟result标签的内部param标签
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值