好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

以简求快 Java快速开发框架LML配置及实例源码

以简求快 Java快速开发框架LML配置及实例源码

         人的一生只有一件事可以做,那就是追求。无论你做什么都是想得到一些东西,有些人高尚了,有些人低俗了。

         对于自己所追求的,不论是成功的好人,还是成功的小人,都有一份别人没有的执着。坚持才能胜利,然而行百里者半九十,谁又能坚持到最后呢?

         闲言碎语少叙,上一章讲到框架的总体架构,按照图例搭建起来并不会费多大劲。但是想必大家都很清楚,一般的JAVAweb框架是离不开配置文件的,这一次就给各位稍微的讲一讲,顺便奉上我实验用的实例源码。先声明一点,后台管理的HTML框架使用的是公司正在应用的一款通用后台管理HTML框架。虽然经过我的涂抹,但是为了避免法律纠纷,切不可用于商业用途。

         下面大致描述一下LML各配置文件的配置详情。

         1, Struts的配置文件 Struts.xml

         众所周知,Struts配置文件的核心主要内容就是Action的配置,往往我们为了减轻主文件的负担,需要分拆多个配置文件用来保存Action配置,但是这与我的原则有所违背。再次复习以下我们的原则:以简求快。一遍一遍的写重复的配置文件是多么乏味,多么浪费时间。下面给出Struts.xml中的一段配置代码,以通用换简单。

 <  package   name  ="System"   extends  ="struts-default"   namespace  ="/System"  > 
     <  result-types  > 
     <  result-type   name  ="velocity"   class  ="LML.Core.System.VelocityLayoutResult"  /> 
    </  result-types  > 
    
     <  interceptors  > 
         <  interceptor   name  ="power"   class  ="LML.Core.System.PowerInterceptor"  ></  interceptor  > 
         <  interceptor-stack   name  ="baseStack"  > 
             <  interceptor-ref   name  ="defaultStack"  ></  interceptor-ref  > 
             <  interceptor-ref   name  ="power"  ></  interceptor-ref  > 
         </  interceptor-stack  > 
     </  interceptors  > 
         <  action   name  ="*_*"   class  ="LML.Action.System.{1}Action"   method  ="{2}"  > 
             <  interceptor-ref   name  ="baseStack"  > 
                
             </  interceptor-ref  > 

             <  result   type  ="velocity"  > /Views/System/{1}/{2}.html </  result  > 
            
             <  result   name  ="stream"   type  ="stream"  > 
                 <  param   name  ="contentType"  > text/html </  param  > 
                 <  param   name  ="inputName"  > inputStream </  param  > 
              </  result  > 
         </  action  > 
        
     </  package  > 

  为了更灵活,虽然我使用通配符配置,但是我也会分不同的package。这里的package主要用来配合域来使用,每一个package算是一个业务独立的大模块,每个package内部包含若干个业务关联的Action。简单做出以下说明:1,首先定义一个result-type,为了velocity而存在。2,拦截器栈 baseStack 引用了两个拦截器,其中 defaultStack 是 Struts2的核心,而power就是LML用来做权限验证的拦截器了。3,接下来就是一段Action的通用配置,使用了一些约定,比如用Action的name属性来解析View的对应关系。难道这真有什么不好吗?我们明显的感觉到配置文件如此简单明了,在简单的应用上为什么不抛弃复杂的配置文件呢?

  2,由于我们使用Spring来管理Bean,当做一个容器来使用,所以一般情况下Hibernate没有必要单独使用配置文件,可直接集成于Spring的配置文件applicationContext.xml中。下面简单的解析一下这个配置文件。Spring在我看来,貌似他就是一个砖厂,生产砖头(Bean)让我们这些IT民工来搬砖。

 <  bean   id  ="dataSource"   class  ="com.mchange.v2.c3p0.ComboPooledDataSource"   destroy-method  ="close"  > 
    <  property   name  ="driverClass"   value  ="com.mysql.jdbc.Driver"   /> 
    <  property   name  ="jdbcUrl"   value  ="jdbc:mysql://localhost:3306/wisdom?useUnicode=true&amp;characterEncoding=UTF-8"   /> 
    <  property   name  ="user"   value  ="root"   /> 
    <  property   name  ="password"   value  ="123456"   /> 
    <  property   name  ="minPoolSize"   value  ="1"   /> 
    <  property   name  ="maxPoolSize"   value  ="20"  />   
    <  property   name  ="initialPoolSize"   value  ="1"  /> 
    <  property   name  ="maxIdleTime"   value  ="60"  /> 
    <  property   name  ="acquireIncrement"   value  ="1"  /> 
  
    <  property   name  ="acquireRetryAttempts"   value  ="30"  /> 
    <  property   name  ="acquireRetryDelay"   value  ="1000"  /> 
    <  property   name  ="testConnectionOnCheckin"   value  ="true"  /> 
    <  property   name  ="automaticTestTable"   value  ="c3p0TestTable"  /> 
    <  property   name  ="idleConnectionTestPeriod"   value  ="60"  /> 
    <  property   name  ="checkoutTimeout"   value  ="3000"  /> 

 </  bean  > 

  以上是数据源的配置,由于是测试环境,所以各项参数并不能用于实际的应用场景,请斟酌。C3P0用起来还算是中规中矩的吧。另外我监视过数据库连接,能够自动申请,超时也能够自动关闭,这样貌似就好像是没有问题了。。

  下面是sessionFaction的配置,你要是想在数据库干点什么,就靠它了。

 <  bean   id  ="sessionFactory"  
        class  ="org.springframework.orm.hibernate3.LocalSessionFactoryBean"  > 
         <  property   name  ="dataSource"  > 
             <  ref   bean  ="dataSource"  ></  ref  > 
         </  property  > 
         <  property   name  ="hibernateProperties"  > 
             <  props  > 
                 <  prop   key  ="hibernate.dialect"  >  
                    org.hibernate.dialect.MySQLDialect
                  </  prop  > 
             </  props  > 
         </  property  > 
         <  property   name  ="mappingResources"  > 
             <  list  > 
                 <  value  > Hbm/Sysmenu.hbm.xml </  value  > 
                 <  value  > Hbm/Syspower.hbm.xml </  value  > 
                 <  value  > Hbm/Diary.hbm.xml </  value  > 
                 <  value  > Hbm/Sysrole.hbm.xml </  value  > 
                 <  value  > Hbm/Comment.hbm.xml </  value  > 
                 <  value  > Hbm/Photo.hbm.xml </  value  > 
                 <  value  > Hbm/Leavemessage.hbm.xml </  value  > 
                 <  value  > Hbm/Notice.hbm.xml </  value  > 
                 <  value  > Hbm/Courseinfo.hbm.xml </  value  > 
                 <  value  > Hbm/Siteinfo.hbm.xml </  value  > 
                 <  value  > Hbm/Sysuser.hbm.xml </  value  > 
                 <  value  > Hbm/Rolemenu.hbm.xml </  value  > 
                 <  value  > Hbm/Rolepower.hbm.xml </  value  > 
                 </  list  > 
         </  property  > 
 </  bean  > 

  

  以下两个bean都用用来做一个初始化的动作。前一个是初始化数据库操作类,并注入sessionFactory。后一个就是用来初始化菜单和权限的了,需要指定从哪些包中收集菜单和权限,LML之所以能够自动收集生成菜单和权限,靠的就是它了。

  

 <  bean   id  ="DBHelper"   class  ="LML.Core.Helper.DBHelper"   > 
         <  property   name  ="sessionFactory"  > 
             <  ref   bean  ="sessionFactory"  ></  ref  > 
         </  property  > 
     </  bean  > 
     <  bean   id  ="InitMenuPower"   class  ="LML.Core.System.InitMenuPower"  > 
         <  property   name  ="packages"    value  ="LML.Action.System,LML.Action.Article"  />     
     </  bean  > 

  

  3,无论如何,我们也不应该忽视web.xml,它就像我们现在的web.config一样,一切配置从这里开始。

  以下配置两个servlet。前一个用于velocity,后一个用于struts2。

 <  servlet  > 
    <  servlet-name  > velocity </  servlet-name  > 
   <  servlet-class  >  
    org.apache.velocity.tools.view.servlet.VelocityLayoutServlet
    </  servlet-class  > 
 </  servlet  > 
 <  servlet-mapping  > 
   <  servlet-name  > velocity </  servlet-name  > 
   <  url-pattern  > *.html </  url-pattern  > 
 </  servlet-mapping  > 
   <  filter  > 
       <  filter-name  > struts2 </  filter-name  > 
       <  filter-class  >  
          org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </  filter-class  > 
   </  filter  > 
   <  filter-mapping  > 
       <  filter-name  > struts2 </  filter-name  > 
       <  url-pattern  > *.action </  url-pattern  > 
   </  filter-mapping  > 

  

   必不可少的还有一个listener,spring容器。

    <  listener  > 
    <  listener-class  > org.springframework.web.context.ContextLoaderListener </  listener-class  > 
   </  listener  > 

    4,其他配置文件,velocity配置文件,log4j配置文件,在此不赘述了。

  基本上,整个项目就只有这些配置文件了,如非特别需求,在项目的开发过程中大可不必再新增配置文件,也无须对现有配置文件扩充,当然这是要出去数据库映射文件的,这是暂时不可避免的。

  我个人是有点讨厌过多的配置的,因为那将导致项目的开发周期变长,维护起来也将更困难。

  我总结一下为什么这些配置文件大部分不需要再扩充。

  1,  由于我们采用通配符配置Action,所以我们没有必要对每一个Action单独配置。

  2,  我们在底层使用统一的静态类连接操作数据库,不存在所谓的DAO等层,所以没有必要对每一个模块都生成一个Bean,不需要每一个模块都注入sessionFactory。

  3,  个人觉得每次Request请求都会生成一个相应Action实例,那么使用作用域为Request的托管给Spring的Action有什么优势呢?所以干脆不要了。

近来在调整一个陈年项目,有一点点的忙,博客更新的不及时,见谅。这一篇博客会带着一个我的小实例,可自行下载观看,反正我是不收费的。

         转载请注明出处!源码在百度网盘可下载,下面给出链接。(百度网盘正在上传中)  下载地址: http://pan.baidu.com/netdisk/singlepublic?fid=804509_3742666528

 

分类:  LML

标签:  java快速开发框架 框架 快速框架 java框架 源码

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于以简求快 Java快速开发框架LML配置及实例源码的详细内容...

  阅读:49次