孙道贺++周建锋
摘要摘要:介绍了OpenCMS的特点和使用情况,明晰了静态导出概念,叙述了XML文档类型定义及显示实现办法,对XML类型文件的静态导出作了示例性描述。详细说明了静态导出的设置方法,给出了有权限条件下静态导出的两种解决办法,以及静态导出注意事项。实验测试表明:静态导出提高了网页的访问速度。
关键词关键词:OpenCMS;XML;静态导出;权限
DOIDOI:10.11907/rjdk.151852
中图分类号:TP302
文献标识码:A文章编号文章编号:16727800(2015)011002403
作者简介作者简介:孙道贺(1979-),男,天津人,硕士,天津理工大学中环信息学院计算机工程系讲师,研究方向为信息融合、软件工程;周建锋(1983-),男,天津人,硕士,天津理工大学中环信息学院计算机工程系讲师,研究方向为软件工程、图像处理。
0引言
目前国外主流的CMS有WordPress、Joomla、Drupal、Mambo、OpenCMS等,国内主流的CMS主要有织梦内容管理系统、帝国内容管理系统、动易内容管理系统等[1]。文献[2]列举了Walrus CMS、OpenCMS 等10个基于Java的CMS系统[2]。
OpenCMS是一个基于JAVA和XML语言技术的CMS,使用OpenCMS,可以快速建立和管理复杂的网站而无需专业的HTML知识。OpenCMS的核心思想是以标准为基础、开放源代码、易用性、模块化和弹性设计、低资源需求和高效率。OpenCMS的主要特色是提供通用的JSP模板、扩展性好、动静结合的发布方式、多网站集成管理、完善的用户管理和权限分配机制、采用虚拟文件系统(VFS)技术、缓存机制、负载平衡的群集机制。按照Emmerich的观点,OpenCMS适用于那些每天有150,000PV(page view)的网站。有100个官方注册的OpenCMS服务商,200 多个网站提供 OpenCMS 技术支持。典型的应用案例有LGT Bank of Lichtenstein、BP South Africa和UNICEF Netherlands,中央音乐学院、中医药在线等。
笔者学院投入40余万元升级软硬件环境,改版原有门户网站所在(www.tjzhic.com)。新系统采用Linux、
MySQL、Apache、Tomcat、OpenCMS技术,截至目前,新网站已在线运行1年。学院网站设计之初缺少使用静态导出特性的考虑,在已经录入数据的情况下,增加了改进性能的难度。本文主要对OpenCMS的静态导出机制进行研究,并涉及到权限管理方面的内容。
1静态导出机制分析
OpenCMS是完全数据库驱动,所有类型的资源都保存在数据库中,当请求网页时,该网页的所有相关资源都会从数据库中动态产生。静态导出可以把数据库中的静态资源拷贝一份放到真正的文件系统中(区别于VFS),当用户请求静态资源时,Web服务器会直接从文件系统中找到该静态资源,发送给浏览器,这样可以提升站点性能。下面描述XML类型的网页静态导出机制。
(1)XML文档类型定义。OpenCMS模块一般有classes、elements、formatters、resources、schemas、templates等文件夹。其中schemas里放置.xsd文件,用来定义该类型文件的XML规范,包括数据组成、格式及相应的数据属性限定。在OpenCMS中,文件后缀名不能决定文件类型。以zhnews类型的网页0001.html为例,0001.html实际上是XML文件,不含HTML标签。选定0001.html,单击右键,选择advanced/Edit controlcode,其文件前2行内容如下:
<?xml version="1.0" encoding="UTF-8"?>
这表明0001.html是一个XML文件,zhnews.xsd就是其文档类型定义。
(2)XML文件显示。templates文件夹中放置.jsp文件。以news.jsp为例,选定0001.html,单击右键,设置属性template或template-elements的值为news.jsp。当浏览器请求网页0001.html时,news.jsp会依据zhnews.xsd定义的数据规范,结合显示样式需求,将该网页XML数据转化为HTML格式的数据,并发送回浏览器。因此0001.html文件的文档类型定义由zhnews.xsd规范,其显示由news.jsp实现。
如果设定0001.html可以静态导出,当将0001.html转化为HTML格式的数据后,会生成一个HTML格式的数据文件放到操作文件系统中。当浏览器访问网页时,不需要再进行转换,而是直接把HTML格式文件传回浏览器。
2静态导出设置
2.1无权限限定条件下静态导出设置
(1)打开opencms/WEB-INF/config/opencms-importexport.xml文件,设置如下:
org.opencms.staticexport.CmsOnDemandStaticExportHandler
org.opencms.staticexport.CmsDefaultLinkSubstitutionHandler
......
......
(2)OpenCMS提供3个不同的静态输出处理类,以决定如何发布静态导出。
org.opencms.staticexport.CmsAfterPublishStaticExportHandler:该处理类在每次发布操作后,静态导出整个站点的资源。
org.opencms.staticexport.CmsOnDemandStaticExportHandler:该处理类在每次发布操作后,会删除相关静态资源在文件系统中的拷贝,该类只删除新发布资源的相关资源拷贝,下次访问时生成新拷贝。
org.opencms.staticexport.CmsOnDemandHtmlSubtreeHandler:该处理类在每次发布操作后,会删除该资源所在子树中所有静态资源在文件系统中的拷贝,下次访问时生成新拷贝,在许多基于目录的导航中有用。
本网站采用org.opencms.staticexport.CmsOnDemandStaticExportHandler导出处理类。
(3)设置导出以后缀名标识的资源。
(4)设置导出目录下的资源。
(5)
2.2有权限限定条件下静态导出设置
在OpenCMS VFS中,用户对资源有5种权限:分别是写(write)、读(read)、控制(control)、发布(direct publish)、查看(view)。VFS中资源若要能被静态导出,需要设定读(read)、查看(view)权限为允许(allowed)。选定资源,右键选择permission选项,即可设定该资源对用户和组的权限。有2种设置办法:①将all others用户的读(read)、查看(view)权限设定为允许(allowed);②对Export用户开放资源,并将Export用户的读(read)、查看(view)权限设定为允许(allowed)。本系统采用第二种办法,因为学院网站下设有10余个部门的子网站,当使用第一种办法时,各部门的编辑、发布人员登录后,可以看见其它子网站的内容,不便于编辑。
2.3静态导出资源
(1)整体批量静态导出:在Administration界面下,选择Database Management,点击start static export即可进行批量导出。
(2)部分导出:在整体批量导出后,当新闻更新、增加时,无需再批量导出。一般在发布新闻时,就会重新静态导出该新闻相关资源,更新实际文件系统。更新的量由上文提到的静态输出处理类决定,本网站采用org.opencms.staticexport.CmsOnDemandStaticExportHandler导出处理类。
查看一个资源是否被静态导出有3种办法:①查看批量导出日志;②查看实际的文件系统中是否有该文件,注意:如果export文件夹下不存在,要查看temp文件夹下是否存在;③通过URL测试,看访问的页面URL是否含有export字样,需要注意OpenCMS有offline、online两种模式,在登录后台后,系统默认处于offline状态,URL中是看不到export字样的。如果一类文件中只有某个不能导出,可仔细查看文件属性的静态导出设置、权限设置是否正确。如果一类文件都无法导出,查看opencms-importexport.xml中的defaultsuffixes是否包含了该类文件后缀名。
2.4静态导出注意事项
静态导出不适合变化频繁的页面,如含有动态交互form表单的页面、使用分页列表的页面等,使用JavaScript技术来显示的页面在静态导出时也可能会遇到麻烦。所以,静态导出后还需进行调试,确保链接能正常跳转。本系统遇到的典型问题是,新闻列表的分页显示页面静态导出后,点击第2、3页等后续页面无法正确显示。解决办法是设置该文件的export属性为false,使之不能静态导出。在实际使用中静态导出因存在缓存原因,有时导致更新有滞后性,如急需看到效果,可删除文件系统export文件下相应的文件,或在后台系统中重新发布该文件,这是使用静态导出的不便之处。
3性能测试
在启用flexcache的情况下,使用Apache的ab命令对网页进行本地开发环境测试。在设定参数为c=50、n=100情况下,网页访问所需时间结果如下:
①首页index.html在非静态导出情况下,用时在852ms~1952ms之间;静态导出后,用时在4ms~53ms之间;②普通网页0075.html在非静态导出情况下,用时在436ms~1516ms之间;静态导出后,用时在1ms~24ms之间。
设定参数为c=50、n=1000情况下,网页访问所需时间结果如下:①首页index.html静态导出后,用时在4ms~83ms之间;②普通网页0075.html静态导出后,用时在1ms~25ms之间。
设定参数为c=500、n=1000情况下,网页访问所需时间结果如下:①首页index.html静态导出后,用时在35ms~297ms之间;②普通网页0075.html静态导出后,用时在18ms~271ms之间。
使用ab进行测试每次得到的结果不同,上述结果是多次测试所得的端点值。实验结果表明:静态导出提高了网页访问速度,提升了网站性能;静态导出后,改变参数c、n的值,c值变化较n值变化影响更明显。
4结语
OpenCMS是一个开源、易用的内容管理系统,利用所见即所得的特性,网站编辑人员可以方便地进行网站管理。其Offline、Online管理模式及用户权限管理提高了网站的安全性。其静态导出技术把VFS中的静态资源拷贝一份放到真正的文件系统中,降低了数据库的压力,提升了网站性能,实际使用表明系统运行效果较好。
参考文献参考文献:
[1]杨立新,王莉娜,李贞贞.基于OpenCms网站内容管理系统的比较研究[J].软件导刊,2012(12):2023.
[2]OSChina.10个最受欢迎的Java开发的CMS系统[EB/OL].http://www.oschina.net/news /32888/10mostpopularjavabasedcms.20120914.
[3]肖治国.开源内容管理系统OpenCms探究[J].科技风,2008(24):6166.
责任编辑(责任编辑:杜能钢)