Struts2拦截器

介绍

拦截器其实是AOP的一种实现方式。拦截器可以在调用Action之前和之后执行代码。框架的大多数核心功能都是作为拦截器实现的。Struts2提供了对个拦截器,开发人员可以根据需要配置拦截器。
        客户端发送请求会被Struts2的过滤器拦截,此时Struts2对请求持有控制权。他会创建action的代理对象。之后通过拦截器处理请求,最后交给action处理。在这期间,拦截器对象作用Action和Result的前后可以执行的任何操作,所以Action对象编写简单是由于拦截器进行了处理。
在这里插入图片描述
在这里插入图片描述

配置拦截器

在struts.xml中配置

<package name="default" extends="struts-default">
   <interceptors>
       <interceptor name="timer" class=".."/>
       <interceptor name="logger" class=".."/>
   </interceptors>
   <action name="login" class="tutorial.Login">
      <interceptor-ref name="timer"/>
      <interceptor-ref name="logger"/>
      <result name="input">login.jsp</result>
      <result name="success" type="redirectAction">/secure/home</result>
   </action>
</package>

为包指定特定的拦截器

<package name="basicstruts2" extends="struts-default" > 
    <interceptors> 
        <interceptor-stack name="appDefault"> 
            <interceptor-ref name="timer" /> 
            <interceptor-ref name="logger" /> 
            <interceptor-ref name="defaultStack" /> 
        </interceptor-stack> 
    </interceptors>          

    <default-interceptor-ref name="appDefault" /> 
</package> 

编写拦截器

拦截器必须实现com.opensymphony.xwork2.interceptor.Interceptor接口
在Interceptor中有三个方法:

public interface Interceptor extends Serializable {

    void destroy();

    void init();

    String intercept(ActionInvocation invocation) throws Exception;
}

init():方法用于拦截器执行一些初始化操作,此方法在拦截器被实例化后和intercept()方法执行前调用。
destroy():方法指示生命周期结束,他在拦截器被销毁前调用,用于拦截器在初始化时占用一些资源。
intercept():方法是拦截器中的主要方法,用于执行Action对象中的请求处理方法及其后的一些操作,动态增强Action功能。
说明:只有电泳intercept方法中的invocation参数的invoke方法,才可以执行Action对象中的请求处理方法。

使用拦截器

(1)创建动态Java Web项目,将Struts2的相关类包配置到构建路径中,并在web.xml文件中注册Struts2提供的StrutsPrepareAndExecuteFilter过滤器,从而搭建Struts2的开发环境。
(2)创建名为TestAction的类,此类继承于ActionSupport对象。关键代码如下:

package com.yy;

import com.opensymphony.xwork2.ActionSupport;

public class TestAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public String execute() throws Exception{
		Thread.sleep(1000);
		return SUCCESS;		
	}	
}

(3)在struts.xml中配置TestAction对象,并输出Action执行时间拦截器timer应用到TestAction中,关键代码为

<constant name="struts.devMode" value="true"/>
<constant name="struts.configuration.xml.reload" value="true"/>

<package name="myPackage" extends="struts-default">
	<action name="testAction" class="com.yy.TestAction">
		<interceptor-ref name="timer"/>
		<interceptor-ref name="logger"/>
		<interceptor-ref name="defaultStack">
			<param name="exception.logEnabled">true</param>
			<param name="exception.logLevel">ERROR</param>
		</interceptor-ref>
		<result>success.jsp</result>
	</action>
	
</package>

(4)创建简单的index.jsp和success.jsp页面用来测试timer拦截器,
(5)结果如下
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值