Struts2動態方法呼叫(DMI)

2021-09-08 10:37:53 字數 4453 閱讀 3062

在struts2中動態方法呼叫有三種方式,動態方法呼叫就是為了解決乙個action對應多個請求的處理,以免action太多

第一種方式:指定method屬性

這種方式我們前面已經用到過,類似下面的配置就可以實現

"

chainaction

"class="

chapter2.action.chapter2action

"method="

chainaction

">

"chainaction

" type="

chain

">redirect "

plaintext

"class="

chapter2.action.chapter2action

"method="

plaintext

">

"plaintext

" type="

plaintext

">/web-inf/jsppage/chapter2/plaintext.jsp

"

struts.enable.dynamicmethodinvocation

" value="

true

" />將此常量設定為true,這種方式才能使用,使用見示例

action

package chapter3.action;

public

class

chapter3action

public

string result2()

}

jsp中訪問方式

"

basepath/chapter3/chapter3action!result1

">result1

"/chapter3/chapter3action!result2

">result2

如果配置了字尾,必須這樣寫:

/chapter4/chapter4action!create.action

xml中配置方式

"chapter3

"namespace="

/chapter3

" extends="

struts-default

">

"chapter3action

"class="

chapter3.action.chapter3action

">

"result1

">/web-inf/jsppage/chapter3/result1.jsp

"result2

">/web-inf/jsppage/chapter3/result2.jsp

"chapter3

">/web-inf/jsppage/chapter3/chapter3.jsp

第三種方式:萬用字元方式(官網推薦使用)

首先得關閉開關

"

struts.enable.dynamicmethodinvocation

" value="

false

" />這一種方式是由第一種轉變過來的,我們可以看到,第一種方式有很多重複的**,那麼我們可以進行變形,看下面的**

"chapter3_*

"class="

chapter3.action.chapter3action

"method="

">

"test

">/…/test.jsp

chapter3_*這裡的*就是你呆會要匹配的字串,即你在後面的請求中得這樣寫

http://...../ chapter3_create 或 http://...../ chapter3_update

注意,這時你action中必須有create和update方法與之匹配,甚至還可以這樣匹配

"

chapter3_*

"class="

chapter3.action.chapter3action

"method="

">

"test

">/…/.jsp

但是這時一定要有對應的jsp頁面存在,並且相應的路徑不能錯,這就對我們的命名進行了強制性的規定,一定要規範.

課堂示例:

action

public

class

chapter4action extends actionsupport

public

string create()

public

string index()

} xml:

"chapter4_*

"class="

chapter4.action.chapter4action

" method="

">

"">/web-inf/jsppage/chapter4/chapter4_.jsp

訪問servlet api

有時我們需要用到request, response, session,page, servletcontext這些我們以前常用的物件,那麼在struts2中怎麼樣使用到這些物件呢,通常有三種方式.

間接訪問1

//向session中放

actioncontext.getcontext().getsession().put("

wdpc

", "

session中的wdpc");

//向request中放

actioncontext.getcontext().put("

wdpc

","request中的wdpc

");

wdpc

", "

");

取值方式:

actioncontext.getcontext().getsession().get("

wdpc

");

間接訪問2

struts2中提供了乙個靜態類,他裡面的方法可以獲取到我們的httpservletresponse, httpservletrequest, 然後呢就可以還原到我們以前的使用方式了.

直接訪問

雖然struts2提供了actioncontext來訪問servlet api,但是這種方式畢竟不能直接獲取servelt api例項,為了在action中直接訪問servlet api,struts2還提供了一系列介面

servletcontextaware   實現此介面後,可以取得servletcontext

servletrequestaware   實現此介面後,可以取得httpservletrequest

servletresponseaware 實現此介面後,可以取得httpservletresponse

sessionaware         實現此介面後,可以取得httpsession,注意,這裡有點特殊,取得的是乙個mapsession,***負責將session中儲存的鍵值進行解析,並一一對應.

所以我們通常的做法是:

為了讓baseaction能有驗證的功能,並且不能被例項化,開發中我們會這樣做:

public abstract class baseaction extends actionsupport implements

servletresponseaware, servletrequestaware, sessionaware 

然後讓我們每個模組的action來繼承這個baseaction類,然後我們就可以在action中直接使用servelt的api了.

Struts2動態方法呼叫

第一種 index.jsp中 struts.xml中 registaction中 通過表單中form裡action 號前面的rgistaction 去配置檔案裡找到action name registaction 然後找到對應的class new乙個例項出來最後呼叫!號後面的login方法。第二種 ...

Struts2動態方法呼叫

動態方法呼叫 在struts2中動態方法呼叫有三種方式,動態方法呼叫就是為了解決乙個action對應多個請求的處理,以免action太多 第一種方式 指定method屬性 這種方式我們前面已經用到過,類似下面的配置就可以實現 redirect web inf jsppage chapter2 pla...

Struts2動態方法呼叫

動態方法呼叫 在struts2中動態方法呼叫有三種方式,動態方法呼叫就是為了解決乙個action對應多個請求的處理,以免action太多 第一種方式 指定method屬性 這種方式我們前面已經用到過,類似下面的配置就可以實現 redirect web inf jsppage chapter2 pla...