前提:前几天说过,公司老大不许用开源框架。所以只能自己进行封装,前前后后编写了三个多星期,已经完成了初步功能,目前对异常的提示,还不友好,不够明确,这是最紧要改进的地方。其次代码的重构,框架结构的重构、系统的设计等..。 功能比较简单,请各位大手不要拍砖,本人从学习JAVA至今刚二年,希望大家能给点意见,本框架,纯当练手,重复造轮子。下载:请各位去我资源中下载源码,至于项目demo我会在本贴完成时传到资源,不需要任何资源分。
注意事项: 
          1.本框架仅支持C3P0数据源,
          2.其实使用ORM注释,并非JPA注释
   好了,闲话不要扯太多,先来进入主题:我觉得我有必要整理一下自己的语言,这里可能有点凑乱,但是没办法,各位看法将就一下。我太懒,不爱写博客。。 首先,来介绍一下框架的结构。(不好意思,我刚才发现我上传的资源中,有一个重复的包,那是我重构后忘记删除掉的,包名是:database包  请各位在查看的时候删除掉,这个是我的失误。    
    

解决方案 »

  1.   

    一。包介绍:
       1.action包:主要完成配置文件(xml)到POJO的映射,并配合dispatcher包进行action调度
       2.annnotation:自定义注解,目前仅用于完成orm映射,没有关联映射(OneToMany之类)
       3.exception包:异常定义包
       4.filter包:常用过滤器,包括地域过滤器,和编码过滤器
       5.jdbc完成数据库层的封装,其子包transaction包,用于对事务进行管理
       6.listener包:监听器,使用本框架必须配置的监听器,与于完成action的缓存(读入内存)。
       7.test包:杯具,我发现我测试cglib的测试文件没有删除...我记得跟database包都已经一起删除了的?怎么又会跑出来列???汗死,丢人丢大了
       8.util包,工具包。最常用的工具类BlankUtil判断是否为空的一个工具类,框架中用的最广,用来判断集合是否为NULL,或者SIZE为0,String  == null 或 ""
       9.web包,这块主要是页面框架,不知道有没有用过openfire,典型的三块式,他是基于sitemesh的,其中大部分代码是直接从openfire中“拿”出来的,只不过他的功能比较受限,我根据我的需要,将部分类进行了重写,扩展。
      10.WebManagerFactory获取一个WebManager实例,他是线程安全的。WebManager主要管理request,response,session,application对象,可以获取这些内置对象。
    二:依赖的jar包:
      asm.jar  
      c3po.jar  cglib-nodep2.2.jar
      common-logging.jar   dom4j.jar 
      jaxen.jar        mysql-connection-java.jar
      sitemesh.jar     (如果非MyEclipse还需要加入jsp-api.jar  servlet-api.jar jstl.jar)  现在CSDN的个人空间都不打, 不知道CSDN在干什么,这么晚了,我家的网独立2M的,应该非常快才对啊。想截个图上来的了事的,又害我手工把这些jar包一个个敲上来   好了,今天先介绍这么多。。今天去朋友那里玩了一天,晚上11点半才到家,睡觉了。明天还要和朋友去大梅沙玩列。  
        
      

  2.   

    好啦,我来更新,刚起床,肚子还空着列。现在还是在床上裸奔着的。本人会在本贴和我的博客同步更新,为了提高贴子的质量,我做了一个很艰难的决定:先在自己博客稍微整理一下。  这对我可真是个难题,我不会写博客,大家将就看吧。本贴博客的地址:http://blog.csdn.net/amos1989/archive/2011/04/04/6301121.aspx第一、我们看看如何应用这个框架 :
    jar包依赖,主要的jar包如下:
        
    jar包列表
    注意:还依赖jsp-api.jar servlet-api.jar jstl.jar,因为我的是MyEclipse,加入这些jar包以后会与MyEclipse自带的发生冲突,布署的时候会报错
    web.xml配置    主要有如下配置:
        框架的监听器配置(必选 ):
        该监听器主要作用在于:在容器启动时完成action配置文件的加载、缓存、数据库连接池的初始化。配置如下:
       
     <listener>  
                    <listener-class>  
                        com.rooyeetone.framework.listener.RYTContextListener  
                    </listener-class>  
            </listener>     
             
        action的配置文件路径(可选 ) :
        该项为可选参数,如果配置了该参数,则加载指定路径下的配置文件,如果没有配置,则会去找classpath下的:ryt-control.xml,其配置如下:
       
            <context-param>  
                    <param-name>ActionConfigLocation</param-name>  
                    <param-value>action-config.xml</param-value>  
              </context-param>  
        Action调度核心控制器(必选 ):
        
            <filter>  
                    <filter-name>libraFilter</filter-name>  
                    <filter-class>com.rooyeetone.framework.dispatcher.RequestDispatcher</filter-class>  
            </filter>  
            <filter-mapping>  
                <filter-name>libraFilter</filter-name>  
                <url-pattern>*.shtml</url-pattern>  
                <dispatcher>REQUEST</dispatcher>  
                <dispatcher>FORWARD</dispatcher>  
            </filter-mapping>  
         
        sitemesh拦截器(可选 ):
        如果你需要使用本框架的页面框架,想通过sitemesh来渲染页面,则需要配置,如果不需要则可以不用配置,页面框架我们将会放到最后来为大家讲解。其配置如下:
        
            <filter>  
                <filter-name>sitemesh</filter-name>  
                <filter-class>  
                    com.opensymphony.module.sitemesh.filter.PageFilter  
                </filter-class>  
            </filter>  
            <filter-mapping>  
                <filter-name>sitemesh</filter-name>  
                <url-pattern>*.jsp</url-pattern>  
                 <dispatcher>FORWARD</dispatcher>     
                 <dispatcher>REQUEST</dispatcher>     
            </filter-mapping>      国际化配置,包括过滤器和资源文件路径指定:    目前该功能依赖于sitemesh,若想使用国际化功能,则必须sitemesh,可能有些朋友说耦合,那木有办法我暂时的需求是这样,所谓技术为业务服务,在短期也只能这样。
        
            <filter>  
                    <filter-name>LocaleFilter</filter-name>  
                    <filter-class>  
                        com.rooyeetone.framework.filter.LocaleFilter  
                    </filter-class>  
                </filter>  
                <filter-mapping>  
                    <filter-name>LocaleFilter</filter-name>  
                    <url-pattern>/*</url-pattern>  
                </filter-mapping>  
                <context-param>  
                    <param-name>  
                        javax.servlet.jsp.jstl.fmt.localizationContext  
                    </param-name>  
                    <param-value>资源文件名</param-value>  
                </context-param>  
          
     
        说明事项 
        目前本框架只数据库管理层只实现了对mysql的框架,并不能跨数据库,毕竟时间有限,先满足开发需要再说
        目前数据连接池采用的是C3P0来实现的,暂不支持其它数据源
        本框架,刚完成初始版本,目前共享出来的源码中可能代码质量并不是很高,还需要大量的重构,出错的提示不够明确,等这些问题都会在下一个版本中得以改进
        关于下载: 相关资源,包括框架源码可以从下我的资源中下载。
      

  3.   

     在上一节中,我们讲了jar包依赖、web.xml配置、以及一些注意事项,接下来继续讲讲其它配置。    c3p0配置:
        这些在网上讲的有很多,大家不妨google一下,大牛直接无视之
        action的文件结构:
        <rtp-control> <action id="register" class="com.amos.framework.action.UserAction" method="register"> <result name="success" type="redirect">index.jsp</result> <result name="error" type="forward">/register.jsp</result> </action> </rtp-control>    怎么样?相信大家看到这配置文件都很熟悉吧?没错,为了考虑到大家的使用习惯,框架的配置方式采用struts2的配置文件格式。目前支持的result的Type有三种:forward、redirect、json。在下一版本中,将打算xml的根结点更名。将type的类型定义为enum(目前采用的是常量) 

    注:
    框架页面部分的功能及配置决定暂时不讲,放置在最后进行讲解 
      

  4.   

    将action的配置文件的格式重发一下:
        <rtp-control>  
            <action id="register" class="com.amos.framework.action.UserAction" method="register">  
                <result name="success" type="redirect">index.jsp</result>  
                <result name="error" type="forward">/register.jsp</result>  
            </action>  
        </rtp-control>  下一节,我们将开始我们的测试之旅。
      

  5.   

    那个,都经过junit覆盖测试的嘛?还有,你们老大不使用开源框架的理由呢?你可以在开源框架基础上改改 封装下就行撒 ,比如spirngside。。话说,你这样造的轮子,都是模仿已经存在的框架,且没啥大的新意。。倒不如直接使用开源框架的GA版本,更稳定...
      
      

  6.   

    好像用的是Struts框架啊!用的是Struts几的呀!
      

  7.   

    呵呵,我以前搞java的,现在不搞了。
      

  8.   

    不解!为什么有的公司不用开源的框架呢?还不是一样要用到别人的jar包!重复轮子 而且 不一定造得更好!
      

  9.   

    在配置文件中看到了spring和struts2的影子。
    唉,如果放我一个月假,我也很想写个像这样的framework来玩玩。
      

  10.   

    支持&佩服lz,顶下不过,为什么不用开源框架呢?不稳定?保密性?熟练度?
    还是别的原因???而且重复发明轮子,也没什么必要吧。当然人家是老大,当然要听人家的。
    就算练手也不错,呵呵good luck
      

  11.   


    这公司也真够装 B 的!cglib, asm, c3p0, dom4j, commons-logging, sitemesh 这些是什么,难道不是开源框架?
      

  12.   


    想当年 我们领导连 jquery都不让用我发觉老一代的程序员就是装b!
    他们的确技术牛
    但是总想着自己造轮子
    可是又没有本事培养下一代程序员跟他们一样能造个好轮子所以注定悲剧! 
      

  13.   

    我能感觉到LZ在写blog的时候非常自豪,非常鸡冻。