XDoclet基本任务手册.doc_第1页
XDoclet基本任务手册.doc_第2页
XDoclet基本任务手册.doc_第3页
XDoclet基本任务手册.doc_第4页
XDoclet基本任务手册.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任何人都想过自动生成的代码,自己去写个分析器不是件容易的事,而XDoclet给我们机会建立自己的代码生成器。 XDoclet最早用来对付EJB,因为生成EJB的本地和远程接口以及对应的HOME和描述符是一件简单但是枯燥的事,本来我以为,只有JBuilder这样的集成编辑器可以很好的简化工作,后来知道XDoclet也能够完成得不错。 我最早用XDoclet是因为学习hibernate,hibetnate的描述文件并不复杂,关键的部分不多,可是一旦对POJO修改,就必须要劳师动众的找到对应的描述符来修改,增加了一次出错的机会,而使用了XDoclet就可以做到同步的修改。 还有就是struts,首先是配置文件,许多人操作同一个文件会产生冲突,有了XDoclet我们就不怕了,还有validate文件也一样,有了XDoclet就会解决大部分冲突问题。 之所以起这么一个名字,主要因为XDoclet和Ant结合得很紧,尽管实际上做的工作并没有直接的联系,但XDoclet除了Ant接口就只有些Maven接口插件了,所以XDoclet几乎是完全依赖Ant的。 本篇文章的目录结构如下,因为只是为了说明问题,在我的ant的build文件中并没有包括路径名的引用,一切是直接的方式。 classes doc gen lib commons-collections-2.1.jar commons-logging-1.0.3.jar commons-validator.jar log4j-1.2.8.jar servlet.jar struts.jar xdoclet-1.2.1.jar xdoclet-apache-module-1.2.1.jar xdoclet-ejb-module-1.2.1.jar xdoclet-hibernate-module-1.2.1.jar xdoclet-web-module-1.2.1.jar xdoclet-xdoclet-module-1.2.1.jar xjavadoc-1.0.3.jar merge src todo web 只列出lib中的文件,每一个的作用在后面慢慢描述。 build.xml 开头增加 *1,最简单的todolist 每一篇讲XDoclet都送这里开始,有很多原因的。XDoclet的灵感来自JavaDoc,JavaDoc把文档写在代码里,缓解了困扰编程领 域多年的文档与程序同步问题。这里有个很有趣的事,就是UNIX业界的人们传递下来这样一个传统,就是代码是最好的文档,保持文档的同步实在是费力不讨好 的事,所以他们提出这样一个好主意,不过JavaDoc更聪明,文档是程序注释的一部分,而且可以提取出来。 来吧,看这个任务。 然后src写这么一个文件 package xdoclet; public class TodoListTest /* * todo 我有许多工作要做,只是测试,忽略吧 */ public TodoListTest() /* * todo 我还不知道名字,只是测试,忽略吧 * */ public String getYourName() return null; 注意要按照javadoc的写法。还要注意ant中的子任务系统,其中info就是我们定义的documentdoclet任务的子任务,我们以后会看到很多类似的情况. 然后运行ant todolist 结果就是一个结构类似javadoc,但是只包括todo标签的html文档,呵呵,可以看看项目里有哪些待办的事。 2,web.xml和taglib 作servlet映射是个讨厌的工作,当你接收别的项目的时候,这个项目的servlet怎么用可能比较麻烦,可能当时web.xml的映射找不到了,这时怎么办呢? 看这个文件 package com.xdocletbook.blog.servlet; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Level; import org.apache.log4j.Logger; /* * web.servlet * name=HomePage * web.servlet-init-param * name=LogLevel * value=LOG_LEVEL * web.servlet-mapping * url-pattern=/home * * web.security-role *role-name=OwnerRole * web.security-role-ref *role-name=blogowner *role-link=OwnerRole */ public class HomePageServlet extends HttpServlet private static Logger LOGGER = Logger.getLogger(HomePageServlet.class); public void init() throws ServletException String logLevel = getInitParameter(LogLevel); if (logLevel != null & logLevel.length() 0) LOGGER.setLevel(Level.toLevel(logLevel); public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException LOGGER.debug(Displaying home page); request.getRequestDispatcher(jsp/home.jsp).forward(request, response); 然后配置build.xml增加如下任务 然后运行ant generate-web 结果就是这样一个web.xml StrutsActionServlet org.apache.struts.action.ActionServlet HomePage com.xdocletbook.blog.servlet.HomePageServlet LogLevel 1 blogowner aOwner StrutsActionServlet *.do HomePage /home !- To specify mime mappings, create a file named mime-mappings.xml, put it in your projects mergedir. Organize mime-mappings.xml following this DTD slice: - !- To specify error pages, create a file named error-pages.xml, put it in your projects mergedir. Organize error-pages.xml following this DTD slice: - !- To set up security settings for your web app, create a file named web-security.xml, put it in your projects mergedir. Organize web-security.xml following this DTD slice: - aOwner 仔细看这个文件,你一定诧异struts的配置信息怎样得来,这是XDoclet的另一种方式,对于第三方的Servlet,我们没有办法再处理原 代码,所以我们有了merge选项,看这一句就知道了,在merge目录里我们有两个文件: servlets.xml StrutsActionServlet org.apache.struts.action.ActionServlet servlet-mappings.xml StrutsActionServlet *.do 还要注意的是LOG_LEVEL,这个是说要引用ant 中的变量,所以我的build.xml前面中增加了这两项 所以,我们就可以动态的改变部署的Log级别 3,struts自动配置 Struts中有两样比较重要的类,Action和Form。 对于Action,我们需要配置Action的映射和Forward属性,对于Form我们也需要注册名字和校验参数,以下就是我们能用XDoclet做到的。 对于Action我们写这样一个Java文件 package com.xdocletbook.blog.servlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /* * Simple class to test Jakarta Struts generation (Jakarta Struts 1.2 beta 2 only). * * struts.action *path=/struts/foo *name=userForm *input=jsp/createBlog.jsp * * struts.action-forward *name=success *path=/struts/getAll.do *redirect=false * * * struts.action-exception * type=com.xdocletbook.blog.exception.ApplicationException * key=app.exception * path=jsp/error.jsp * * struts.action-form name=blog.Create */ public final class StrutsAction extends Action public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) return mapping.findForward(success); 关键部分就是注释部分。 看我们增加build.xml一个任务, 运行ant generate-web,我们就在gen得到了struts-config.xml 其中关键内容如下 如果我们有许多Action,就可以随时生成这样一个文件,不必在意有人改过这个文件。同时你也不必担心不小心忘了改这个文件,因为你改了 Java时,许多默认的属性也跟这改了。 看到这里,许多用过workshop的一定感觉到页面流不就是这样吗?当通过图形界面定义流程时,看看页面流的源码你就会发现,注释中有一些 特殊的标记,这说明workshop的注释有着xdoclet一样的功能,只不过workshop提供了很好的界面,而不需要自己写注释,而且workshop提供了 更好的语法检查,呵呵,只是将许多action写到一起,是有些乱。 Struts的另一个主要的部分就是Form了,虽然我一开始觉得Form有些麻烦,对付动态的Form有些无能为力,但是结合一些相关的插件后,效果确实不错。 这是我们的Form文件,我们还使用ValidatorForm来做自动验证。 package com.xdocletbook.blog.servlet; import java.io.Serializable; import org.apache.struts.validator.ValidatorForm; /* * * struts.form *name=blog.Create */ public class BlogCreateForm extends ValidatorForm implements Serializable private String name; private String owner; private String email; public BlogCreateForm() public String getName() return ; /* * struts.validator * type=required */ public void setName(String name) = name; public String getOwner() return this.owner; /* * struts.validator * type=required */ public void setOwner(String owner) this.owner = owner; public St

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论