struts2框架学习笔记04

1.自定义拦截器

(1)架构

这里写图片描述

(2)拦截器创建
创建方式1:
package cn.itheima.a_interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

//拦截器的第一种创建方式
//拦截器生命周期:随着项目的启动创建,随着项目的关闭销毁
public class MyInterceptor1 implements Interceptor{

    public void destroy() {
        //销毁方法
        // TODO Auto-generated method stub

    }

    public void init() {
        //初始化方法
        // TODO Auto-generated method stub

    }

    public String intercept(ActionInvocation arg0) throws Exception {
        //拦截器方法
        // TODO Auto-generated method stub
        return null;
    }
}
创建方式2:
package cn.itheima.a_interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

//拦截器的第二种创建方式==>继承AbstractInterceptor,struts2的体贴
//帮我们空实现了init和destory方法,我们如果不需要实现这两个方法,就可以只实现intercept方法
public class MyInterceptor2 extends AbstractInterceptor{

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        // TODO Auto-generated method stub
        return null;
    }
}
创建方式3:
package cn.itheima.a_interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

//拦截器的第三种创建方式
/**
 * 继承MethodFilterInterceptor,方法过滤器
 * 功能:定制拦截器拦截的方法
 * 定制拦截器需要拦截哪些方法
 * 定制拦截器不需要拦截哪些方法
 * @author dell-111
 *
 */
public class MyInterceptor3 extends MethodFilterInterceptor{

    @Override
    protected String doIntercept(ActionInvocation invocation) throws Exception {
        System.out.println("MyInterceptor3前处理");
        //放行
        invocation.invoke();

        System.out.println("MyInterceptor3后处理");

        return "";
    }
}
(3)拦截器api
1.放行
//放行
invocation.invoke();
2.前后处理
    System.out.println("MyInterceptor3前处理");
    //放行
    invocation.invoke();

    System.out.println("MyInterceptor3后处理");
3.不放行,直接跳转到下一个结果页面
  不执行后续的拦截器以及Action,直接交给Result处理结果.进行页面跳转
return "success";
(4)拦截器配置
步骤1:注册拦截器
<!-- 注册拦截器 -->
<interceptor name="myInter3" class="cn.itheima.a_interceptor.MyInterceptor3"></interceptor>
步骤2:配置拦截器栈
<!-- 注册拦截器栈 -->
    <interceptor-stack name="myStack">
        <!-- 自定义拦截器引入(建议放在20个拦截器之前) -->
        <interceptor-ref name="myInter3">
            <!-- 指定哪些方法不拦截 -->
             <!-- <param name="excludeMethods">add,delete</param> -->
            <!-- 指定哪些方法需要拦截 -->
            <param name="includeMethods">add,delete</param>
        </interceptor-ref>
        <!-- 引用默认的拦截器栈(20个) -->
        <interceptor-ref name="defaultStack"></interceptor-ref>
    </interceptor-stack>
步骤3:指定包中默认拦截器栈
<!-- 指定包中的默认拦截器栈 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<action name="Demo1Action_*" class="cn.itheima.a_interceptor.Demo1Action" method="{1}">
    <!-- 为Action单独指定走哪个拦截器栈 -->
    <!-- <interceptor-ref name="myStack"></interceptor-ref> -->
    <result name="success" type="dispatcher">/hello.jsp</result>
</action>
如何定制拦截方法
<!-- 指定哪些方法不拦截 -->
<!-- <param name="excludeMethods">add,delete</param> -->
<!-- 指定哪些方法需要拦截 -->
<param name="includeMethods">add,delete</param>
全局结果集

这里写图片描述

2.struts2标签(了解)

(1)标签体系

这里写图片描述

(2)struts2标签体系

这里写图片描述

(3)控制标签
<!-- 遍历标签iterator -->
<!-- ------------------------- --><br>
<s:iterator value="#list">
    <s:property/><br>
</s:iterator>
<!-- ----------------------------- --><br>
<s:iterator value="#list" var="name">
    <s:property value="#name"/><br>
</s:iterator>
<!-- ------------------------------ --><br>
<s:iterator begin="1" end="100" step="1">
    <s:property/>|
</s:iterator>
(4)数据标签
<!-- property 配合ognl表达式在页面取值 -->
<s:property value="#list.size()"/>
<s:property value="#session.user.name"/>
(5)表单标签
<!-- struts2表单标签 -->
<!-- 好处1:内置了一套样式 -->
<!-- 好处2:自动回显,根据栈中的属性 -->
<!-- theme:指定表单的主题
     xhtml 默认
     simple 简单,没有主题
     -->
<s:form action="Demo3Action" namespace="/" theme="xhtml">
    <s:textfield name="name" label="用户名"></s:textfield>
    <s:password name="password" label="密码"></s:password>
    <s:radio list="{'男','女'}" name="gender" label="性别"></s:radio>
    <s:radio list="#{1:'男',0:'女'}" name="gender1" label="性别"></s:radio>
    <s:checkboxlist list="#{2:'苹果',1:'梨',0:'香蕉'}" name="hobby" label="爱好"></s:checkboxlist>
    <s:select list="#{2:'本科',1:'研究生',0:'博士' }" headerKey="" headerValue="---请选择---" name="edu" label="学历"></s:select>
    <s:file name="photo" label="照片"></s:file>
    <s:textarea name="desc" label="个人简介"></s:textarea>
    <s:submit value="提交"></s:submit>
</s:form>
(6)非表单标签
this.addActionError("大哥错了");
取出错误信息
<!-- 非表单标签 -->
<s:actionerror/>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值