主题 : 简单说说jeecms3.0的新架构
级别: 白丁
UID: 7315
积分:5 加为好友
威望: 0 精华: 0
主题:0 回复:5
注册时间:2010-05-28
在线时长:0
1#   发表于:2010-06-30 22:27:53  IP:119.223.*.*
今天晚上看到了JEECMS3.0,大概说说JEECMS3.0吧!

1,安装过程跟2.4.2没啥大的区别,依然是
  创建数据库,创建表,插入初始化数据,更新jdbc.properties,覆盖web.xml

2,文件夹整理了很规整,感觉很好!

 资源文件:r\cms\www\default
  模板文件:WEB-INF\t\cms\www\default

 com.jeecms包下有3个package:cms, core, common 
 (2.4.2是以模块给单位分开的文件,3.0变成了以层为分割单位)

 注:把静态文件生成到了根目录下跟其他的文件混在了一起,这点不知是怎么想的,比较乱。
   其他的CMS一般都会统一放到html或者static等文件夹中。

3,文件编码统一为UTF-8

4,lib文件

  1)删除了 struts-core-2.1.6 增加了 spring.web(这可能是3.0最大的变动!以后就不是SSH的组合了!)
  2)spring版本的升级 2.5.6 -> 3.0.0
  3)追加了两个新功能用的lib
    urlrewrite-2.6.0 对搜索引擎友好
    jmagick 图片处理(水印等)
  4)邮件发送的包的变更(不知为何要换!)
    commons-email-1.1 mail.jar 
    ->smtp-1.4.2 mailapi-1.4.2 activation-1.1.1

5,框架设计

  1)V层从Struts2变为SpringMVC.
  2)拦截所有.do,.jspx,.jhtml,.htm,.jsp请求
  3)根据urlrewrite.xml的规则,前台处理都被转发为“/jeecms/$1“(后台.do不经过urlrewrite)
  4)重新处理请求:
    前台 /WEB-INF/config/jeecms-servlet-front.xml
    后端 /WEB-INF/config/jeecms-servlet-admin.xml
  5)以jeecms-servlet-front.xml为例:
    (1)定义加载messageSource
    (2)定义了几个Resolver:CommonsMultipartResolver, CookieLocaleResolver, SimpleMappingExceptionResolver,freemarkerViewResolver
    (3)基于注解风格使用拦截器AnnotationMethodHandlerAdapter
    (4)freemarker的配置(2.4.2是在freemarker.properties中配置)
       其中 freemarkerVariables为导入的自定义标签
    (5)定义Action类,在Web服务器启动的时候,就会以注解的形式将path跟类的某个方法关联
       例如:/register.jspx 
       -> com.jeecms.cms.action.front.RegisterAct.input(request, response, model)
  ================================================================
  @RequestMapping(value={"/register.jspx"}, method={org.springframework.web.bind.annotation.RequestMethod.GET})
  public String input(HttpServletRequest request, HttpServletResponse response, ModelMap model)
  {
    CmsSite site = CmsUtils.getSite(request);
    ...
  ================================================================

6,以首页为例的执行流程

  (1)输入http://www.XXX.com后,由于注解风格的拦截设置进入以下方法:
     ================================================================
     @RequestMapping(value={"/"}, method={RequestMethod.GET})
     com.jeecms.cms.action.front.DynamicPageAct.index(request,model)
     ================================================================
   <1>先从Request中获取CmsSite(在FrontContextInterceptor中放入到了Request中)
   <2>将以下值放入ModelMap:_start_time, site, user, resSys, res, location
      其中resSys的规则是:ContextPath() + "/r/cms"
          res的规则是:ContextPath() + "/r/cms" + "/" + site.getPath() + "/" + site.getTplSolution()
   <3>转移到WEB-INF\t\cms\www\default\index\首页.html
      (其中这个文件的文件名被放入了message文件中做国际化,很是奇怪,这样的文件名有必要国际化吗)

  (2)首页.html

    可以看到在首页.html就用到了上边说到的放入ModelMap的几个值:${site.name}, ${resSys}/front.css, /${res}/css/layout.css...
    模板中采用的是freemaker的标签,自定义标签的标签用来获取数据后输出:
    以页头导航栏.html的@cms_channel_list为例:
================================================================
[@cms_channel_list]
<dt class="menu_first"><a href="${base}/" target="_self" class="selected" id="nav1" onmouseover="jeeNav(this,${tag_list?size+1})"><span>首 页</span></a></dt>
[#list tag_list as c]
<dt><a href="${c.url}" target="_self" id="nav${c_index+2}" onmouseover="jeeNav(this,${tag_list?size+1})"><span>${c.name}</span></a></dt>
[/#list]
[/@cms_channel_list]
================================================================

    这段标签的解析过程如下:
    <1>jeecms-context.xml 中定义了cms_channel_list标签的实现为:
       <bean id="cms_channel_list" class="com.jeecms.cms.action.directive.ChannelListDirective"/>

    <2>ChannelListDirective.execute()
       ->ChannelMngImpl.getTopListForTag()
       ->ChannelDaoImpl.getTopList()
       HQL: from Channel bean where bean.site.id=? and bean.parent.id is null order by bean.priority asc,bean.id asc

    <3>最后将检索的结果List以”tag_list“为Key放入Environment,在模板中就可以取到”tag_list”后输出其中的数据。
    (如果设置了tpl参数的时候会根据tpl的值导入不同的style_list,由于这里没有设置tpl,所以默认为:InvokeType.body 将内容输出)

7,特别要提一下com.jeecms.cms.template.CmsModuleGenerator这个类,生成代码用的,想法很好!
  题外话:看看所有的Java框架都会有自己独特的配置文件,为了二次开发的可扩展性,
      JEECMS应该考虑一下设置自己的配置文件,这样的话跟易于大家扩展,而不是去直接修改源码。

8,数据库的主体构想变化不大,具体的看看DDL吧
比如:
  应大家的要求把文章内容发到DB中了。

看的时间不长,没往更里边去看,供大家探讨!3.0的变化如此之大,各方面还有待于验证。
本帖最近评分记录:
  • pony    2010-07-01   人气    +10    精品文章
  • 级别: 贡士
    UID: 1392
    积分:430 加为好友
    威望: 3 精华: 0
    主题:73 回复:142
    注册时间:2009-12-18
    在线时长:0
    2#   发表于:2010-07-01 08:50:32  IP:222.35.*.*
    3.0还没有下载呢,稳定后再好好研究一下,jeecms确是一个很好的产品,我一直被深深的吸引,没想到3.0框驾变化这么大,出乎我的意料,但我相信赁作者的功底,一定有原因,jeecms性能上一定有很大的提升.
    级别: 白丁
    UID: 31
    积分:209 加为好友
    威望: 0 精华: 0
    主题:2 回复:167
    注册时间:2009-06-03
    在线时长:0
    3#   发表于:2010-07-01 09:19:24  IP:59.141.*.*
    rensanning 能在不到一天的时间内对jeecms3.0有这么深入的分析,实在大大出乎我的意外。
     注:把静态文件生成到了根目录下跟其他的文件混在了一起,这点不知是怎么想的,比较乱。
       其他的CMS一般都会统一放到html或者static等文件夹中。 

    静态页放在什么目录下是可以设置的

    <3>转移到WEB-INF\t\cms\www\default\index\首页.html
          (其中这个文件的文件名被放入了message文件中做国际化,很是奇怪,这样的文件名有必要国际化吗)  

    有用户反应模板名称用英文的不太友好,所以模板名称都用国际化处理成中文的了。

     题外话:看看所有的Java框架都会有自己独特的配置文件,为了二次开发的可扩展性,
          JEECMS应该考虑一下设置自己的配置文件,这样的话跟易于大家扩展,而不是去直接修改源码。   

    以后会考虑二次开发的问题,让二次开发变得更容易、更友好。
    级别: 白丁
    UID: 31
    积分:209 加为好友
    威望: 0 精华: 0
    主题:2 回复:167
    注册时间:2009-06-03
    在线时长:0
    4#   发表于:2010-07-01 09:22:23  IP:59.141.*.*
    3.0还没有下载呢,稳定后再好好研究一下,jeecms确是一个很好的产品,我一直被深深的吸引,没想到3.0框驾变化这么大,出乎我的意料,但我相信赁作者的功底,一定有原因,jeecms性能上一定有很大的提升.

    jeecms3.0在性能上,特别是大数量有很大提升,在稳定性、简洁性、易扩展性、可用性上都有很大的提高和改进。
    级别: 白丁
    UID: 10952
    积分:0 加为好友
    威望: 0 精华: 0
    主题:0 回复:0
    注册时间:2010-09-14
    在线时长:0
    5#   发表于:2010-09-16 20:52:36  IP:222.145.*.*
    留名等查
    级别: 白丁
    UID: 10695
    积分:0 加为好友
    威望: 0 精华: 0
    主题:0 回复:0
    注册时间:2010-09-07
    在线时长:0
    6#   发表于:2010-09-17 19:23:32  IP:58.226.*.*
    对于他们的结构分析那么好啊
    级别: 童生
    UID: 11244
    积分:1 加为好友
    威望: 0 精华: 0
    主题:0 回复:1
    注册时间:2010-09-25
    在线时长:0
    7#   发表于:2010-09-28 00:51:43  IP:218.80.*.*
    用的是spring rest 风格~~~
    级别: 童生
    UID: 136093
    积分:22 加为好友
    威望: 0 精华: 0
    主题:0 回复:14
    注册时间:2020-10-08
    在线时长:0
    8#   发表于:2020-10-08 16:34:12  IP:171.51.*.*
    1
    1 共1页