Struts2学习笔记五(拦截器)

转载 2016年08月30日 17:16:57

1、拦截器类似于servlet中的Filter。Interceptor1 before----- Interceptor2 before------execute--Interceptor2 after---Interceptor1 after

2、自定义拦截器,实现Interceptor接口,或者定义AbstractInterceptor。

  public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("before");
		System.out
		.println("interceptor1: " + invocation.getAction().getClass());
		String result = invocation.invoke();
		System.out.println("after");
		return result;
	}

3、在struts.xml中定义

		<interceptors>
			<span style="background-color: rgb(255, 0, 0);"><interceptor name="theIntercepter1"
				class="com.yanlei.interceptor.TheIntercepter1"></interceptor></span>
				<interceptor name="theIntercepter2"
				class="com.yanlei.interceptor.TheInterceptor2"></interceptor>
		</interceptors>

3、在action中使用,可以用 param 传参数,  拦截器中testname 接受。
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">		<action name="login" class="com.yanlei.struts2.LoginAction"></span>

			<interceptor-ref name="theIntercepter1">
			<param name="test">yanlei</param>
			</interceptor-ref>
			<interceptor-ref name="theIntercepter2"></interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>

   注意:

      <interceptor-ref name="defaultStack"></interceptor-ref>  默认拦截器站必须有,一般默认有,但写了新的会覆盖。

4、注意  ActionInvocation接口,invocation.getAction().getClass() 方法 可以得到  需要拦截的action。


5、方法拦截器,继承 MethodFilterInterceptor ,与Interceptor接口,AbstractInterceptor一样编写,注册,使用时

	                <interceptor-ref name="theIntercepter3">
				<param name="includeMethods">execute</param>
				<param name="excludeMethods">myExecute</param>
			</interceptor-ref>
    针对method="myExecute"  拦截includeMethod  ,不拦截excludeMethod

6、配置监听,实现PreResultListener接口,在Action执行后,到达result之前。

     然后再拦截器中 方法中  :  invocation.addPreResultListener(new TheLisetener());   注册该监听。


7、配置自己的默认拦截器栈,如对于没有session 内容的页面,提示没有登录,跳转到错误页面,但loginAction不拦截

    方法:先配置拦截器,在配置拦截器,再配置自己的拦截器栈,然后设置为默认。      所有action在不写拦截器的情况下,默认即为mydefaultStack

public class LoginInterceptor extends MethodFilterInterceptor {
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		if (invocation.getAction().getClass() == LoginAction.class) {   //如果是LoginAction的,直接可以进入,直接invoke
			return invocation.invoke();
		}

		Map map = invocation.getInvocationContext().getSession();
		if (map.get("userInfo") == null) {
			return Action.ERROR;                         //如果是Session中行没有消息,就返回错误页面,全局的result中配置
		} else {
			String result = invocation.invoke();          //否则正常流程	
                	return result;
		}

	}

}


	<interceptor name="loginInterceptor"
				class="com.yanlei.interceptor.LoginInterceptor">
			</interceptor>
			<interceptor-stack name="mydefaultStack">   <span style="background-color: rgb(255, 0, 0);">  //自己的默认拦截器,就是系统默认的和 自己的拦截器</span>
				<interceptor-ref name="loginInterceptor"></interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
<span style="white-space:pre">		</span><default-interceptor-ref name="mydefaultStack"></default-interceptor-ref> <span style="color:#ff0000;">设置默认拦截器</span>


9、可以配置多个包,拆分struts.xml
<struts>
<span style="white-space:pre">	</span><package name="struts2" extends="struts-default"><pre name="code" class="html" style="font-size: 13.3333px;"><span style="white-space:pre">	</span> </package>

<span style="white-space:pre">	</span><package name="struts3" extends="struts-default">
<pre name="code" class="html" style="font-size: 13.3333px;"><span style="white-space:pre">	</span> </package>

  <span style="white-space:pre">	</span><include file="struts-1.xml"></include>
<span style="white-space:pre">	</span><include file="struts-2.xml"></include>
</struts>














相关文章推荐

Struts2学习笔记(五)——服务端验证以及拦截器过滤器

Struts2 有两种方式实现服务端验证 (一)使用ActionSupport编码实现验证 1)在action中进行验证     if("".equals(user.getName())||user....

struts2 拦截器学习笔记01

0.拦截器的作用 用于在Action执行之前或者执行之后,进行拦截,并加入我们自定义的代码,执行相关的操作,是实现AOP的一种策略。 1拦截器在Action之前还是之后执行 主要看inv...

Struts2学习笔记(四)——拦截器

拦截器配置 单个拦截器的配置如下: 拦截器同样可以注入参数: 参数值 拦截器栈配置如下: ...

Struts2学习笔记(十)方法拦截器

定义拦截器时,可以直接继承AbstractInterceptor抽象类(该类实现了Interceptor接口,并对init和destory方法进行了空实现),再实现抽象方法即可。...
  • fumier
  • fumier
  • 2015年04月24日 15:30
  • 719

Java学习笔记 Struts2拦截器实现权限登录

此实例实现功能:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面。 一:JSP代码 1:log...

struts2学习笔记(5)---自定义拦截器

什么是拦截器?struts2中拦截器分为Struts2定义好的拦截器和自定义的拦截器。其作用是在一个Action执行之前进行拦截,在Action执行之后又加入某些操作。实现原理当请求一个Action时...

struts2学习笔记之拦截器(Interceptor)

一、拦截器介绍 拦截器即interceptor 其实现类似于Servlet技术中的Filter,与AOP概念是相关的。 关于AOP可以参考: http://www.cnblogs.com/wa...

struts2学习笔记-----拦截器

配置拦截器语法格式 使用拦截器栈,为了能在多个动作中方便引用同一个或者几个拦截器,可以使用拦截器栈。 当拦截器栈被配置一个action时,要想执行该action必须先执行拦...

Struts2学习笔记---拦截器实例两个

这里自定义一个将特殊内容转化为指定内容的实例。 这里将"java"字符串转化为"play"。 这里列出核心代码 struts.xml   定义及配置拦截器 ...

Struts2学习笔记(八) 拦截器(Interceptor)(上)

什么是拦截器(Interceptor) 拦截器是struts2框架最重要的特性之一。它可以让你在Action 方法执行前后(Result执行之后)进行一些功能处理。在前面学习Action和学习Res...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts2学习笔记五(拦截器)
举报原因:
原因补充:

(最多只允许输入30个字)