为了实现业务逻辑与用户界面的分离,目前J2EE MVC层框架对业务控制器 Action的处理基本都需要使用XML配置文件来调用,在大部分应用里,随着应用规模的增加,系统中Action数量也大量增加,导致Action配置文件变得非常臃肿。为了避免Action配置文件过于庞大、臃肿,提高Action配置文件的可读性,我们一般是将一个配置文件分解成多个配置文件,然后在主文件中包含其他配置文件,那还能不能做得更好呢?比如舍弃配置? 为了解决这一问题,国内著名的J2EE开源团队EasyJF(http://www.EasyJF.com)开发的MVC框架EasyJWeb完美的简化了Action的配置问题,实现了配置零目标。
在EasyJWeb1.0版本之前,它同struts一样都是通过在WEB容器启动的时候,将Action配置文件中的信息写入内存中,如:

<!--BBS首页-->
<module name="bbsIndex" path="/bbsIndex" form="" scope="request" action="com.easyjf.bbs.mvc.IndexAction" inject="byType">
  <page name="index" url="/bbs/index.html" type="template" />
  <page name="edit" url="/bbs/edit.html" type="template" />
</module>

        以上配置是EasyJWeb独有的对Action类的访问处理,path申明当用户URL请求为bbsIndex.ejf时调用IndexAction.java类。关于更多的配置说明,请参考EasyJWeb开发文档。也许这样的配置一个、几个你能清楚的识别找到。但当项目很大时。个人感觉臃肿的配置文件并不是我想要的。给J2EE程序员“减负”的时刻来临......
目前,在EasyJWeb1.2版本下,我们再也不需使用如此繁杂的配置来配置Action,而可以直接在Action类文件中使用JAVA5的新特性Annotation,通过注解以替代XML配置。如像上面的配置我们可以在类文件中通过注解得到同样的效果:

Package com.easyjf.bbs.mvc;
@Action(path = "bbsIndex")
public class IndexAction extends AbstractCmdAction {
        @Override
         public Page doInit(WebForm form, Module module) {
                return page("index");
        }
        Public Page doEdit(WebForm form, Module module){
                return page("edit");
        }
}

        看看,多么简洁的注解。首先,当用户URL请求为bbsIndex.ejf,EasyJWeb就会自动到模板显示根目录(views)下的bbsIndex目录中去加载index.html,当用户URL请求为bbsIndex.ejf?cmd=edit时,同样会在该目录中去查到edit.html并加载。假设我们的需求是当用户请求访问bbsIndex.ejf时,需要到另一个指定的文件夹(customer)下去查找,这时可通过设置别名来解决,
如:@Action(path = "customer", alias = "bbsIndex")
其实在注解@Action中,我们还可以灵活设置更多的注解属性,以实现更灵活的对Action控制。如可设置多个别名,alias = "bbsIndex,index,bbs" 这样同一个Action就可以多个URL来请求bbsIndex.ejf、 index.ejf、 bbs.ejf或customer.ejf。
当然,通过注解替代XML配置还不是EasyJWeb的终极目标,其实开发者只要遵循一定的规则或约定,像上面的Action其实注解都可以不使用。现在我们去掉注解@Action这行,直接用类名index.ejf访问试试。这样EasyJWeb默认就会到文件夹index下去查找index.html这个页面,同样如果使用index.ejf?cmd=edit访问则会到该目录下去查找edit.html这个页面。现在再来看看这个Action是不是清爽多了。
        最后,为了能让EasyJWeb支持自动加载Action,需要在web.xml配置文件中增加一对<context-param>。如:

<context-param>
        <param-name>defaultActionPackages</param-name>
        <param-value> com.easyjf.microerp.mvc </param-value>
</context-param>

        这样WEB容器在启动时,EasyJWeb就会自动到com.easyjf.microerp.mvc这个包下去加载全部的Action。
评论
发表评论

您还没有登录,请登录后发表评论

kenter1643
搜索本博客
博客分类
最近加入圈子
存档
最新评论