`
pxjianke
  • 浏览: 21976 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

appfuse学习

 
阅读更多

read-AppFuse-16-XDoclet学习续

 

 

 xdoclet学习续

 

 

Xdoclet是一个代码自动生成的工具

 

 

XDoclet任务就是Ant的自定义任务,除此以外,没有其他运行XDoclet任务的方法。

 

 

XDoclet它有两个重要的组件:

 

 

  • 进行特殊标记的 Java 源文件。
  • 预先定义的模板。[引用]

 

 

 

 

 

 

Merge File用来处理无法在Source Code中加xdoclet tag的情况。

 

 

 

 

 

Ø XDoclet中的核心任务:

 

 

<ejbdoclet>:面向EJB领域,生成EJB、工具类和布署描述符。
<webdoclet>
:面向Web开发,生成serlvet、自定义标签库和web框架文件。
<hibernatedoclet>
Hibernate持续,配置文件、Mbeans
<jdodoclet>
JDO,元数据,
vender configuration
<jmxdoclet>
JMXMBean接口,mlets,配置文件。

<doclet>
:使用用户自定义模板来生成代码。
<documentdoclet>
:生成项目文件(例如todo列报表)

 

 

 

 

 

Ø webdoclet sub task

 

 

XDoclet并没有和Ant一起发布,所以如果你想要使用XDoclet的话,就需要单独的下载和

 

 

安装。在使用任何一个XDoclet的任务之前,你首先需要在使用Ant<taskdef>任务来声

 

 

明它。

 

 

<deploymentdescriptor>:产生标准的web引用配置文件web.xmldestdir属性设定

 

 

web.xml文件的存放位置。

 

 

XDoclet通过合并点(merge points)支持定制,合并点是在模板文件定义里允许运行时插入定制代码的地方,使用mergedir属性设置。

 

 

    <target name="webdoclet" depends="compile-web"

 

 

        unless="webdoclet.unnecessary"

 

 

        description="Generate web and Struts descriptors">

 

 

        <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask">

 

 

            <classpath>

 

 

                <path refid="xdoclet.classpath"/>

 

 

                <path refid="web.compile.classpath"/>

 

 

            </classpath>

 

 

        </taskdef>

 

 

        <!—mergedir完成模板文件合并的功能-->

 

 

        <webdoclet destdir="${webapp.target}/WEB-INF"

 

 

            force="${xdoclet.force}"

 

 

            mergedir="metadata/web"

 

 

            excludedtags="@version,@author"

 

 

            verbose="true">

 

 

            <!—找出目录src/web ${build.dir}/web/gen文件中的webdoclet

                释,生web.xml,struts-config.xml等配置信息文件-->

 

 

            <fileset dir="src/web"/>

 

 

            <fileset dir="${build.dir}/web/gen"/>

 

 

            <!—生成的web.xml文件放在build/appName/WEB-INF/-->

 

 

            <deploymentdescriptor validateXML="true"

 

 

                servletspec="2.3" sessiontimeout="10"

 

 

                destdir="${webapp.target}/WEB-INF" distributable="false"

 

 

                displayname="${ant.project.name}">

 

 

                <configParam name="httpPort" value="${http.port}"/>

 

 

                <configParam name="httpsPort" value="${https.port}"/>

 

 

                <configParam name="daoType" value="${dao.type}"/>

 

 

                <configParam name="security" value="${security.mode}"/>

 

 

            </deploymentdescriptor>

 

 

            <jsptaglib validateXML="true"

 

 

                description="Custom tag library for this application"

 

 

                shortName="${webapp.name}" filename="${webapp.name}.tld"/>

 

 

            <strutsconfigxml validateXML="true" version="1.2"/>

 

 

            <strutsvalidationxml/>

 

 

        </webdoclet>

 

 

    </target>

 

 

 

 

 

 

 

 

图表 1引用一张网友发表的非常直观的使用说明图

 

 

Ø XDoclet 中的合并点 
 XDoclet 的文档中,您会非常频繁地看到术语 合并点(merge point和 合并文件(merge file。合并文件是文本文件,您可以把它合并到 XDoclet 生成代码的指定位置——“合并点上(由模板指定)。可以用合并文件来包含静态文本(例如代码片断和 XML 片断),这些文本可能很难或者不能用 XDoclet 的能力生成。例如,在示例代码的 metadata/web 目录下,您会找到这些文件。在代码生成期间,可以用到这些文件合并配置文件的一部分[引用]

 

 

 

 

 

ØXDoclet中的模板

 

 

XDoclet使用代码模板来生成代码。模板(template)是你想生成文件的原型。模板里使

 

 

用一些XML标签来指导模板引擎如何根据输入类以及它们的元数据来调整代码的生成。

 

 

模板有点像JSP文件。它们都包含文件和XML标签,生成输出文件时XML标签会被解析,

 

 

然后生成文本并显示在XML标签所处的位置上。除了以XDt为命名空间打头的XML标签

 

 

会被XDoclet引擎解析以外,其余的XML标签XDoclet会忽略不管。

 

 

Ø AppFuse中生成Action类的XDoclet模板

 

 

public final class <XDtClass:className/>Action extends BaseAction {

 

 

public ActionForward cancel(ActionMapping mapping, ActionForm form,HttpServletRequest request,

 

 

                  HttpServletResponse response)

 

 

    throws Exception {

 

 

        return search(mapping, form, request, response);

 

 

    }

 

 

    public ActionForward delete(ActionMapping mapping, ActionForm form,

 

 

                                HttpServletRequest request,

 

 

                                HttpServletResponse response)

 

 

    throws Exception {

 

 

        if (log.isDebugEnabled()) {

 

 

            log.debug("Entering 'delete' method");

 

 

        }

 

 

        ActionMessages messages = new ActionMessages();

 

 

        <XDtClass:className/>Form <XDtForm:classNameLower/>Form = (<XDtClass:className/>Form) form;

 

 

        // Exceptions are caught by ActionExceptionHandler

 

 

        Manager mgr = (Manager) getBean("manager");

 

 

        mgr.removeObject(<XDtClass:className/>.class, new Long(<XDtForm:classNameLower/>Form.getId()));

 

 

        messages.add(ActionMessages.GLOBAL_MESSAGE,

 

 

                    new ActionMessage("<XDtForm:classNameLower/>.deleted"));

 

 

        // save messages in session, so they'll survive the redirect

 

 

        saveMessages(request.getSession(), messages);

 

 

        return search(mapping, form, request, response);

 

 

    }

 

 

… …

 

 

}

 

 

Ø AppFuse中自动生成的对应Action

 

 

public final class PersonAction extends BaseAction {

 

 

    public ActionForward cancel(ActionMapping mapping, ActionForm form,

 

 

                                HttpServletRequest request,

 

 

                                HttpServletResponse response)

 

 

    throws Exception {

 

 

        return search(mapping, form, request, response);

 

 

    }

 

 

 

 

 

    public ActionForward delete(ActionMapping mapping, ActionForm form,

 

 

                                HttpServletRequest request,

 

 

                                HttpServletResponse response)

 

 

    throws Exception {

 

 

        if (log.isDebugEnabled()) {

 

 

            log.debug("Entering 'delete' method");

 

 

        }

 

 

        ActionMessages messages = new ActionMessages();

 

 

        PersonForm personForm = (PersonForm) form;

 

 

        // Exceptions are caught by ActionExceptionHandler

 

 

        Manager mgr = (Manager) getBean("manager");

 

 

        mgr.removeObject(Person.class, new Long(personForm.getId()));

 

 

        messages.add(ActionMessages.GLOBAL_MESSAGE,

 

 

                     new ActionMessage("person.deleted"));

 

 

        // save messages in session, so they'll survive the redirect

 

 

        saveMessages(request.getSession(), messages);

 

 

        return search(mapping, form, request, response);

 

 

    }

 

 

… …

 

 

}

分享到:
评论

相关推荐

    appfuse学习笔记(一)安装部署

    **AppFuse 学习笔记(一):安装与部署** AppFuse 是一个开源项目,它提供了一种快速构建企业级 Web 应用程序的方式。它使用了多种流行的技术栈,如 Spring Boot、Hibernate、Thymeleaf 和 Maven,使得开发者可以更...

    appfuse学习笔记(二)新建模块

    在本篇“appfuse学习笔记(二)新建模块”中,我们将深入探讨AppFuse框架的模块创建过程。AppFuse是一个开源项目,它提供了一个快速开发Web应用的基础结构,旨在简化开发流程并提高代码质量。通过AppFuse,开发者...

    appfuse 学习笔记

    ### Appfuse 学习笔记 #### 一、Appfuse 简介 Appfuse 是一个开源框架,旨在帮助开发者高效地构建企业级应用。通过提供一套完善的架构模板、最佳实践和技术栈组合,使得开发者能够专注于业务逻辑的实现,而不是...

    appfuse学习笔记(三)解决乱码和菜单设置

    在本篇“appfuse学习笔记(三)解决乱码和菜单设置”中,我们将深入探讨在使用AppFuse框架时遇到的编码问题以及如何定制应用程序的菜单。AppFuse是一款开源项目,它提供了一个快速开发Web应用的基础,特别是对于Java...

    AppFuse学习笔记(J2EE入门级框架)

    【AppFuse 框架详解】 AppFuse 是一个由 Matt Raible 创建的开源项目,它为初学者提供了一个基础的 J2EE 框架,用于演示如何集成多个流行的技术,如 ...AppFuse 不仅是一个框架,更是一个学习 J2EE 技术的良好起点。

    参考appfuse学习实例

    ssh 博文链接:https://melet.iteye.com/blog/104496

    AppFuse学习笔记

    AppFuse 是一个开源项目,专为加速 J2EE 应用程序开发而设计。...通过本文的学习,读者将能够熟练运用 AppFuse,体验其带来的高效和便捷。同时,结合 Ant 脚本,开发者可以灵活地管理和构建项目,进一步提高开发效率。

    appfuse

    通过理解和学习AppFuse的这些组件及其相互作用,你可以更好地掌握Java Web开发的基础,并且能够利用AppFuse快速创建自己的项目。对于初学者来说,这是一个很好的起点,而对于经验丰富的开发者,它则可以作为一个高效...

    appfuse2学习日记

    ### AppFuse2 学习知识点总结 #### 一、AppFuse 概述 - **定义与价值**:AppFuse 是一款开源项目,旨在利用一系列开源工具帮助开发者高效地搭建 Web 应用程序的基础架构。通过使用 AppFuse,开发人员可以在构建新...

    SSH学习及开发框架-appfuse

    appfuse 有struts2+hibernate+spring的整合 springmvc+hibernate+spring的整合 多模块,但模块都有 学习开发参考使用非常方便 可以到官方下载最新版的,我只是把自己下载的打包整理一下 注意哈,都是基于maven的...

    APPFUSE工具研究.doc

    AppFuse 是一个基于Java平台的开源项目,旨在加速和简化Web应用程序的开发。它通过集成各种流行框架,如Struts、Spring、Hibernate等,提供了一个...这对于快速启动新项目或学习现代Java Web开发技术是非常有价值的。

    appfuse1.4-architecture

    06年时的appfuse,学习SSH架构的经典入门框架。相对比较老的资料,可以欣赏一下当时的架构,向牛人致敬

    万恶的Appuse-----Appuse2.X在MyEclipse之中的部署问题

    在压缩包文件"Maven-Appfuse学习"中,可能包含了关于如何学习和使用Maven和Appfuse的资源,包括教程、示例代码和配置文件。通过深入学习这些内容,可以进一步理解和解决Appfuse在MyEclipse中的部署问题。建议仔细...

Global site tag (gtag.js) - Google Analytics