新建乙個struts2專案,命名為struts2。按照如下xml檔案配置乙個action:
/hello.jsp
將應用部署,訪問如下路徑:http://localhost:8080/struts2/test/sdf/dsf/32/d/helloworld.action 依然可以訪問到action。
這主要是因為struts2對action名稱的搜尋是按照一定順序進行的。以上面的情況為例:
1.struts2首先搜尋命名空間為/test/sdf/dsf/32/d的包是否存在,存在的情況下,是否有helloworld這個action;
2.搜尋命名空間為/test/sdf/dsf/32的包是否存在,存在的情況下,是否有helloworld這個action;
3.搜尋命名空間為/test/sdf/dsf的包是否存在,存在的情況下,是否有helloworld這個action;
4.搜尋命名空間為/test/sdf的包是否存在,存在的情況下,是否有helloworld這個action;
5.搜尋命名空間為/test的包是否存在。在這種情況下能夠搜尋到,因此,可以訪問到helloworld這個action。
此外,如果按照這種搜尋順序搜尋,發現所有的包均不存在,那麼struts2則會到命名空間為」」(預設命名空間)的包下面去找helloworld這個action。
action類:
package com.demo;
import org.apache.logging.log4j.logmanager;
import org.apache.logging.log4j.logger;
import com.opensymphony.xwork2.actionsupport;
public class strutsdemo
extends actionsupport
public string update()
}
user
" namespace="/" extends="struts-default">
strutsdemo
add" class="com.demo.strutsdemo.
strutsdemo
" method="add">
/add_student.jsp
strutsdemo
update" class=
"com.demo.strutsdemo.
strutsdemo
" method="update">
/update_student.jsp
訪問新增方法執行如下路徑:http://localhost:8080/struts2/strutsdemoadd.action
訪問修改方法執行如下路徑http://localhost:8080/struts2/strutsdemoupdate.action
在上述使用method屬性的方式來實現動態方法有乙個不好的地方在於:如果只有幾個方法需要被呼叫,我們只需要在struts.xml檔案中,寫幾個類似上面的**段。如果有幾百個方法需要被動態呼叫,那麼用這種方法可能就不適合了,這樣**冗餘太大,也不便於管理。因此就有了!、萬用字元的使用的兩種方法。
首先使用!、萬用字元的
方法。必須先新增以下兩段**
regex:.*
將上述事例
struts.xml
改為:
在訪問時,用!加方法名呼叫如:
regex:.*
/sucess.jsp
/add_user.jsp
/update_user.jsp
訪問新增方法執行如下路徑:http://localhost:8080/struts2/strutsdemo!add.action
訪問修改方法執行如下路徑http://localhost:8080/struts2/strutsdemo!update.action
萬用字元方式是使用最為廣泛的方式。當然,在使用之前也需要和!方式一樣需要struts支援動態調配及適配萬用字元
將上述事例的
struts.xml
改為:
regex:.*
/sucess.jsp
/add_user.jsp
/update_user.jsp
說明:上述**中標籤中的name屬性的下劃線「_「 作用為分開類名和方法名,這是一種習慣寫法,可以省略。
method="中的1表示第乙個*。
在訪問時,用!加方法名呼叫如:
訪問新增方法執行如下路徑:http://localhost:8080/struts2/strutsdemo_add.action
訪問修改方法執行如下路徑http://localhost:8080/struts2/strutsdemo_update.action
如上文所述,method="中的1表示第乙個*。那麼萬用字元是可以有多個的,將上述事例修改,
可以用第乙個*表示類名,第二個*號表示方法名。**如下:
regex:.*
/sucess.jsp
/add_user.jsp
/update_user.jsp
Action名稱的搜尋順序
1 首先尋找namespace為 path1 path2 path3的package,如果存在這個package,則在這個package中尋找名字為test的action,如果不存在這個package則轉步驟3 2 尋找namespace為 path1 path2的package,如果存在這個pac...
Action的動態呼叫方法
action執行的時候並不一定要執行execute方法,我們可以指定action執行哪個方法 1 方法一 通過methed屬性指定執行方法 可以在配置檔案中配置action的時候用method 來指定執行哪個方法 useradd class com.bjsxt.struts2.user.action...
使用Action 的動態方法呼叫
actionname指定提交到那個action,而methodname指定提交到指定的方法。例如 對用js為 function register 獲取頁面的第乙個表單 targetform document.forms 0 targetform.action login register 提交到lo...