设为首页 加入收藏

TOP

Struts2入门(二)——配置拦截器(一)
2019-09-17 16:38:11 】 浏览:50
Tags:Struts2 入门 配置 拦截

一、前言

之前便了解过,Struts 2的核心控制器是一个Filter过滤器,负责拦截所有的用户请求,当用户请求发送过来时,会去检测struts.xml是否存在这个action,如果存在,服务器便会自动帮我们跳转到指定的处理类中去处理用户的请求,基本流程如下:

该流程笔者理解是基本流程,。如果有不对的地方,请下方留言。我会改正。谢谢;

好,接着往下讲:

注意:在struts.xml中,配置文件必须有该请求的处理类才能正常跳转,同时,返回SUCCESS字符串的类,必须继承ActionSupport,如果你没有继承,那么就返回"success",同样能够跳转到jsp逻辑视图,但是必须确保你struts.xml有<result name="success">xx.jsp</result>,该标签,具体操作在上一篇文章有介绍过简单例子。

1.1、了解拦截器

什么是拦截器,它的作用是什么?

拦截器,实际上就是对调用方法的改进。

作用:动态拦截对Action对象的调用,它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。

拦截器的执行顺序:

在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept方法后,会执行Action的execute方法。 

二、实际操作

2.1、自定义拦截器

新建一个类继承AbstractInterceptor。

package com.Interceptor;

import java.util.Date;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class MyInterceptor extends AbstractInterceptor {
    private String name;//该属性与struts.xml中的<param name="name">简单拦截器</param>一致,也就是说该name的值是简单拦截器
    public void setName(String name) {
        this.name = name;
    }

    //拦截action请求
    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
        //取得被拦截的action
        LoginAction action = (LoginAction)arg0.getAction();
        System.out.println(name+":拦截器的动作------"+"开始执行登录action的时间为:"+new Date());
        long start = System.currentTimeMillis();
        /*
         * ActionInvocation.invoke()就是通知struts2接着干下面的事情
         * 比如 调用下一个拦截器 或 执行下一个Action
         * 就等于退出了你自己编写的这个interceptor了
         * 在这里是去调用action的execute方法,也就是继续执行Struts2 接下来的方法*/
        String result = arg0.invoke(); 
        System.out.println(name+":拦截器的动作------"+"执行完登录action的时间为:"+new Date());
        long end = System.currentTimeMillis();
        System.out.println(name+":拦截器的动作------"+"执行完该action的时间为:"+(end-start)+"毫秒");
        
        System.out.println(result);    //输出的值是:success
        return result;
    }
}
/**
 * 该页面的效果如下:
 * 简单拦截器:拦截器的动作------开始执行登录action的时间为:Mon Oct 24 19:06:17 CST 2016
         用户名:admin,密码:123
         简单拦截器:拦截器的动作------执行完登录action的时间为:Mon Oct 24 19:06:18 CST 2016
         简单拦截器:拦截器的动作------执行完该action的时间为:1130毫秒
   success

 * */

 

在struts.xml中配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    
    <!--简单的拦截器  -->
    <package name="Interceptor" extends="struts-default" namespace="/ac">
        <!-- 跳转前拦截 -->
        <interceptors>
            <!-- 声明简单的过滤器 -->
            <interceptor name="Inter" class="com.Interceptor.MyInterceptor">
                <!--传递name的参数  -->
                <param name="name">简单拦截器</param>
            </interceptor>
        </interceptors>
        <action name="loginaction" class="com.Interceptor.LoginAction">
            <result name="success">/Interceptor/welcome.jsp</result>
            <result name="input">/Interceptor/error.jsp</result>
            &l
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇springboot activiti 整合项目框.. 下一篇面向对象

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目