Struts2 拦截处理

Struts2 拦截处理

一、拦截器

拦截器的用途:

拦截器适合封装一些通用处理,便于重复利用。

例如请求参数传递给Action属性,日志的记录,权限检查等。

拦截器是通过配置方式调用,采用AOP编程思想,因此使用方法比较灵活,便于维护和扩展。

使用步骤

1、创建拦截器组件

创建一个类,实现Interceptor接口,并实现intercepte方法。

public String interceptor(ActionInvocation invocation) {
//拦截器--前部分处理
invocation.invoke(); //执行action和result
//拦截器--后续处理
}

2、注册拦截器

在struts.xml中,注册拦截器

<package>
<interceptors>
<interceptor name="别名" class="实现类"/>
//...其他interceptor
</interceptors>
</package>

3、拦截器栈

往往一个Action需要引用很多个拦截器,那么可以将这些拦截器打包成栈,直接引用这个栈即可,这样可以简化对拦截器的引用。

拦截器栈仅仅是对拦截器的打包,方便引用,它在使用上完全等同于拦截器。

<interceptor-stack name="myStack">
    <interceptor-ref name="firstInterceptor"/>
    <interceptor-ref name="secondInterceptor"/>
</interceptor-stack>

预置拦截器

Struts2预置了大量的拦截器,其中有一部分拦截器是Struts2框架自身要用到的,必须引用 。这些拦截器被打包在basicStack中,我们项目中引用的拦截器,不能少于basicStack中注册的拦截器。

默认引用拦截器

有一部分拦截器是最常用的,他们被打包在defaultStack中

里面的拦截器涵盖了 basicStack中的拦截器

该拦截器栈是Struts2框架默认引用的,即我们不需要在Action中做任何处理,就相当于是引用了这个拦截器栈。该默认引用的设置,也是在struts-default.xml中通过标记指定的

注意:一旦我们在action配置下引用了任何拦截器,那么上述默认引用的拦截器就失效了,因此在引用拦截器时,不要丢弃默认拦截器的引用。

拦截器调用顺序

多个拦截器在调用时,按照被引用的先后顺序,调用顺序如下图,实际上是遵循先进后出的原则。

二、上传文件拦截器

FileUpload拦截器是Struts2预置的拦截器

FileUpload拦截器被默认拦截器栈defaultStack引用

即我们不需要做任何配置,就可使用该拦截器

*FileUpload拦截器可以用于做文件上传。

FileUpload拦截器原理

FileUpload拦截器上传文件有如下步骤:

1、FileUpload拦截器将表单中提交的文件,以临时文件的形式保存到服务器临时路径下。

2、FileUpload拦截器将该临时文件对象注入给Action,Action自主处理该临时文件,比如将文件重新命名并复制到固定路径下。

3、FileUpload拦截器删除临时文件。

FileUpload使用

1、导入包commons-io.jar

2、Action编码

定义File类型属性,接收拦截器注入的临时文件对象。如果想获取原始文件名,要定义String类型属性,属性名为“File类型属性+FileName”,拦截器会自动给该属性注入原始文件名。

3、表单设置

表单必须满足method="post"以及enctype="multipart/form-data"两个条件,才能实现文件上传功能。

注意事项

Struts2上传文件最大值默认限制为2M。

底层代码:struts.multipart.maxSize=2097152

我们可以在struts.xml中重置该默认值。

<constant name="struts.multipart.maxSize" value="5242880"/>

时间: 2024-08-26 15:20:44

Struts2 拦截处理的相关文章

Struts2拦截器概述

--------------------siwuxie095 Struts2 拦截器概述 1.Struts2 框架封装的很多功能都在 Struts2 的拦截器中 2.Struts2 框架中有很多拦截器,但这些拦截器不是每次 都执行,只有默认拦截器才会每次都执行 3.Struts2 默认拦截器的位置 「注意:默认拦截器中也有很多拦截器」 4.拦截器的执行 在 Action 对象创建之后,在 Action 方法执行之前 [made by siwuxie095]

笔记:Struts2 拦截器

配置拦截器 Struts.xml 配置文件中,使用<interceptor-/>来定义拦截器,有属性 name 表示拦截器的名称,class 表示拦截器的具体首先类,可以使用<param-/>子元素来配置拦截器的参数,配置示例: <package name="包名称" extends="抽象包名称"> <interceptors> <interceptor name="拦截器名称" class

Struts2 拦截器与Spring AOP的区别

在学习Spring AOP技术的同时,发现其实与以前做过的拦截器的功能很类似,于是开始抱着这两者之间有什么关系的问题进行深入研究. 我们知道struts2使用拦截器主要是用来处理用户的请求,OGNL的使用,表单验证 等. 而spring的拦截器,主要体现在AOP的事务管理方面,还有比如一些错误或者异常的日志的显示 也是通过配置spring的log拦截器来实现的. Struts的拦截器是针对Struts的,比如SSH项目都会去使用AOP ,如果是单纯的STRUTS项目 自然使用Struts本身的拦

【SSH2(实践篇)】--Struts2拦截器精解

上篇博客对Struts2的体系结构做了初步的了解,Struts2是以WebWork作为处理核心,并采用拦截器的机制来处理用户的请求,同时它还集成了Struts1丰富的标签库.另外上篇博客还对Struts2的配置使用进行了初步的介绍,下面将会集中讨论Struts2的拦截器. 一.拦截器 1.拦截器小介 拦截器的功能类似于web.xml文件中的Filter,能对用户的请求进行拦截,通过拦截用户的请求来实现对页面的控制.拦截器是在Struts-core-2.2.3.jar中进行配置的,原始的拦截器是在

Struts2 拦截器

一.Struts2拦截器原理: Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器. 比如:应用要求用户登陆,且必须为指定用户名才可以查看系统中某个视图资源:否则,系统直接转入登陆页面.对于上面的需求,可以在每个Action的执行实际处理逻辑之前,先执行权限检查逻辑,但这种做法不利于代码复用.因为大部分Action里的权限检查代码都大同小异,故将这些权

Struts2拦截器的使用 (详解)

这位仁兄的写的不错,我照抄过来了:http://www.blogjava.net/i369/articles/162407.html 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器):<interceptor-ref name="checkbox">  <param name=&q

Struts2拦截器详解

作者:禅楼望月 1. Struts2内置拦截器 Struts2内置了大量的拦截器,如下图: 图片来自:刘水镜的博客:菜鸟学SSH(四)--Struts2拦截器 这些拦截器以name-class的形式配置在struts-default.xml中: <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/> <interceptor n

转载 - Struts2 拦截器详细配置过程

出处:http://www.blogjava.net/zzzlyr/archive/2009/10/12/297998.html Struts2 拦截器详细配置过程 1:所有拦截器的超级接口Interceptor ,Action去实现这个接口; Interceptor 它其中有三个方法(init(),destroy() ,interceptor()): Init()方法:在服务器起动的时候加载一次,并且只加载一次; Destroy()方法:当拦截器销毁时执行的方法; Interceptor()方

Struts2拦截器总结&lt;转&gt;

由于项目中在登录跳转到其他应用程序模块的时候有用到拦截器,因此查看了一下相关资料. 原文地址:http://blog.csdn.net/sendfeng/article/details/4248120 Struts2拦截器总结: 一.编写拦截器 1.  实现接口com.opensymphony.xwork2.Intercepter(或继承com.opensymphony.xwork2.AbstractInterceptor) 2.  在interceptor方法中加入如下代码: public S

浅谈Struts2拦截器的原理与实现

拦截器与过滤器           拦截器是对调用的Action起作用,它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可重用的部分的方式,很多业务逻辑都是靠拦截实现的,比如校验,验证登录权限(比如下载时跳转到登陆页面)等等.     过滤器是对整个的请求过程起作用!换句话说就是拦截器没有过滤器的范围广.过滤器是在java web中,你传入的request,response提前过滤掉一些信息