自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談Struts2攔截器的原理與實(shí)現(xiàn)

開發(fā) 后端
Struts2攔截器是Struts2中的一個(gè)很重要的功能。本文將從概念開始,為大家講解Struts2攔截器的實(shí)現(xiàn)原理以及如何定義等等內(nèi)容

一、理解Struts2攔截器

1. Struts2攔截器是在訪問(wèn)某個(gè)Action或Action的某個(gè)方法,字段之前或之后實(shí)施攔截,并且Struts2攔截器是可插拔的,攔截器是AOP的一種實(shí)現(xiàn).

2. 攔截器棧(Interceptor Stack)。Struts2攔截器棧就是將攔截器按一定的順序聯(lián)結(jié)成一條鏈。在訪問(wèn)被攔截的方法或字段時(shí),Struts2攔截器鏈中的攔截器就會(huì)按其之前定義的順序被調(diào)用。

二、實(shí)現(xiàn)Struts2攔截器原理

Struts2攔截器的實(shí)現(xiàn)原理相對(duì)簡(jiǎn)單,當(dāng)請(qǐng)求struts2的action時(shí),Struts 2會(huì)查找配置文件,并根據(jù)其配置實(shí)例化相對(duì)的    攔截器對(duì)象,然后串成一個(gè)列表,最后一個(gè)一個(gè)地調(diào)用列表中的攔截器

三、定義Struts2攔截器。

Struts2規(guī)定用戶自定義攔截器必須實(shí)現(xiàn)com.opensymphony.xwork2.interceptor.Interceptor接口。該接口聲明了3個(gè)方法,

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

其中,init和destroy方法會(huì)在程序開始和結(jié)束時(shí)各執(zhí)行一遍,不管使用了該攔截器與否,只要在struts.xml中聲明了該Struts2攔截器就會(huì)被執(zhí)行。
intercept方法就是攔截的主體了,每次攔截器生效時(shí)都會(huì)執(zhí)行其中的邏輯。

不過(guò),struts中又提供了幾個(gè)抽象類來(lái)簡(jiǎn)化這一步驟。

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

都是模板方法實(shí)現(xiàn)的。

其中AbstractInterceptor提供了init()和destroy()的空實(shí)現(xiàn),使用時(shí)只需要覆蓋intercept()方法;

而MethodFilterInterceptor則提供了includeMethods和excludeMethods兩個(gè)屬性,用來(lái)過(guò)濾執(zhí)行該過(guò)濾器的action的方法??梢酝ㄟ^(guò)param來(lái)加入或者排除需要過(guò)濾的方法。

一般來(lái)說(shuō),攔截器的寫法都差不多??聪旅娴氖纠?/P>

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執(zhí)行前插入 代碼");     
        //執(zhí)行目標(biāo)方法 (調(diào)用下一個(gè)攔截器, 或執(zhí)行Action)   
        final String res = invocation.invoke();   
        System.out.println("Action執(zhí)行后插入 代碼");   
        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"
        "<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>

 

攔截器

名字

說(shuō)明

Alias Interceptor

alias

在不同請(qǐng)求之間將請(qǐng)求參數(shù)在不同名字件轉(zhuǎn)換,請(qǐng)求內(nèi)容不變

Chaining Interceptor

chain

讓前一個(gè)Action的屬性可以被后一個(gè)Action訪問(wèn),現(xiàn)在和chain類型的result)結(jié)合使用。

Checkbox Interceptor

checkbox

添加了checkbox自動(dòng)處理代碼,將沒(méi)有選中的checkbox的內(nèi)容設(shè)定為false,而html默認(rèn)情況下不提交沒(méi)有選中的checkbox。

Cookies Interceptor

cookies

使用配置的name,value來(lái)是指cookies

Conversion Error Interceptor

conversionError

將錯(cuò)誤從ActionContext中添加到Action的屬性字段中。

Create Session Interceptor

createSession

自動(dòng)的創(chuàng)建HttpSession,用來(lái)為需要使用到HttpSession的攔截器服務(wù)。

Debugging Interceptor

debugging

提供不同的調(diào)試用的頁(yè)面來(lái)展現(xiàn)內(nèi)部的數(shù)據(jù)狀況。

Execute and Wait Interceptor

execAndWait

在后臺(tái)執(zhí)行Action,同時(shí)將用戶帶到一個(gè)中間的等待頁(yè)面。

Exception Interceptor

exception

將異常定位到一個(gè)畫面

File Upload Interceptor

fileUpload

提供文件上傳功能

I18n Interceptor

i18n

記錄用戶選擇的locale

Logger Interceptor

logger

輸出Action的名字

Message Store Interceptor

store

存儲(chǔ)或者訪問(wèn)實(shí)現(xiàn)ValidationAware接口的Action類出現(xiàn)的消息,錯(cuò)誤,字段錯(cuò)誤等。

Model Driven Interceptor

model-driven

如果一個(gè)類實(shí)現(xiàn)了ModelDriven,將getModel得到的結(jié)果放在Value Stack中。

Scoped Model Driven

scoped-model-driven

如果一個(gè)Action實(shí)現(xiàn)了ScopedModelDriven,則這個(gè)攔截器會(huì)從相應(yīng)的Scope中取出model調(diào)用ActionsetModel方法將其放入Action內(nèi)部。

Parameters Interceptor

params

將請(qǐng)求中的參數(shù)設(shè)置到Action中去。

Prepare Interceptor

prepare

如果Acton實(shí)現(xiàn)了Preparable,則該攔截器調(diào)用Action類的prepare方法。

Scope Interceptor

scope

Action狀態(tài)存入sessionapplication的簡(jiǎn)單方法。

Servlet Config Interceptor

servletConfig

提供訪問(wèn)HttpServletRequestHttpServletResponse的方法,以Map的方式訪問(wèn)。

Static Parameters Interceptor

staticParams

struts.xml文件中將中的中的內(nèi)容設(shè)置到對(duì)應(yīng)的Action中。

Roles Interceptor

roles

確定用戶是否具有JAAS指定的Role,否則不予執(zhí)行。

Timer Interceptor

timer

輸出Action執(zhí)行的時(shí)間

Token Interceptor

token

通過(guò)Token來(lái)避免雙擊

Token Session Interceptor

tokenSession

Token Interceptor一樣,不過(guò)雙擊的時(shí)候把請(qǐng)求的數(shù)據(jù)存儲(chǔ)在Session

Validation Interceptor

validation

使用action-validation.xml文件中定義的內(nèi)容校驗(yàn)提交的數(shù)據(jù)。

Workflow Interceptor

workflow

調(diào)用Actionvalidate方法,一旦有錯(cuò)誤返回,重新定位到INPUT畫面

Parameter Filter Interceptor

N/A

從參數(shù)列表中刪除不必要的參數(shù)

Profiling Interceptor

profiling

通過(guò)參數(shù)激活profile


【編輯推薦】

  1. 在Eclipse中開發(fā)struts應(yīng)用程序
  2. 手把手教你在Eclipse中配置開發(fā)Struts
  3. Eclipse下開發(fā)struts完整解決亂碼問(wèn)題
  4. Struts相關(guān)背景介紹
  5. 使用Easy Struts for Eclipse開發(fā)Struts
責(zé)任編輯:張燕妮 來(lái)源: 網(wǎng)易博客
相關(guān)推薦

2009-06-25 15:59:21

Struts2教程攔截器

2009-06-25 15:54:42

Struts2教程攔截器

2009-02-04 14:45:06

2009-02-04 14:19:38

2009-06-08 16:44:00

2009-06-04 08:45:01

Struts2下載

2009-06-08 16:44:00

Struts2文件上傳

2009-06-04 09:41:50

struts2上傳文件

2011-06-28 09:14:23

Struts 2WebWork

2009-06-05 09:58:20

struts2驗(yàn)證用戶注冊(cè)

2011-05-13 09:53:02

strutsAjax

2011-04-28 09:52:04

Struts2

2009-07-29 09:54:34

struts2和str

2009-06-08 16:44:00

struts2 ogn

2012-04-25 10:14:40

JavaStruts

2010-01-06 14:36:04

JSON插件

2024-05-06 00:00:00

C#工具代碼

2009-06-25 15:11:28

Struts2教程Struts2程序

2023-09-05 08:58:07

2009-02-04 10:51:07

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)