Posted on 2007-04-27 17:03
kook 阅读(510)
评论(0) 编辑 收藏 所属分类:
J2EE
使用大量的第三方组件是Appfuse的主要特点,接下来我们就看看他都使用了什么组件。
1.
DisplayTag:自我觉得是AppFuse里降低编码量最大的组件,这里有一篇使用DisplayTag的文章,
http://blog.csdn.net/clearwater21cn/archive/2005/02/21/296316.aspx,这里就不说了。
2.
JSTL:JSP Standard Tag Library是建立在JSP上的某种custom actions(自定操作)或custom tags(自定标签),类似于html语法中的标记。JSTL提供了诸如循环、条件、数据库访问、XML处理、国际化(i18n)等开发上的工具和流程。本系统中主要使用JSTL的核心标记库及格式化标记库标签实现动态的Web页和国际化支持。
3.
Sitemesh:用于建立复合视图。旨在提高页面的可维护性和复用性。sitemesh应用Decorator模式,用filter截取request和response,把页面组件head,content,banner结合为一个完整的视图,可方便的建立复合视图模式。
4.
Struts Menu:AppFuse作者写的基于JSP和Struts的应用程序的Web菜单框架。利用它可以很方便的通过XML定义及JSP标签构建树形菜单。
5.
OSCache:OSCache是OpenSymphony组织提供的一个J2EE架构中Web应用层的缓存技术实现组件。通过缓存页面的输出结果,可以很显著的改善系统运行性能。并能够改善系统的稳定性。
6.
UrlRewrite:地址变换技术,可以将应用中的url变换成自定义样式。
7.
Acegi:1.8加入的新组件,属于Spring的子项目。它使用Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。AppFuse用它实现了用户的认证和授权管理。
8.
Quartz:AppFuse中没有使用这一组件,但我觉得它提供的功能很常用,并实现的很好,因此顺带提一下。Quartz是一个实现任务定时调度的框架,它提供了简单易用的接口,实现了可调度任务的接口,并实现了强大的任务调度运行时(可以独立运行、可以作为EJB部署于容器中、本身支持cluster,等等),这一组件由Spring提供。
AppFuse还给我们提供或介绍了很多好用的工具,能大大加快我们的开发速度。如果能够很好的使用这些工具,我们可以只给出一个表的POJO,它们就能够自动生成所有的操作该POJO对应的数据表通常需要的增、删、改、查功能的模型层、控制层、视图层文件,几乎不用再修改就可以完成对这张表的所有基本操作。
1. AppGen
AppFuse给我们提供了一个通过xdoclet生成代码的工具——AppGen,我们来看看它怎么用。
POJO(Plain Old Java Object)代表一个存储在持久性存储器(如数据库)中的实体的对象视图。它通过hbm.xml配置文件与存储器中的数据相映射。
首先,你需要有这个表的POJO,放在src\dao\org\appfuse\model中。
在控制台中进入项目下的extras\appgen路径,键入ant -Dmodel.name=XXX -Dmodel.name.lowercase=xxx,第一个XXX处写你的POJO类名,第二个xxx处写这个对象在小写时的名字。当控制台出现BUILD SUCCESSFUL时,代码就生成了。代码在extras\appgen\build\gen文件夹下,包括java源代码(DAO、Service、Action)、单元测试、JSP、资源文件、xml配置文件、源数据等,目录结构与原项目一致,你只要把需要的目录拖到相应的项目根目录下就可以了,当然了,有的代码是需要在已有的文件上进行修改的,主要是属性文件和xml文件,这时需要你把新的代码手动转移到原来的文件中。
AppGen也可以为你省去这个麻烦,只要在前面的那段命令中加一个install,即ant install -Dmodel.name=XXX -Dmodel.name.lowercase=xxx,AppGen会直接把代码生成到你的项目中去,包括修改已存在的文件。这时为了保险起见,最好先备份一下代码。
2. xdoclet注释
AppGen生成的文件缺少了hbm.xml和Action Form Bean,难道我们要自己写吗?不是的。仔细察看build.xml文件就会发现实际上我们下载的AppFuse最初的源代码中并没有hbm.xml、FormBean,甚至连web.xml、struts-config.xml、validation.xml都没有,这些文件都是在我们执行ant setup时build.xml使用xdoclet自动生成的。 甚至连数据库和表、表里的数据也可以自动生成。奥秘都在POJO中。
查看User.java这个POJO你会发现里面除了java代码,还有很多注释,有@hibernate开头的,@struts开头的,这些都是xdoctlet的标签。我们大致讲解一下:
@struts.form:用来生成Form Bean,如User.java中写了@struts.form include-all="true" extends="BaseForm",意思是该POJO中每一个属性在Form Bean中都要有,并且生成的Form Bean文件要继承BaseForm。如果不希望生成的FormBean包含POJO的所有属性,可以在相关的属性get方法前填写注释@struts.form-field,意思是该属性要在FormBean中生成。那么如果我们要在FormBean中添加一些POJO没有的属性或方法怎么做呢?打开metadata\web文件夹,可以看到有一个xdoclet-UserForm.java文件,里面是User.java在生成Form Bean时新加入的代码,我们同样可以把我们自己在FormBean中增加的代码新建到一个xdoclet-POJOFrom.java文件中就好了。
@struts.validator:用来生成validation.xml文件。最常用的如@struts.validator type="required",意为该属性在表单中需要有必填的验证。当然前提是这个属性也在FormBean中。validation还有一项配置是自定义的校验规则,使用正则表达式表示。metadata\web中有一个文件validation-global.xml,里面就有邮编等规则的配置。
@hibernate:这个是比较复杂的,用来生成hbm.xml文件。其实内容与hbm.xml基本一致,所以如果会写hbm.xml,这个也就会写了。初学者可以先建表,使用工具生成hbm.xml,再仿照生成的hbm.xml内容写这个标签。一旦标签写好了,不光可以生成hbm.xml,build.xml还可以自动在数据库中建表。
@struts.action/@struts.action-forward:POJO不能生成struts-config.xml,这个标签是要写到Action中的。如果使用AppGen生成Action,你会看到@struts.action已经写好了,这个标签的作用就是生成当前Action在struts-config.xml中的映射代码,写法与struts-config.xml中一致,其实就是把xml中的配置移植到Action中。还有一个问题,如果我们要在struts-config.xml中进行与Action无关的全局的配置,如global-forwards呢?浏览metadata\web文件夹你会发现里面有多个xml文件,其中以global和struts开头的文件就是写这些配置的。build.xml在setup时会自动将这些文件联合Action中的注释生成一个完整的struts-config.xml文件。
接下来还有web.xml文件,你一定猜到了同样需要在metadata\web中配置。除了刚才提到的那些xml文件,剩下的基本都是用于配置web.xml的了。我们自定义的filter和listener是有具体类的,所以我们同样可以在这些filter和listener类中添加注释,具体例子参考AppFuse中的filter吧,很简单的。
进行了所有配置后,运行ant setup,build.xml会根据POJO、Action等自动生成FormBean、hbm.xml、struts-config.xml、validation.xml、web.xml,并在数据库中创建相应的表。看起来可能有点复杂,但如无特殊要求,对数据表的增、删、改、查,只需要写好POJO,一切都可以搞定。
3. Commonclipse
org.appfuse.model中有一个抽象类BaseObject,定义了三个抽象方法:hashCode()、equals()和toString(),其中前两个是Hibernate要求POJO必须实现的方法。所有的POJO都继承自这个类,当然也要实现这三个方法,这个工具可以帮助你实现这三个方法。
我们可以使用Eclipse在线获得这个工具。步骤:依次点击"Help" -> "Software updates" -> "Find and Install" -> "Search for new features to install",点击"add update site",输入http://commonclipse.sourceforge.net,OK。
接下来需要对Commonclipse进行一些配置。点击"Window"->"Preferences",选择"Java",你会在菜单中看到Commonclipse。点击General标签,将复选框全部钩掉(全不选)。点击"OK"。
选中一个类,右击,你会在菜单中看到Commonclipse。选择要生成的方法,就这么简单。