zoukankan      html  css  js  c++  java
  • struts2学习(5)拦截器简介以及例子执行过程

    一、拦截器简介;

    二、Struts2预定义拦截器&拦截器栈

    在执行action之前和之后,拦截器进行了操作;
    比如struts-default.xml中就有很多预定义的拦截器;
     
    拦截器栈:
    interceptor-stack;
    定义了一批拦截器;相当于把几个拦截器串起来;
    struts-default.xml中定义了默认使用的拦截器栈:
    <default-interceptor-ref name="defaultStack" />
     
    三、简单例子,认识拦截器:
    com.cy.action.HelloAction.java:
    package com.cy.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class HelloAction extends ActionSupport{
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String execute() throws Exception {
            System.out.println("执行了HelloAction的默认方法");
            return SUCCESS;
        }
        
    }
    View Code

    com.cy.interceptor.MyInterceptor.java:

    package com.cy.interceptor;
    
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.Interceptor;
    
    public class MyInterceptor implements Interceptor{
        
        //拦截器销毁的时候调用
        public void destroy() {
            System.out.println("MyInterceptor销毁");
        }
        
        //初始化的时候调用
        public void init() {
            System.out.println("MyInterceptor初始化");
        }
        
        //真正的调用
        public String intercept(ActionInvocation invocation) throws Exception {
            System.out.println("在Action执行之前");
            String result = invocation.invoke();    //这里就是success,error啊啥的
            System.out.println("在Action执行之后");
            return result;                            //这个result也是要返回的,给配置文件看的。比如action中返回的是success,这边也返回success
        }
    
    }

    struts.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    <struts>
        
        <package name="manage" namespace="/" extends="struts-default">
            <interceptors>
                <interceptor name="myInterceptor" class="com.cy.interceptor.MyInterceptor"></interceptor>
            </interceptors>
        
            <action name="hello" class="com.cy.action.HelloAction">
                <result name="success">success.jsp</result>
                
                <!-- 系统看到我们引用了拦截器myInterceptor就不会引用其他的拦截器/栈了,因此加上默认的拦截器
                     myInterceptor相当于最外层的,defaultStack相当于最里层的,顺序是先进入myInterceptor再是defaultStack
                 -->
                <interceptor-ref name="myInterceptor"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </action>
            
        </package>
    </struts>

    success.jsp:

    <body>
        name: ${name}
    </body>
    View Code

    测试结果:

    启动tomcat,浏览器访问:http://localhost:8080/Struts2Chap01/hello?name=aaa,查看console打印:

    系统运行的时候,通过读取配置文件,就有一个拦截器的初始化过程;
    网址输入hello?name=aaa后,程序的执行过程:
    1.进入MyInterceptor的intercept方法,打印:“在Action执行之前”;
    2.执行HelloAction中的execute方法;执行完成;
    3.MyInterceptor的intercept方法继续执行,打印:"在Action执行之后",返回结果;
     
     
    百度百科上的图:
     
     
     
    -------------
  • 相关阅读:
    怎么点击div之外的区域就隐藏这个div啊 找了很久,都没有很好解决
    ibatis 到 MyBatis区别
    MyBatis学习(一)一个简单的例子
    iBatis简单入门教程
    strut2的标签
    spring事务传播机制实例讲解
    ORACLE中Drop table cascade constraints之后果.
    oracle表的操作sql语句
    webService
    Oracle临时表
  • 原文地址:https://www.cnblogs.com/tenWood/p/7097021.html
Copyright © 2011-2022 走看看