struts是一个web开发框架,是用struts避免了简单的jsp + servlet开发过程,维护过程中的一系列问题,但是struts配置文件的编辑始终是一个问题。下面我们使用xdoclet来自动生成struts配置文件。xdoclet是一个使用java代码中的注释来生成接口文件,或者配置文件的开源工具。
所有得struts的各组件关系如上所示,其中有两个主要类,dispatchaction和dispatchvaluebean。dispatchaction从上个页面获得输入,根据输入定位到不同的页面(0定位到dispatch_0.jsp,1定位dispatch_1.jsp)。
可以看看下列代码(只涉及到xdoclet相关的部分):
//dispatchvaluebean.java
/**
*
* @author mazhao
* @struts.form
* name=”dispatchvaluebean”
*/
public class dispatchvaluebean extends org.apache.struts.action.actionform {
private string dispatchvalue = “0”;
public dispatchvaluebean () {
}
public string getdispatchvalue()
{
return dispatchvalue;
}
public void setdispatchvalue(string dispatchvalue)
{
this.dispatchvalue = dispatchvalue;
}
}
上述的蓝色代码表示自己是一个formbean,且formbean的名字是dispatchvaluebean。
//dispatchaction.java
/**
*
* @author mazhao
* @struts.action
* name=”dispatchvaluebean”
* path=”/dispatchaction.do”
* input=”/index.jsp”
*
* @struts.action-forward
* name=”dispatch_0″
* path=”/dispatch_0.jsp”
* redirect=”false”
*
* @struts.action-forward
* name=”dispatch_1″
* path=”/dispatch_1.jsp”
* redirect=”false”
*
*/
public class dispatchaction extends org.apache.struts.action.action {
private string dispatchvalue = “0”;
public dispatchaction() {
}
public actionforward execute(actionmapping mapping, actionform form, httpservletrequest request, httpservletresponse response) throws exception {
dispatchvaluebean dispatchbean = (dispatchvaluebean)form;
string value = dispatchbean.getdispatchvalue();
if(“0”.equals(value))
{
return mapping.findforward(“dispatch_0”);
}
else
{
return mapping.findforward(“dispatch_1”);
}
}
public string getdispatchvalue()
{
return dispatchvalue;
}
public void setdispatchvalue(string dispatchvalue)
{
this.dispatchvalue = dispatchvalue;
}
}
上述的蓝色代码说明该action所使用的formbean,输入页面,path和不同的actionforward。
根据如上的代码可以使用如下的build文件来自动生成struts-config.xml:
<!—- 将xdoclet的jar文件包含到编译路径中 –>
<path id=”compile.classpath”>
<fileset dir=”${xdoclet.dir}”>
<include name=”*.jar”/>
</fileset>
</path>
<!—-定义子定义的任务标签 –>
<taskdef
name=”webdoclet”
classname=”xdoclet.modules.web.webdoclettask”
classpathref=”compile.classpath”
/>
<!—使用自定义的任务标签生成struts-config.xml文件–>
<target
name=”webdoclet”
depends=”prepare”
description=”generate deployment descriptors (run actionform to generate forms first)”> <echo>+—————————————————+</echo>
<echo>| |</echo>
<echo>| r u n n i n g w e b d o c l e t |</echo>
<echo>| |</echo>
<echo>+—————————————————+</echo>
<webdoclet
destdir=”ant”
mergedir=”ant/merge”
verbose=”false”
>
<fileset dir=”javasource”>
<include name=”**/*action.java”/>
<include name=”**/*bean.java”/>
</fileset>
<strutsconfigxml
destdir=”ant”
/>
</webdoclet>
</target>
建议在详细设计阶段使用这种方式生成代码框架和struts-config.xml配置文件。