jeecms

官网

jeecms官网

JEECMS开发文档

csdn-jeecms

##Jeecsm使用框架包括:

  • springMVC,
  • hibernate(数据持久层框架),
  • Quartz(作业调度框架),
  • ant(自动编译构建框架,在自动生成模版类时用到),
  • Httpclient,
  • c3p数据池,
  • ehcache缓存框架,
  • dom4j框架(解析xml),
  • DWR框架(该框架可以通过js调用Java函数),
  • Lucene全文检索框架,
  • Jcaptcha验证码生成框架,
  • sl4f和Log4j日志框架,
  • Jmagick图片处理框架,
  • JODConverter文件转化框架及FCK编辑器及Freemarker框架

##Jeecsm框架包结构:

  • Jeecsm有三大主要包分别为core(核心包),common(公共类库包)和csm(网站主要包)
  • Action:页面交互层包,包含与页面交互类
  • Dao:DAO层包,包含封装数据操作类
  • Web:包含与页面有关的拦截器、过滤器、校验器等
  • Security:包含与安全有关联的类
  • Manager:业务逻辑层包,包含业务处理类
  • Entity:模型层包,包含数据模型类
  • Tpl:包含模版文件管理类,包括上传,删除等
  • Lucene:包含整站全文检索处理类
  • Staticpage:静态页面处理模块,包含与静态页面生成有关的类,包括该功能模块的页面交互层,DAO层和业务逻辑层包对象
  • Statistic:统计功能模块,包含与统计相关的处理类,包括该功能模块的页面交互层,DAO层和业务逻辑层包对象
  • Task:包含定时处理任务,定时器等
  • Tmplate:包含模版生成类,及模版文档
  • Common包都是一些工具包,就不详解释
  • Core核心包:封装与系统架构基础,如:登录,文件上传,图片模版保存等
  • Bhm包:包含全部hibernate配置文件,将配置文件和实体类分离
  • Base包:该包下全部对象都是抽象类,其封装数据模型及其基本操作,与模型类一一对应
  • 模型类:继承Base包对应的抽象类,主要封装一些额外数据操作

总结

  1. 数据模型包中将Hibernate配置文件抽到一个包中管理,有利配置文件维护,将逻辑操作和数据模型分离,有利系统维护和问题域定位(这一点我们可以借鉴)
  2. 混合式包结构设计,网站业务逻辑按分层结构设计,而功能使用模块结构。前者灵活性和性能高但不利于维护,后者维护性和伸缩性好但不灵活。这导致站内业务不同层之间高耦合,不利于站内业务维护。
  3. 函数体中构建数据库操作语句,应视情况而定,与数据库交流频率多的语句应当作类的静态属性存放,不应该也放在函数体中,这将导致,内存消耗大,JVM虚拟机会频繁调用CG回收器。(如:用户访问)
  4. 动态构建sql语句应该使用StringBuilder或StringBuffer(线程安全),不应该在函数中通过“+”连接(除非是一条语句)
  5. 增加一个web包用来存放与容器有关的拦截器或过滤器,有利于维护和问题域定位(可以借鉴)

转jeecms中一些分析

  1. 拦截器: 后台管理拦截器:com.jeecms.cms.web.AdminContextInterceptor
    前台拦截器:FrontContextInterceptor 都会把site信息和user信息设置到request和线程变量中

  2. UnifiedUser: 用户信息及登录信息表,记录用户基本信息及最后一次登录的信息 Authentication: 记录每次的登录信息 认证时抛出用户不存在的异常

  3. 国际化通用模板技术现在比较主流的是Velocity和Freemarker。如果我们的Web应用程序要启用这两种技术渲染视图,那么,spring MVC提供了FreeMarkerView和VelocityView两种View实现。因为二者都是基于同样的理念构建视图,所以,FreeMarkerView和VelocityView有着共同的父类AbstractTemplateViewAbstractTemplateView定义了几个boolean属性,让我们可以决定是否公开暴露某些数据给最终的合并过程,如下所述。private boolean exposeSpringMacroHelpers = true。是否需要为Spring提供的宏(macro)公开一个需要的RequestContext对象,默认需要,将以”springMacroRequestContext”为键公开一个RequestContext给合并过程。这样freeswitch就可以使用RequestContext中的方法获取国际化信息

  4. 权限控制拦截器在postHandler中取出用户的权限集合放到ModelMap中,自定义指令cms_perm,类:PermistionDirective,从ModelMap中取出用户权限集合,判断url是在其中

  5. 页面管理top.html显示登录用户信息,日期,上面的一排菜单点击top菜单,如栏目,跳转到/frame/channel_main.do,显示frame/channel_main.html,它是一个包含left和right的框架页,channel/v_left.do和channel/v_list.doleft显示刷新按钮和模型管理按钮,采用JavaScript加载v_tree.do,显示树菜单,v_tree.html是json数据,用于jQuery的treeview函数的数据源


##link
blog

link2

关于FreeMaker的开源项目介绍

H:\archive\17-06-06\jeecms框架学习