Struts学习总结(四)---简单模拟实现Struts2的拦截器

原创 2016年08月31日 10:02:45

日期: 2016-8-31


内容: 简单模拟实现Struts的拦截器


一、 Struts2的拦截器的简单概述

1、什么叫做拦截器?

使用一张图简单展现一下Struts2的拦截器的实现原理,如下图:

这里就不用“官话”来阐述具体什么是拦截器了,就个人的理解阐述一下什么是拦截器。

所谓的Struts2拦截器就是在我们发起一个请求(登录,注册请求)的时候,我们发起的请求会被struts2的拦截机制所过滤,必须只有在满足拦截器的拦截要求的情况 下才可以通过。在这里打一个形象的比方:我们要请求的Action就好比一个戒备森严的皇宫,假如我们想去参观的话就得经过层层检查,比如第一个拦截器拦截可 以把我们身上的“重武器给过滤掉假如有的话”,在完成这个拦截器的拦截之后我们就可以进入下一个拦截器,“这个拦截器就把我们身上的其它金属设备拦截掉”, 如此这般假如我们都通过了所有的拦截器的话就可以成功的访问我们的“Action”了。其实,拦截器就是一个工具,它可以简化我们实际开发中的很多比较繁琐的问 题,简化我们的操作,扩展我们的功能实现。还有就是提高开发的安全性。


2、 为什么要使用拦截器?

使用拦截器很简单的讲,就是可以为我们开发带来便利,简化开发流程,增强代码的复用性。其实struts2的拦截器优点不胜枚举,在此不再赘述。


3、Struts2的默认拦截器有哪些?

可以将下载的Strutsjar包标准目录的目录: \struts-2.3.24\apps\struts2-blank\WEB-INF\lib打开之后解压struts2-core-2.3.24.jar jar包,里面有一个文件:struts- default.xml这里面配置了很多拦截器,有兴趣的朋友可以自己去看看。

struts-default.xml内部拦截器截图如下:

二、自定义拦截器的实现

1、如何自定义拦截器?

实现自定义拦截器有两种方式:

①、继承com.opensymphony.xwork2.interceptor.AbstractInterceptor抽象类并实现intercept方法;

②、实现com.sun.xml.internal.bind.v2.runtime.unmarshaller.Intercepter接口并重写intercept方法;

2、自定义拦截器

package com.onlyone.struts.Intercepter;

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

/**
 * 在定义struts2的自定义拦截器的时候有两种自定义拦截器的方式:其一是继承AbstractIntercepter或者实现Intercepter结构
 * @author peixun
 *
 */
public class RegisterIntercepter extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		/**
		 * 定义实现拦截器的内部逻辑:这里只是简单的模拟实现拦截器,明白拦截器的实现流程
		 */
		System.out.println("拦截器"+this.getClass().getName()+"开始启动>>>>>>>>>>");
		//返回下一个拦截器或者Action(通常要执行的拦截器都不是简单的一个,而是一个拦截器连或者拦截器栈),因此只有在执行如下的操作让他返回执行下一个拦截器或者Action
		String  resultString = invocation.invoke();
		
		System.out.println("拦截器"+this.getClass().getName()+"执行完成>>>>>>>>>>>>");
		//执行返回
		return resultString;
	}

}

3、在struts.xml中配置拦截器:

<package name="userRegister" namespace="/" extends="struts-default">
    	<!-- 在struts.xml中配置拦截器 -->
    	<!-- 拦截器的定义开始 -->
    	<interceptors>
    		<!-- 定义拦截器对应拦截器的具体实现类 -->
    		<interceptor name="registerIntercepter" class="com.onlyone.struts.Intercepter.RegisterIntercepter"></interceptor>
    	</interceptors>
    	<!-- 拦截器的定义结束 -->
    	
    	<action name="userRegisterAction" class="com.onlyone.struts.register.action.UserRegisterAction" method="register">
    		<result name="success">/jsp/register/register_success.jsp</result>
			<result name="error">/jsp/register/register_failure.jsp</result>
			
			<!-- 拦截器的使用开始 -->
			<!-- 使用拦截器:自定义拦截器和默认;拦截器 -->
			<interceptor-ref name="defaultStack"></interceptor-ref>
			<!-- 使用自定义拦截器实施拦截 -->
			<interceptor-ref name="registerIntercepter"></interceptor-ref>
			<!-- 拦截器的使用结束 -->
    	</action>
    </package>

4、启动服务器测试拦截器是否配置成功:

有图有真相,说明我们的拦截器配置已经生效了。

三、总结

在学习的过程总是由浅入深循序渐进的一个过程,这篇博文只是很浅显的阐述了如何去编写一个拦截器并部署实现,但是在开发的过程中需要自定义的拦截器肯定 会比这个难上百倍也没准儿。因此我们学习的是原理,扩展还得靠我们不断的去探索。


版权声明:本文为博主原创文章,未经博主允许不得转载。

Struts2拦截器简单模拟

简单模拟了下Struts2拦截器的原理。 首先定义Interceptor接口: package com.kaso.interceptor; public interface Interc...
  • kasogg
  • kasogg
  • 2012年09月24日 13:45
  • 327

【struts2】拦截器的工作模拟实现

Main.java /** * 书本:【struts2】 * 功能:模拟拦截器的工作,实际就是递归的思想 * 文件:Main.java * 时间:2014年11月9日20:04:55 * 作者:cu...

struts2中拦截器的简单实现流程

struts.xml文件的设置 计时

防止未登录用户操作—struts2拦截器简单实现

一般,我们的web应用都是只有在用户登录之后才允许操作的,也就是说我们不允许非登录认证的用户直接访问某些页面或功能菜单项。我还记得很久以前我的做法:在某个jsp页面中查看session中是否有值(当然...
  • judyge
  • judyge
  • 2016年03月28日 12:09
  • 614

struts2实现简单action时间拦截器

//jsp index.jsp

struts2实现简单拦截器

struts2实现拦截器的方法有三种:      1:实现Interceptor接口,需要实现init(),destroy(),intercept(ActionInvocation actionIn...

防止未登录用户操作—struts2拦截器简单实现

一般我们的web应用都是只有在永固

Struts2中拦截器的简单实现

Struts2的拦截器和Servlet过滤器类似。在执行Action的execute方法之前,Struts2会首先执行struts.xml中引用 的拦截器,在执行完所有引用的拦截器的intercept...

简单的利用Struts2拦截器实现权限校验

本文主要在于介绍如何利用struts2去实现权限校验,对于struts2开发环境的搭建,网上已经有很多的教程,这里就不进行一一介绍了。 关于权限校验,首先需要注意的点: 1,在web项目中,在WE...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts学习总结(四)---简单模拟实现Struts2的拦截器
举报原因:
原因补充:

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