必威体育Betway必威体育官网
当前位置:首页 > IT技术

Struts2拦截器

时间:2019-06-10 00:45:15来源:IT技术作者:seo实验室小编阅读:67次「手机版」
 

struts2拦截器

拦截器概述

拦截器(Interceptor)就是当一个Action被执行之前与执行之后的一段代码。

许多框架的核心功能就是通过拦截器实现的。

比如Struts 2 中的数据校验,类型转换,文件上传,国际化,防止重复提交等。

拦截器是可插拔的,需要时插入,不需要时拔出。 可以为每个Action配置拦截器,也可以根据业务需求编写自己的拦截器。

拦截器与过滤器的区别

拦截器是基于JAVA反射机制的,而过滤器不是 过滤器依赖于servlet容器,

而拦截器不依赖 拦截器只能对Action起作用,而过滤器则可以对几乎所有请求

拦截器可以访问Action上下文,值栈中的对象,而过滤器不能。

拦截器思想

面向切面的编程(AOP) 把通用的功能从系统中提出来,单独处理,实现了软件的重用。

拦截器使用方法:

1,实现Interceptor接口 映射拦截器

//XML配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
    <constant name="struts.custom.i18n.resources" value="res"></constant>
	<package name="user" extends="struts-default" namespace="/">
		<interceptors>
		  <interceptor name="inter1" class="com.st.SimpleInterceptor1"></interceptor>
		</interceptors>
		<action name="test" class="com.st.TestAction">
		  <interceptor-ref name="inter1"></interceptor-ref>				  
          <result>success.jsp</result>
		</action>
	</package>
</struts>

-------------------------------------
//JAVA拦截器代码
package com.st;

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



public class SimpleInterceptor1 implements Interceptor {

	public void destroy() {
		System.out.println("SimpleInterceptor1.destroy()");
	}

	public void init() {
		System.out.println("SimpleInterceptor1.init()");
	}

	public String intercept(ActionInvocation invocation) throws Exception {
		TestAction ta = (TestAction)invocation.getAction();
		//ta.setName("denny");
		System.out.println("SimpleInterceptor1");
		return invocation.invoke();
	}
	
}

2,继承com.opensymphony.xwork2.interceptor.AbstractInterceptor抽象类实现拦截器

package com.st;

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

public class SimpleInterceptor2 extends AbstractInterceptor  {

	public void destroy() {
		System.out.println("SimpleInterceptor2.destroy()");
	}

	public void init() {
		System.out.println("SimpleInterceptor2.init()");
	}

	public String intercept(ActionInvocation invocation) throws Exception {
		TestAction ta = (TestAction)invocation.getAction();
		//ta.setName("denny");
		System.out.println("SimpleInterceptor2");
		return invocation.invoke();
	}
	
}

使用拦截器栈管理拦截器

在很多时候,有些指定的拦截器需要被多个Action所使用,这个时候,如果我们为每一个Action都分别配置拦截器的话,不仅麻烦,而且不利后期的维护,此时就需要用到拦截器栈。 所谓拦截器栈就是将一些拦截器组合起来进行统一管理。

------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
    <constant name="struts.custom.i18n.resources" value="res"></constant>
	<package name="user" extends="struts-default" namespace="/">
		<interceptors>
		  <interceptor name="inter1" class="com.st.SimpleInterceptor1"></interceptor>
		  <interceptor-stack name="mystack">
		  	<interceptor-ref name="inter1"></interceptor-ref>
		  </interceptor-stack>
		</interceptors>
		<action name="test" class="com.st.TestAction">
		    <interceptor-ref name="mystack"></interceptor-ref>
		    <result>success.jsp</result>
		</action>
	</package>
</struts>

struts2中使用拦截器来检察表单是否重复提交,

他采用同步令牌的方式来实现对表单重复提交的判断,需要使用到<s:token />标签

相关阅读

分享到:

栏目导航

推荐阅读

热门阅读