1. 程式人生 > >Struts2.5的DMI(動態方法呼叫)與新增的SMI

Struts2.5的DMI(動態方法呼叫)與新增的SMI

在使用Struts2.5之後的版本,在DMI(動態方法呼叫)上,有與之前的版本發生一些改變

在DMI使用時,是預設被禁用的,導致萬用字元 * 無法正常使用

Apache Struts專案的官方解釋如下:

從Struts2.3開始,我們增加了一個開關來控制DMI,我們這樣做基於兩個原因:

1. 如果Action的實現是純POJO方式(既不繼承自ActionSupport也不實現Action介面),這種場景下使用DMI可能導致安全問題。

2. DMI功能跟使用萬用字元配置Action類的方法有重疊的地方,而萬用字元配置的方式早在Struts1就有了。

Struts2.5新增的SMI(嚴格方法呼叫),官方文件說是擴充套件DMI。SMI預設情況下是啟用的,如果使用DMI方式呼叫Action的方法,有兩種方法

1.可以將該包的strict-method-invocation="false" 設定為false

<package name="my" extends="struts-default" namespace="/my" strict-method-invocation="false">
		<action name="stu_*" class="com.czd.action.tryAction" method="{1}">
			<result name="a">/page/loginok.jsp</result>
			<result name="b">/page/loginok.jsp</result>
			<result name="c">/page/loginok.jsp</result>
			<result name="d">/page/loginok.jsp</result>
		</action>
	</package>

2.在package包中新增<global-allowed-methods>regex:.*</global-allowed-methods>

<package name="my" extends="struts-default" namespace="/my" >
		<global-allowed-methods>regex:.*</global-allowed-methods>
		<action name="stu_*" class="com.czd.action.tryAction" method="{1}">
			<result name="a">/page/loginok.jsp</result>
			<result name="b">/page/loginok.jsp</result>
			<result name="c">/page/loginok.jsp</result>
			<result name="d">/page/loginok.jsp</result>
		</action>
	</package>

這兩種方法都能在Struts2.5版本中實現DMI

本人研究不深,結合自己理解寫下,如果有不當之處,可以指出!

相關推薦

Struts2.5的DMI(動態方法呼叫)新增SMI

在使用Struts2.5之後的版本,在DMI(動態方法呼叫)上,有與之前的版本發生一些改變 在DMI使用時,是預設被禁用的,導致萬用字元 * 無法正常使用 Apache Struts專案的官方解釋如下: 從Struts2.3開始,我們增加了一個開關來控制DMI,我們這樣

struts2動態方法呼叫j2ee互動傳參

動態方法呼叫: (action程式碼) package com.zking.web; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ModelDriven; import

Struts2怎樣呼叫Servlet?萬用字元怎樣使用?Struts2動態方法呼叫如何配置使用?Struts2如何在執行方法之前進行驗證?

1.Struts2怎樣呼叫Servlet//    servlet.api的三種方式        1.ActionContext.getContext().getSession();//Action上下文呼叫        2.ServletActionContext.

Struts2動態方法呼叫(優點:呼叫同一個action中的多個方法不需要在配置檔案中寫多個指向相同action類的的action節點只需要一個action節點就行)

在表單action值裡指定所呼叫的action中的哪個方法而不是藉助配置檔案action節點的method屬性 1 UserAction類 package org.action; import java.io.IOException; import javax.servle

關於struts2.5 動態方法呼叫(DMI)出現錯誤的解決辦法

1. 先上程式碼 程式碼結構圖如下 2. 展示程式碼 WEB-INF/web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001

Struts2動態方法呼叫有三種方式

Jsp中訪問方式 <body>     <a href="basePath/chapter3/chapter3Action!result1">result1</a><br><ahref="basePath/chapter3/chapter3Action!r

Struts2——Action動態方法呼叫

     對於同一個表單,當用戶通過不同的按鈕提交同一個表單時,系統需要使用Action的不同方法來處理使用者請求,這時Action便需要包含多個控制處理邏輯,即一個action中包含多個方法。例如:login介面有“登入”和“註冊”兩個按鈕,分別觸發UserAction中

Struts2初學者---動態方法呼叫action!方法名報錯

在struts.xml檔案的 package標籤中, 加入以下程式碼: <global-allowed-methods>regex:.*</global-allowed-met

第12講 struts2動態方法呼叫

1在HeadFirstStruts2chapter02-05中,直接修改struts.xml檔案,去掉method屬性和萬用字元屬性 xml version="1.0" encoding="UTF-8" ?> DOCTYPE struts PU

struts2動態方法呼叫(DMI)

(1)Action執行的時候並不一定要執行execute方法 (2)可以在配置檔案中配置action的時候用method=來指定執行哪個方法,也可以在url中動態指定(動態方法呼叫DMI)(推薦使用)

Struts2自定義Action,自定義方法,DMI(動態方法呼叫),路徑問題

注意配置檔案中的result JSP 必須加/(代表當前應用) action類的編寫:可以什麼都不繼承與實現,可以實現Action介面,可以繼承ActionSupport,但推薦第三種 package struts.zyl; import com.opensymphon

Struts2 url中包含感嘆號實現動態方法呼叫

Struts2的動態方法呼叫(Dynamic method Invoc)概括起來有三種方式,下面介紹: 1、第一種方式:設定method屬性 在Action類中定義一個簽名與execute方法相同、只是名字不同的方法,如定義為: public String login() throws Exce

struts2中的動態方法呼叫DMI

通常,在struts2中,如果想執行特定的方法,往往會在struts.xml中,配置action的method屬性值為要執行的方法名,預設為execute方法。為了程式的擴充套件,這種方法不推薦,而是使用DMI方式,舉例如下(場景為使用者的增、刪、改): (1)UserAc

struts2動態方法呼叫和使用萬用字元定義action

struts.xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Con

Struts2中DMI(動態方法呼叫)的一些問題

    <package name="front" namespace="/front" extends="struts-default">         <default-action-ref name="index" />         &l

Struts2-動態方法呼叫(DMI)

Struts呼叫方法是要用:動態方法呼叫DMI struts.xml核心部分:<span style="font-size:14px;"><struts> <const

struts2的常量、動態方法呼叫、接受請求引數處理、型別轉換 .

struts2的常量、動態方法呼叫、接受請求引數處理、型別轉換常見的struts常量http://localhost:8080/struts_action/login.action為什麼是.action 並且.action能不能修改? 在struts2-core-2.3.8.jar的org.apache.s

升級Struts2.5後使用DMI動態方法呼叫遇到問題

問題: 升級Struts2.5後使用DMI動態方法呼叫報錯,method 找不到。 原始碼: struts.xml <action name="json_*_*" class="{1}Action" method="

Struts2服務在開啟動態方法呼叫(DMI)的情況下,導致的安全問題,一則新聞

2016-04-27 02:40:18     一則新聞 Apache官方今天晚上釋出安全公告(官方編號S2-032/CVE編號CVE-2016-3081),Apache Struts2服務在開啟動態方法呼叫(DMI)的情況下,可以被遠端執行任意命令,安全威脅程度高。 這一

Struts2動態方法調用

.com log ima struts2 http als ges XML 配置 1 . 查看默認配置,是否為:true 2.如果為false 可以通過struts.xml進行相關的配置: Struts2中動態方法調用