为应用指定多个配置文件
在开发中一般不会说将所有的配置都放在struts.xml这个一个配置文件中去,因为这样会使得整个配置文件臃肿不堪无法维护,一般来说会进行分模块的进行配置文件的编写。下面来演示一下分模块来进行配置
其实很简单,首先在需要的分模块配置文件写出来,比如<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://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" "http://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" "http://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方法,先看一下代码
public class HelloWorld { private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String execute(){ message = "execute"; return "success"; } public String addUI(){ message = "addUI"; return "success"; } }如果不指定则调用默认的execute方法,但是你可以在浏览器的地址栏使用这个样的地址请求方式来进行调用addUI这个方法,具体地址如下
http://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的配置文件里面这样写就可以
通配符方法来进行调用
在actionNamn后面加上星号,然后method是大括号加上1,这个1代表第一个星号,那么我们下面再访问的地址就可以这样写
http://localhost :8080/Struts2/test/helloworld_addUI.action
这样使用通配符就可以访问addUI这个方法了。推荐使用这样的方式