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 注解配置拦截器 实例

/** * */ package com.wonders.stpt.contractReview.action; import java.util.ArrayList; import jav...
  • z69183787
  • z69183787
  • 2014年08月08日 15:49
  • 10628

Struts2上传文件拦截器实现文件上传

Struts2预置了大量的拦截器,见struts-default.xml第122行。 有一部分拦截器是Struts2框架自身用到的,必须引用,这些拦截器打包在basicStack中,我们项目中引...
  • xlinsist
  • xlinsist
  • 2014年12月11日 13:34
  • 772

.Java程序员从笨鸟到菜鸟之(四十七)细谈struts2(九)内置拦截器和自定义拦截器详解(附源码)

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188        在上一篇博客中,我们一起看了拦截器的具体实现原理,并且看了一下源码(细谈s...
  • csh624366188
  • csh624366188
  • 2012年05月08日 12:24
  • 11156

Struts2中的拦截器详解

拦截器是什么拦截器是一种可以在让用户在Action执行之前和Result执行之后进行一些功能处理的机制。 拦截器在action执行之前和result执行之后的顺序是相反的,可以看下图: 也就是说执...
  • u010870518
  • u010870518
  • 2015年05月24日 13:40
  • 3738

Struts2拦截器&拦截器栈 实例:登录验证拦截器

本篇源自 java1234小峰 尊重原创 热爱生活 Struts2 拦截器是在访问某个Action 或Action 的某个方法,字段之前或之后实施拦截,并且Struts2 拦截器是可 插拔的,拦截...
  • conglinyu
  • conglinyu
  • 2017年02月14日 22:02
  • 560

自己实现Struts2(六)实现参数拦截器并调试框架

上一章自己实现Struts2(五)实现StrutsPrepareAndExecuteFilter我把Struts2的核心拦截器StrutsPrepareAndExecuteFilter实现好了,现在其...
  • TimHeath
  • TimHeath
  • 2017年03月26日 20:29
  • 775

struts2的常用拦截器-----

Struts2(XWork)提供的拦截器的功能说明:   拦截器 名字 说明 Alias Interceptor alias 在不同请求之间将请求参数在不同名字件转换...
  • wenzhihui_2010
  • wenzhihui_2010
  • 2013年09月26日 16:09
  • 774

struts2的内置拦截器

一、params拦截器 params 拦截器提供了框架必不可少的功能,将请求中的数据设置到Action中的属性上。 二、staticParams拦截器 staticParams拦截器是将配置文件...
  • qq1134550437
  • qq1134550437
  • 2016年07月25日 19:24
  • 750

struts2自定义拦截器(异常)

if(username.equals("zjf")&&password.equals("123")){ Integer counter=(Integer)ac.getApplication()....
  • DannyZheng
  • DannyZheng
  • 2014年01月15日 16:44
  • 544

【Struts2框架】第六节拦截器-拦截器介绍和总结

一.拦截器概念 Strrurs拦截器是可插拔式的拦截器:如果我们要使用某个拦截器,只需要在配置文件中应用该拦截器即可。 Struts拦截器由struts-default.xml,struts.xml...
  • u013517797
  • u013517797
  • 2015年07月27日 16:09
  • 1312
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts2学习笔记五(拦截器)
举报原因:
原因补充:

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