Struts2之拦截器原理分析及使用-下

一、学习案例:关于拦截器的学习,在此就结束了,之所以分了四章讲解,一方面是让大家对拦截器的原理以及实现方式进行系统的掌握,另一方面就是让大家学会看源码以及体验看源码所带来的好处。最后,也就是这一章,我会用一个小案例进行总结。

案例:登录验证功能的实现。

二、案例分析:项目配置好后,我们先在浏览器中访问login1,我们别输入admin,换其他词,则会跳回当前的登录页面。此时,我们在浏览器中访问login2,会跳转到error.jsp页面,证明拦截器拦截成功。我们再访问login1,正确输入admin,成功跳到success.jsp页面。我们接着访问login2,此时也会直接跳转到success.jsp页面。证明登录验证成功。

a)创建LoginAction.java,Login2Action.java。在LoginAction.java中判断用户名和密码。成功则往session中放置登录对象,错误跳转到登录页面。

if(user.getUsername().trim().equalsIgnoreCase("admin") && user.getPassword().equals("admin")){
	ActionContext.getContext().getSession().put("user", user);
	return SUCCESS;
}

b)创建拦截器MyInterceptor.java,并实现判断逻辑:判断当前访问action是否是LoginAction.java,是,直接往下执行,调用下个拦截器。不是,则判断session中是否存在user对象,存在则正常往下执行,不存在,则跳转到登录页面。

		Object obj = invocation.getAction().getClass();
		if(LoginAction.class == obj){
			return invocation.invoke();
		}

		User user = (User) invocation.getInvocationContext().getSession().get("user");
		if(null == user){
			return Action.LOGIN;
		}
		return invocation.invoke();

c)配置struts.xml

定义自己的拦截器,以及拦截器栈

	<interceptors>
    		<interceptor name="myInterceptor" class="com.almostman.interceptor.MyInterceptor"></interceptor>
    		<interceptor-stack name="MyStack">
    			<interceptor-ref name="myInterceptor"></interceptor-ref>
    			<interceptor-ref name="defaultStack"></interceptor-ref>
    		</interceptor-stack>
    	</interceptors>

三、经验之谈:

a)在我们下载的struts包下有个apps,下面的war包,我们可以直接放到tomcat下,运行访问。都是一些小功能有助于大家对struts的理解和提高。

b)大家没事的时候,多熟练下自己的编译工具。我之前用的eclipse,不过现在都是myeclipse。现在感觉是越来越顺手了,不自觉地就有一种使用的冲动。呵呵。让大家熟悉,主要是了解一些快捷键,可以自行百度,有很多。这样有助于增加大家对编程开发的好感。

四、参考项目:http://download.csdn.net/detail/u011638419/8207123

五、每日一乐:

小明和朋友一起路过一个西瓜档,看见里面有很多大西瓜,就问档主:西瓜甜不甜啊!

肯定甜,不甜不收钱。

哦,那就帮我挑一个不甜的吧!

最终解释权归爱尚合伙人(www.23hhr.com)所有,转载请注明出处。

时间: 2024-10-01 02:30:17

Struts2之拦截器原理分析及使用-下的相关文章

Struts2之拦截器原理分析及使用-上

一.学习案例:通过在loginUI.jsp页面填写表单提交成功跳转到结果页面,查看控制台输出,初步了解拦截器工作流程. 二.案例分析: a)创建拦截器(MyInterceptor.java)实现Interceptor接口. 创建成功后,会实现三个方法:init(),destroy(),intercept(). 我们主要是使用intercept()方法,在此实现功能. init()会在服务器启动struts.xml加载时进行自动调用. destroy()会在服务器重启时调用. b)在struts.

Struts2之拦截器原理分析及使用-中

一.学习案例:关于拦截器的了解,我们肯定不在单纯地编码.我会带大家通过研读源码了解拦截器的实现方式,以及学习struts2的编码方式. 二.案例分析: a)适配器的实现首先会实现Interceptor接口,而在实现类中,我们会实现三个方法:init(),destroy(),intercept().而前两个对于我们来讲并不需要.当然struts2也采用了适配器模式,从而让实现类代码更加清晰,容易辨别.在此,我们会通过继承AbstractInterceptor抽象类替换Interceptor接口,由

Struts2之拦截器原理分析及使用-再中

一.学习案例:关于拦截器的了解,我们肯定不再单纯地编码.我会带大家通过研读源码了解拦截器的实现方式,以及学习struts2的编码方式. 二.案例分析: a)MethodFilterInterceptor方法拦截器,如果没指定includeMethods,也没指定excludeMethods,则所有方法都会被拦截,即所有方法默认includeMethods. b)对于指定了includeMethods,而不在其中的方法则不会被拦截. d)怎么拦截,拦截什么都是由MethodFilterInterc

Struts2拦截器原理以及实例

Struts2拦截器原理以及实例 一.Struts2拦截器定义 1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. 拦截器栈(Interceptor Stack).Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链.在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用. 二.实现Struts2拦截器原理 Struts 2的拦截器实现相对

【Struts2】拦截器

一.概述 二.在Struts2中使用拦截器 2.1 步骤 2.2 分析拦截器原理 2.3 关于interceptor与Filter区别: 三.案例 一.概述 介绍拦截器: struts2拦截器使用的是AOP(面向切面编程)思想.AOP的底层实现就是动态代理.拦截器采用责任链模式 ,在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行.struts2中在struts-default.xml文件中声明了所有的拦截器

谈谈 Struts2 的拦截器

套话 相信很多人都用过 Struts2 了,当然,对 Struts2 的原理也都比较了解.之前在一个项目中就已经用到了,当初的理解也仅仅是局限在应用的层面上,对于更深层次的原理.机制,了解的并不是很多.现在回过头来,再看 Struts2 的拦截器,相比之前的理解,又别有另一番滋味. 理解 Struts2 的拦截器,英文名为 Interceptor ,至于为什么中文要翻译为拦截器,我想这一定是有原因的,肯定不是一拍脑门,就叫拦截器了(它必定有什么含义在里边).从字面的意思,就是在发送请求的时候,有

【跟我一步一步学Struts2】——拦截器

前言 前面提到过拦截器.而且说拦截器仅仅能拦截Action.这里拦截器的调用体现了责任链模式.为什么说体现了责任链模式呢? 以下的一段话说的非常明确: Struts2将整个运行划分成若干同样类型的元素,每一个元素具备不同的逻辑责任,并将它们纳入到一个链式的数据结构中.而每一个元素又有责任负责链式结构中下一个元素的运行调用. 从代码重构的角度来看,实际上是将一个复杂的系统,分而治之.从而使得每一个部分的逻辑可以高度重用并具备高度可扩展性. 拦截器的原理 Struts2框架的拦截器是动态配置的,假设

Struts2中拦截器的简单实现

Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行struts.xml中引用 的拦截器,在执行完所有引用的拦截器的intercept方法后,会执行Action的execute方法.在Struts2的拦截器体系中, Struts2的内建拦截器完成了该框架的大部分操作,所以实际的开发过程中通常都是使用系统的拦截器而已.当然我们也可以开发自己的拦截器,类似于过滤器的开发. 原理: Struts2拦截器的实现原理相对简单,当请求Stru

struts2 在拦截器进行注入(根据Action是否实现自定义接口)

例如:常常在Action中都需要获取当前登录的User,就需要获取Session,然后从Session获取当前登录的User,因为这些步骤都是重复操作,可以想办法在拦截器中进行实现,可以自定义一个接口,只要你的Action实现了这个接口,就在自定义拦截器中进行注入.即从拦截器中获取Session,然后设置进行注入. 简单的例子: 一个自定义接口,只要Action实现这个接口,就在拦截器中进行注入 package com.atguigu.surveypark.struts2; import com