日期:2023-01-13 阅读量:0次 所属栏目:高等教育
文献标识码:A 文章编号:1672-7800(2015)005-0021-03
作者简介:朱欣(1986-),女,江苏苏州人,硕士,苏州职业大学信息中心助理工程师,研究方向为软件测试、数据分析。
0 引言
信息化与互联网的发展推动着高校的信息化建设,开源内容管理系统(CMS)由于具有统一创建、管理信息发布、内容采集等功能,并具有安全机制防护等优点,近年来在企业[1-3]、金融等领域有着广泛应用。在教育行业[4],哈佛大学、北京大学等高校的部分应用也是基于开源CMS搭建的。CMS的种类繁多,国外比较著名的CMS系统有Drupal、Joomla,国内比较著名的有DEDECMS、JEECMS等。 根据构建语言和使用框架不同,又可分为基于PHP技术的CMS和基于Java技术的CMS。
高校信息化建设目前面临着开发人员与经费不足等问题,利用开源CMS进行信息化建设,一方面可快速进行网站开发,减少人力成本,另一方面也避免了高校与软件企业合作中出现的业务需求沟通繁琐、软件维护升级成本高的缺点。对开源内容管理系统的功能构架JEECMS进行剖析,阐述了展示层Freemarker的工作机制。针对JEECMS模板标签使用的局限性,研究了如何利用模板技术,并在此基础上自定义扩展前台和后台标签,从而丰富页面模板的二次开发功能,能够针对不同业务特点开发符合实际需求的页面。
1 模板技术介绍
1.1 模板技术概要
模板技术[5,6]是解决页面开发复用性差,提升内容表现形式和组织形式的一种有效的技术手段。比较流行的模板技术有Velocity和Freemarker,相较于Velocity,Freemarker可以进行国际化处理,支持日期、数字,并可进行宏定义。
1.2 Freemarker概述
FreeMarker 是一个免费的模板引擎,是一个基于模板生成文本输出的通用工具,使用纯Java 编写,被设计用来生成HTML页面,特别是基于MVC模式的应用程序。模板由FTL语言标记而成。Freemarker具有自定义宏、自定义函数、自定义模板文件加载器、缓存处理、异常处理等功能。使用FreeMarker可以更好地实现页面表现层与业务逻辑层的分离。
2 JEECMS概述
JEECMS采用SpringMVC3+Spring3+Hibernate3+Freemarker+HTML5技术架构,基于Java技术开发,具有稳定、安全、高效等特点,JEECMS可以跨应用服务器与操作系统平台,兼容多种浏览器,支持MySQL、Oracle、SQLServer等多种数据库。
JEECMS系统分为前台应用服务系统和后台内容管理系统。前台主要负责不同模块内容的呈现,后台负责系统内容的管理,包括增、删、改等。
在JEECMSV5基础上搭建信息中心部门网站的功能构架如图1所示。
JEECMS的页面多为静态html页面,通过调用JEECMS自定义标签获得动态数据,重写CSS+DIV结构获得页面模板。现有标签采用Freemarker模板引擎,其依赖于现有的数据表结构,在此基础上针对现有框架提出自定义标签,以丰富页面展现形式。
JEECMS中前台和后台调用标签的方式不同,使用的标签也不能通用。前台是通过实现Freemarker中的TemplateDirectiveModel接口来自定义标签,后台通过宏定义的方式自定义标签。以网站访问统计人数为例,后台页面中<@s。m "cms。function。statistic"/>的标签无法在前台页面中调用。
3 前台标签定义
以定义一个新标签cms_webcount为例,此标签用来实现在前台页面调用页面访问人数。自定义标签的具体流程如图2所示。
(1)自定义数据表和hibernate映射文件。建立数据表和表相对应的hibernate配置文件。由于访问人数可通过计算JEECMS案例中已存在表jc_site_flow的行数算出,相应配置文件CmsSiteFlow.hbm.xml也已存在,故此步可省略。
(2)定义实体类WebVisit、Dao接口和Dao接口的实现。
(3)标签名和标签类配置。在jeecms-context.xml、jeecms-servlet-front.xml中定义标签名,在jeecms-context.xml中定义对应的标签类。
(4)定义标签类WebVisitDirective。WebVisitDirective实现Freemarker的TemplateDirectiveModel接口类,重写execute方法。本例中对应标签较为简单,WebVisitDirective中直接调用Dao层。这也是自定义标签中最重要的一步。
public class WebVisitDirective implements TemplateDirectiveModel {
@SuppressWarnings("unchecked")
public void execute(Environment env,Map params,TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException,IOException {
WebVisit webVisit = null;
Map
long visitCount = webVisitdao.visitStatistic(restrictions)
webVisit = new WebVisit();
webVisit.setVisitCount(visitCount);
Map
paramWrap.put(OUT_BEAN,DEFAULT_WRAPPER.wrap(webVisit));
Map
body.render(env.getOut());
DirectiveUtils.removeParamsFromVariable(env,paramWrap,origMap);
}
…
}
(5) 在ehcach-hibernate.xml文件中配置缓存。
(6) 页面调用。在前台任何页面中调用如下标签,可获得页面访问人数。
[@cms_webcount]
${tag_bean.visitCount}
[/@cms_webcount]
4 后台标签定义
4.1 流程
后台标签获取如图3所示。
4.2 新建数据表和数据表配置文件
在本例中建立数据表jc_test和配置文件CmsTest.hbm.xml。
4.3 定义实体类业务层、Dao层、控制层
新建实体类CmsTest业务层接口CmsTestMng、业务层实现类CmsTestMngImpl、Dao层接口CmsTestDao、Dao层实现类CmsTestDaoImpl、控制层CmsTestAct。其中控制层的关键代码如下所示:
…
@Controller
public class CmsTestAct {
private static final Logger log = LoggerFactory
.getLogger(CmsTestAct.class);
…
@RequestMapping("/test/v_edit.do")
public String edit(Integer id,HttpServletRequest request,ModelMap model) {
WebErrors errors = validateEdit(id,request);
if (errors.hasErrors()) {
return errors.showErrorPage(model);
}
model.addAttribute("cmsTest",manager.findById(id));
return "test/edit";
}
…
}
4.4 定义其它配置文件
(1)在Spring配置文件jeecms-servlet-admin-action.xml中定义控制层配置。
(2)在jeecms-context.xml中定义Dao层和业务层配置。
(3)在ehcache-hibernate.xml中定义缓存配置。
4.5 后台页面
后台页面关键代码如下所示,其中${cmsTest.id}等为新定义的标签。
<@p.table value=list;cmsTest,i,has_next><#rt/>
<@p.column title="" width="20">
<#t/>
@p.column><#t/>
<@p.column title="ID">${cmsTest.id}@p.column><#t/>
<@p.column code="cmsTest.col1">${cmsTest.col1!}@p.column><#t/>
<@p.column code="cmsTest.col2">${cmsTest.col2!}@p.column><#t/>
<@p.column code="cmsTest.col3">${cmsTest.col3!}@p.column><#t/>
<@p.column code="global.operate" align="center">
<@s.m "global.edit"/> | <#rt/>
')) {return false;}" class="pn-opt"><@s.m "global.delete"/><#t/>
@p.column><#t/>
@p.table>
5 结语
通过分析JEECMS如何自定义标签,减少了对开源CMS软件企业的依赖。高校可完全利用内部技术人员进行网站系统开发,制定出符合实际需求的页面模板。如何针对现有开源CMS框架进行功能模块的二次开发,研发高校自主CMS是下一步工作的重点。
本文链接:http://www.qk112.com/lwfw/jiaoyulunwen/gaodengjiaoyu/200746.html