Struts是一个Web开发框架,是用Struts避免了简单的JSP + Servlet开发过程,维护过程中的一系列问题,但是struts配置文件的编辑始终是一个问题。下面我们使用Xdoclet来自动生成struts配置文件。Xdoclet是一个使用Java代码中的注释来生成接口文件,或者配置文件的开源工具。
<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"></shapetype><stroke joinstyle="miter"></stroke><formulas></formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f><lock v:ext="edit" aspectratio="t"></lock><shape id="_x0000_i1025" type="#_x0000_t75" o:borderrightcolor="this" o:borderbottomcolor="this" o:borderleftcolor="this" o:bordertopcolor="this"></shape><imagedata src="file:///C:/DOCUME~1/mazhao/LOCALS~1/Temp/msoclip1/01/clip_image001.jpg" o:title="struts-dispatch-dia"></imagedata><bordertop type="single" width="4"></bordertop><borderleft type="single" width="4"></borderleft><borderbottom type="single" width="4"></borderbottom><borderright type="single" width="4"></borderright>
所有得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配置文件。