struts--拦截器实例

1、struts拦截器是什么?

拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理。同时,拦截器也可以让你将通用的代码模块化并作为可重用的类。
Struts2中的很多特性都是由拦截器来完成的。拦截是AOP的一种实现策略。拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。
2、实例:

1、新建一个web工程,struts-interceptor,加入struts支持

2、新建一个页面,index.jsp

<body> 
  <form action="method.action" method="post"> 
    <input type="submit" name="ok" value="按钮1"> 
  </form> 
</body> 

3、在src下新建com.etc.action包,在包下新建ShowAction.java类

package com.etc.action;

import com.opensymphony.xwork2.ActionSupport;

public class ShowAction extends ActionSupport {

	private static final long serialVersionUID = 8303608246129908286L;
	public void method(){
		System.out.println("正在执行method方法");
	}
}
4、在src下新建com.etc.interceptor,在包下新建MyInterceptor类

package com.etc.interceptor;

import java.util.Date;

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

public class MyInterceptor implements Interceptor{

	private static final long serialVersionUID = -1414526674659977742L;

	@Override
	public void destroy() {
	}

	@Override
	public void init() {
	}

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("拦截器在Action执行前拦截:"+new Date());
		invocation.invoke();
		System.out.println("拦截器在Action执行后拦截:"+new Date());
		return Action.LOGIN;
	}

}
5、配置struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>  
	<package name="hello" extends="struts-default" namespace="/">
		<interceptors>
           		 <interceptor name="myinterceptor" class="com.etc.interceptor.MyInterceptor"> 
           		 </interceptor>
        	</interceptors>  
		<action name="method" class="com.etc.action.ShowAction" method="method">
		 	<interceptor-ref name="myinterceptor" />  
			<result name="success">/success.jsp</result>
			<result name="error">/error.jsp</result>
		</action>
	</package>
</struts>    

6、运行:http://localhost:8080/struts-interceptor/index.jsp


点击按钮1,控制台输出:

拦截器在Action执行前拦截:Fri Jul 21 15:34:18 CST 2017
正在执行
method方法
拦截器在Action执行后拦截:Fri Jul 21 15:34:18 CST 2017

总结:

拦截器:主要就是用于在action执行前后进行一些操作,比如登录验证,在进入action之前,我们可以先配置自己的拦截器,在拦截器中进行验证是否可以进行登录。类似于AOP的实现过程,在代码的前面后面都自动加上一些内容。struts本身有很多自己的拦截器,在struts-default.xml中定义了,而struts.xml中的package都是继承了struts-default的,所以,我们可以在struts.xml中直接配置相应的拦截器,就可以了。比如timer拦截器,我们可以在某个action中配置相应的拦截器为timer,那么控制台就会输出我们执行这个action总共花费了多少时间,不需要我们去记下开始时间和结束时间,再相减,而是直接利用struts的拦截器来实现。


拦截器的用处:

1、登录校验

2、日志打印

3、事务


从上面这个图我们可以清楚的看到,每次请求到达FilterDispatcher(struts过滤器,在web.xml中配置),进入Action代理,然后就进入struts的拦截器,其中可能存在多个拦截器,所以,我们要执行invoke()方法,使得一个拦截器结束之后,继续进行下面的操作,只有拦截器执行完之后,我们才进入Action类,所以,struts拦截器的作用是很大的。比如,我们传入的参数,之前都是以request.getParameter("xx")的方式获取的,但是经过拦截器的处理之后,我们的参数通过getter/setter之后便可以直接获取,这都是拦截器的功劳。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值