您的位置:首页 > 编程语言 > Java开发

拦截器、方法-浅谈Struts2拦截器的原理与实现-by小雨

2013-04-17 13:57 1196 查看
上班之余抽点间时出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下拦截器、方法-

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

一、解理Struts2拦截器

1. Struts2拦截器是在拜访某个Action或Action的某个方法,段字之前或后之实行拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.

2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按必定的序顺联结成一条链。在拜访被拦截的方法或段字时,Struts2拦截器链中的拦截器就会按其之前定义的序顺被调用。

二、实现Struts2拦截器理原

Struts2拦截器的实现理原对相简略,当请求struts2的action时,Struts 2会查找置配件文,并根据其置配实例化对相的 拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器

三、定义Struts2拦截器。

Struts2划定用户自定义拦截器必须实现com.opensymphony.xwork2.interceptor.Interceptor接口。该接口声明白3个方法,

void init();
void destroy();
String intercept(ActionInvocation invocation) throws Exception;

其中,init和destroy方法会在序程开始和结束时各行执一遍,不管应用了该拦截器与否,只要在struts.xml中声明白该Struts2拦截器就会被行执。
intercept方法就是拦截的主体了,每次拦截器效生时会都行执其中的逻辑。

不过,struts中又供提了几个抽象类来简化这一骤步。

public abstract class AbstractInterceptor implements Interceptor;
public abstract class MethodFilterInterceptor extends AbstractInterceptor;

都是模板方法实现的。

其中AbstractInterceptor供提了init()和destroy()的空实现,应用时只要需覆盖intercept()方法;

而MethodFilterInterceptor则供提了includeMethods和excludeMethods两个属性,用来过滤行执该过滤器的action的方法。可以通过param来参加或者消除要需过滤的方法。

一般来说,拦截器的写法都差不多。看下面的示例:

package interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class MyInterceptor implements Interceptor {
public void destroy() {
// TODO Auto-generated method stub
}
public void init() {
// TODO Auto-generated method stub
}
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("Action行执前插入 码代");
//行执目标方法 (调用下一个拦截器, 或行执Action)
final String res = invocation.invoke();
System.out.println("Action行执后插入 码代");
return res;
}
}

四、置配Struts2拦截器

Struts2拦截器要需在struts.xml中声明,如下struts.xml置配件文

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.objectFactory" value="spring" />


<package name="default" extends="struts-default">
<interceptors>
<interceptor name="MyInterceptor" class="interceptor.MyInterceptor"></interceptor>
<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="MyInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<action name="loginAction" class="loginAction">
<result name="fail">/index.jsp </result>
<result name="success">/success.jsp</result>
<interceptor-ref name="myInterceptorStack"></interceptor-ref>
</action>
</package>
</struts>

拦截器

名字

明说

Alias Interceptor

alias

在不同请求之间将请求参数在不同名字件转换,请求内容变不

Chaining Interceptor

chain

让前一个Action的属性可以被后一个Action拜访,当初和chain类型的result()结合应用。

Checkbox Interceptor

checkbox

添加了checkbox主动处置码代,将没有中选的checkbox的内容设定为false,而html认默情况下不提交没有中选的checkbox。

Cookies Interceptor

cookies

应用置配的name,value来是指cookies

Conversion Error Interceptor

conversionError

将误错从ActionContext中添加到Action的属性段字中。

Create Session Interceptor

createSession

主动的创立HttpSession,用来为要需应用到HttpSession的拦截器服务。

Debugging Interceptor

debugging

供提不同的调试用的页面来现展外部的据数况状。

Execute and Wait Interceptor

execAndWait

在后台行执Action,同时将用户带到一个旁边的待等页面。

Exception Interceptor

exception

将异常定位到一个画面

File Upload Interceptor

fileUpload

供提件文上传功能

I18n Interceptor

i18n

录记用户选择的locale

Logger Interceptor

logger

出输Action的名字

Message Store Interceptor

store

存储或者拜访实现ValidationAware接口的Action类涌现的消息,误错,段字误错等。

Model Driven Interceptor

model-driven

如果一个类实现了ModelDriven,将getModel到得的结果放在Value Stack中。

Scoped Model Driven

scoped-model-driven

如果一个Action实现了ScopedModelDriven,则这个拦截器会从应相的Scope中掏出model调用Action的setModel方法将其放入Action外部。

Parameters Interceptor

params

将请求中的参数置设到Action中去。

Prepare Interceptor

prepare

如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。

Scope Interceptor

scope

将Action态状存入session和application的简略方法。

Servlet Config Interceptor

servletConfig

供提拜访HttpServletRequest和HttpServletResponse的方法,以Map的方法拜访。

Static Parameters Interceptor

staticParams

从struts.xml件文中将中的中的内容置设到对应的Action中。

Roles Interceptor

roles

定确用户是不是拥有JAAS指定的Role,否则不予行执。

Timer Interceptor

timer

出输Action行执的间时

Token Interceptor

token

通过Token来免避双击

Token Session Interceptor

tokenSession

和Token Interceptor一样,不过双击的时候把请求的据数存储在Session中

Validation Interceptor

validation

应用action-validation.xml件文中定义的内容验校提交的据数。

Workflow Interceptor

workflow

调用Action的validate方法,一旦有误错回返,从新定位到INPUT画面

Parameter Filter Interceptor

N/A

从参数列表中除删不必要的参数

Profiling Interceptor

profiling

通过参数激活profile

文章结束给大家分享下程序员的一些笑话语录:

手机终究会变成PC,所以ip会比wm更加畅销,但是有一天手机强大到一定程度了就会发现只有wm的支持才能完美享受。就好比树和草,草长得再高也是草,时间到了条件成熟了树就会窜天高了。www.ishuo.cn
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: