上一篇已經和大家分享了關於Struts2命名空間和Action的三種創建方式,本篇我們接着命名空間的內容,來一起探討一下關於Struts2的訪問路徑問題,何為訪問路徑,就是指當我們在瀏覽器輸入地址,點擊回車,向服務器發送請求,這個訪問路徑就是今天我們要討論的知識點,我們以上一篇的訪問路徑為例,為大家分析一下Struts2訪問路徑的本質。對於這個url路徑http://localhost:8080/Struts/hello/login,我來分析一下他的組成,http://這是http請求協議;localhost這是本地訪問地址,等同於127.0.0.1,;8080:是我們本地服務器的訪問端口;Struts:使我們的工程名稱;hello:使我們的命名空間;login:是我們的命名空間下的Action名稱。把這些組合在一起就是我們的Struts2 Action的請求方式,當然這里如果我們的命名空間下設置了默認Action,最后的Action名稱可以沒有。對於Struts2的訪問路徑就為大家介紹這么多,下面我們一起來學習一下DMI動態方法綁定和通配符的使用。
首先我們先來探討一下DMI動態方法綁定,在上一篇的內容里面我們訪問Action中的方法的方式,均是通過在struts.xml文件里面默認設置好的,這樣很不方便我們的接口調用人員使用,那如何進行動態方法綁定呢?其實很簡單,就以上面的url路徑為例,我們看一下如何在url端進行訪問路徑的動態綁定。上面的接口訪問的是login Action下的login方法,我們就可以這樣來寫:http://localhost:8080/Struts/hello/login!login,這樣我們的程序就可以動態進行Action訪問方法綁定了,大家看出來嗎?Struts2里面用!將Action和Action中的待訪問方法進行區分。
動態綁定是不是很簡單,當然一些小伙伴可能感覺url地址里面加個“!”怪怪的,還有沒有其他方法來進行動態方法綁定呢?答案是必須滴,我們還可以通過通配符配置,來完成上面的動態方法綁定。下面我們就用一個例子,來把今天學習的知識串聯起來:
首先看一下我們的struts.xml配置文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="true" /><!--在使用DMI動態方法調用時,設置為true,否則會出現調用異常問題--> <constant name="struts.devMode" value="true" /> <!-- 常規Action配置 --> <package name="hell" namespace="/hell" extends="struts-default"> <!-- 訪問控制 --> <action name="index" class="com.edu.action.Hell"> <result> /hello.jsp </result> <result name="error"> /error.jsp </result> </action> </package> <!-- 使用通配符進行動態方法綁定的Action配置 --> <package name="user" namespace="/user" extends="struts-default"> <!-- 訪問控制 --> <action name="index" class="com.edu.action.UserAction"> <result> /index.jsp </result> </action> <action name="*_*" class="com.edu.action.{1}Action" method="{2}"> <result> /{2}.jsp </result> </action> </package> <!-- Add packages here --> </struts>
UserAction.class代碼:
public class UserAction extends ActionSupport implements UserManage{ public String add() { // TODO Auto-generated method stub return SUCCESS; } public String del() { // TODO Auto-generated method stub return SUCCESS; } public String getUser() { // TODO Auto-generated method stub return SUCCESS; } public String getUserList() { // TODO Auto-generated method stub return SUCCESS; } public String update() { // TODO Auto-generated method stub return SUCCESS; } @Override public String execute() throws Exception { // TODO Auto-generated method stub return SUCCESS; } }
Hell.class
public class Hell extends ActionSupport{ public String execute() throws Exception { return SUCCESS; } public String addLogin(){ return ERROR; } }
下面我們就可以進行測試了,http://localhost:8080/Struts2/user/User_add
下面我們來一起分析一下上面的請求地址:http://localhost:8080/Struts2/user/User_add,命名空間之前的部分我就不再贅述,如果你有不明白的地方,可以異步頂部,看一上面的解釋,下面我們重點來看一下User_add,這是什么意思呢?我們向上看一下我們的struts.xml的配置,我們在Action name配置的是*_*,然后在Action綁定Action類是用的是第一個*識別到的參數,動態綁定方法時使用的是第二個*綁定的參數,這里的“_”就是Struts2進行參數綁定的分割符。有過sql操作的朋友一定對於*不陌生,我們現在就暫定它為占位。
對於DMI動態方法綁定,這里我就以常規配置的Action為大家進行一下演示,訪問路徑為:http://localhost:8080/Struts2/hell/index!addLogin
好了,到這里關於Struts2路徑訪問和DMI動態方法綁定以及通配符的知識就為大家介紹完了。后續內容持續更新中。。。