在開發中一般不會說將所有的配置都放在struts.xml這個一個配置文件中去,因為這樣會使得整個配置文件臃腫不堪無法維護,一般來說會進行分模塊的進行配置文件的編寫。下面來演示一下分模塊來進行配置
其實很簡單,首先在需要的分模塊配置文件寫出來,比如
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"https://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="bird" namespace="/test" extends="struts-default">
<action name="helloworld_*" class="com.bird.action.HelloWorld" method="{1}">
<result name="success">/WEB-INF/jsp/hello.jsp</result>
</action>
</package>
</struts>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"https://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="bird" namespace="/test" extends="struts-default">
<action name="helloworld_*" class="com.bird.action.HelloWorld" method="{1}">
<result name="success">/WEB-INF/jsp/hello.jsp</result>
</action>
</package>
</struts>
然後在struts.xml文件中使用include標簽就可以完成將這個配置文件移入裡面去的功能
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"https://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.action.extension" value="do,action"></constant>
<include file="employee.xml"></include>
<include file="user.xml"></include>
</struts>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"https://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.action.extension" value="do,action"></constant>
<include file="employee.xml"></include>
<include file="user.xml"></include>
</struts>
在struts.xml文件中一般隻是配置一些全局文件需要的東西,比如一些常量。
下面來說一下動態方法調用,所謂的動態方法調用其實就是通過地址參數來選擇調用哪些方法,而不是默認的execute方法,先看一下代碼
package com.bird.action;
public class HelloWorld {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute(){
// message = "我的第一個Struts2應用";
message = "execute";
return "success";
}
public String addUI(){
message = "addUI";
return "success";
}
}
package com.bird.action;
public class HelloWorld {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute(){
// message = "我的第一個Struts2應用";
message = "execute";
return "success";
}
public String addUI(){
message = "addUI";
return "success";
}
}
如果不指定則調用默認的execute方法,但是你可以在瀏覽器的地址欄使用這個樣的地址請求方式來進行調用addUI這個方法,具體地址如下
https://localhost:8080/Struts2/test/helloworld!addUI.action
就是在後面加上感嘆號和具體需要調用的方法名稱,當然瞭,struts的文檔不推薦使用這種方式,所以我們可以在struts.xml文件an裡面通過使用靜態常量的方式來指定禁止使用這樣的動態方法調用
### Set this to false if you wish to disable implicit dynamic method invocation
### via the URL request. This includes URLs like foo!bar.action, as well as params
### like method:bar (but not action:foo).
### An alternative to implicit dynamic method invocation is to use wildcard
### mappings, such as <action name="*/*" method="{2}" class="actions.{1}">
struts.enable.DynamicMethodInvocation = true
### Set this to false if you wish to disable implicit dynamic method invocation
### via the URL request. This includes URLs like foo!bar.action, as well as params
### like method:bar (but not action:foo).
### An alternative to implicit dynamic method invocation is to use wildcard
### mappings, such as <action name="*/*" method="{2}" class="actions.{1}">
struts.enable.DynamicMethodInvocation = true將這個參數置為false就可以禁止,那麼我們將使用下面這樣推薦的通配符方法來進行調用,隻需要在Action的配置文件裡面這樣寫就可以
<package name="bird" namespace="/test" extends="struts-default">
<action name="helloworld_*" class="com.bird.action.HelloWorld" method="{1}">
<result name="success">/WEB-INF/jsp/hello.jsp</result>
</action>
</package>
<package name="bird" namespace="/test" extends="struts-default">
<action name="helloworld_*" class="com.bird.action.HelloWorld" method="{1}">
<result name="success">/WEB-INF/jsp/hello.jsp</result>
</action>
</package>
在actionNamn後面加上星號,然後method是大括號加上1,這個1代表第一個星號,那麼我們下面再訪問的地址就可以這樣寫
:8080/Struts2/test/helloworld_addUI.action
這樣使用通配符就可以訪問addUI這個方法瞭。推薦使用這樣的方式哦
摘自 小憤青專欄