论文部分内容阅读
【摘 要】众多企业都用Web发布新闻信息,新闻信息在绝大多数时候样式固定不变。FreeMarker是一个使用纯Java编写的模板引擎,能够基于模板动态和静态生成HTML网页.本文在企业应用中,利用FreeMarker模板技术为某企业进行新闻网页改造,改造方式分为Servlet动态生成新闻、后台生成静态Html新闻,在新闻消息的整合和企业版本升级优势上得到充分体现。
【关键词】新闻发布;FreeMarker;版本升级;Java
1.引言
现在大部分企业或公司都要求有自己的网站,用来发布新闻信息展示公司自己的形象、宣传自己的产品、获取客户的反馈信息等。基于Web的系统由于前台页面经常需要改版,花费在维护界面改动上的成本越来越高[1,3]。经研究表明,这些网站的网页显示风格在一段时间内不会变化。如果将网站的显示风格抽象成固定模板,而网站的信息内容独立管理,这样网站的显示和数据可分开管理和设计。通过FreeMarker引擎可将信息按照对应的模板生成所需要的HTML页面。这样一个模板可以应用到多条信息的显示上,而同一条信息也可以通过不同模板生成不同的网页,从而可以大大提高信息内容网站的建设和升级[1]。下面以FreeMarker实现某企业新闻模块的改版升级为例,讲述FreeMarker的应用过程。
2.Freemarker简介
FreeMarker是基于Java的开发包和类库,一种基于模板的、用来生成输出文本的通用工具。它一开始就是为MVC设计的,不依赖于Servlet,网络或Web环境,仅仅专注于展示,且程序逻辑(Java程序)和页面设计(FreeMarker模板)分离,分层清晰、易于维护,利于分工合作,支持Struts2,Springmvc等主流Web框架的集成,简单易学、功能强大,免费开源。程序员可以将它嵌入到自己的项目中,实现MVC框架中的View层组件、Html页面静态化、代码生成工具、CMS模板引擎、页面栏目动态定制等。它可以从Servlet获取的数据来动态生成HTML代码,且编译速度非常快,与普通的HTML相比也毫不逊色[2],很多采用MVC模式的软件架构都使用FreeMarker来实现模板功能,支持从任意位置加载模板;从类路径下,从数据库中等,易于定义特设的宏和函数。它的核心原理是:数据模型+模版=输出[1]。
3.新闻发布改进并整合的设计与实现
在企业新闻的发布中,有一些新闻用户的访问量特别多,又有一些用户访问量比较少。针对这两种情况,程序设计人员怎么做呢?又怎么加以区分这两种新闻呢?文章给出具体步骤设计并实现。
3.1 定义Html网页模板,并用FreeMarker对其进行编程
3.1.1 手动制作html网页
比如:制作topimgdowntext.htm,上方显示新闻的图片,下方显示新闻的文字,网页美工人员可以事先用html做好。效果图略。
3.1.2 对模板进行编程
另存topimgdowntext.htm网页为topimg-
downtext.ftl后缀文件,用FreeMarKer语言对其进行编程,原则是只对需要变动的数据进行数据替换,比如这一种上方图片、下方文字新闻,在以后的新闻发布中会用很多次,那么需要替换的部分就是图片和文字,而新闻模板的样式是没有改变的。简单实例如下:替换img标签的${image1},p标签的${content}。更复杂的需要自己动手编程,对模板进行定义。
3.1.3 设置模板专用库templates
模板放于工程目录templates下,这个文件夹专用于存放各类型的网页模板,动态和静态方式都需要调用这个目录下的模板,设置文件夹的目的是为了方便工程管理。还可以自定义模板,导入到模板库,方便新闻发布者预览和调用,预览时候配合原模板的Html文件。
3.2 整合并改进新闻发布
通过对企业单位的分析,发现在实际的网站访问中,有一些新闻用户点击率相当的高,有一些新闻用户点击率不高,于是从服务器承受访问压力的角度来看,对于那些访问不高的新闻采取Servlet动态加载模板输出新闻网页来实现;对于那些访问量特别高的新闻采取新闻发布时,用模板技术,先在后台生成静态的Html新闻网页,并按日期、分类存放在服务器端(sina,sohu大多采取这种方式),当用户访问时候直接调用html静态网页就行了,这样可以减轻因服务器编译、执行带来性能上的压力。
3.2.1 Servlet动态输出网页实现
WEB-INF\web.xml中的配置
Hello
logic.freemaker.Hello
Hello
*.to
说明:在配置Servlet的时候,servlet-name名字可以任意起名,url-pattern可以不用设置,这里设置成*.to为为了和项目中用到的Struts中的*.do格式统一,servlet-class是需要手动写的java代码。关键代码片段如下:
Configuration cfg=new Configuration();
cfg.
setServletContextForTemplateLoading (getServletContext(),SystemPara.templatesAddr);设置FreeMarker的模版文件位置
Map root=new HashMap();建立数据模型
root.put("content",News_Content);为新闻内容赋值;
root.put("image1",ImgAddr+imgsName);为新闻图片赋值;
数据库设计部分内容如下:
字段说明:News_Content,专门存放新闻的文字,New_Src是新闻图片存放位置,News_Template在templates模板目录下,具体调用的模板名。这种方式下对软件版本的改版、升级和维护比较有利。因为新闻的内容始终保持在数据库或文件服务器里面,我们只需要对模板进行修改,又可以利用原来数据重新生成新的新闻网页,缺点就是需要用数据库存储新闻的内容和图片,需要对数据库进行设计。
3.2.2 静态输出网页Html的实现
定义后台输出html文件的java处理类
本系统为例:java处理类的包名目录是:src\logic\freemaker\html。里面定义了四个常用新闻模板处理的java类:多图片新闻,文本新闻,上面图片、下面文字新闻和上面两张图片,下方文字的新闻。
举例MutiImages.java多图片新闻生成为例,核心代码如下:
Template temp=cfg.getTemplate(News_Template);加载模板,模板不同样式。
Map root=new HashMap();
root.put("title",Title);
root.put("content",Content);
root.put("imgslist",ImgAddr);
Writerout=newOutputStreamWriter(new FileOutputStream(OutHtmlAddr),"GBK");
News_Template变量为加载模板的变量,这里引用的是事先在模板库目录templates下定义好的模板。
ImgAddr为List变量,然后再以文本输出流的形式,把文件输出到工程项目规定的地址,就完成静态网页的生成。
3.3 新闻发布策略分析
新闻网页的设计中,我们是选择采取servlet方式输出,还是先输出静态网页html文件,再提供给用户访问呢?这需要额外的设计一个策略选择器。第一步:开发人员可以对该单位进行初步的调研,对该模块新闻的发布预先定义两种模式中的一个。第二步,对新闻网页按日,按月等进行用户访问量的统计,同时对Web服务器的性能进行同步检测,对检测的结果记录下最高和最低的峰值和出现的时间点,然后和这期间的用户访问量做比对,对比对的结果,我们可以加权求一个相对的平均值,超过这个值的这类新闻就按照html静态生成网页形式来解析,提供给用户访问;低于这个值,也就是用户访问比较少的情况下,就采取servlet来访问。这样可以相对达到一个平衡。
4.总结
本文用FreeMarKer模板引擎技术,对某单位的新闻发布系统进行了改造和整合。在这过程中,详细的把开发技术和流程做了介绍。通过实践表明,FreeMarKer模板技术配合servlet动态和后台静态输出html两种方式可以快速对网站的新闻版块进行升级改造,大大缩短人力和财力。
参考文献:
[1]屈建明,陈洁.FreeMarker模板引擎动态生成网页的应用研究[J].计算机与现代化,2011(3).
[2]卞坤.公务员在线学习系统的设计与实现[J].大连理工大学,2012,6:6-7.
[3]张铁头,刘磊.基于模板的WEB视图层生成技术[J].数字技术与应用,2012.
[4]李宁.JavaWeb开发技术大全[M].北京:清华大学出版社,2009.
[5]http://sourceforge.net/projects/freemarker/files/chinese-manual/FreeMarker_Manual_zh_CN.pdf.
【关键词】新闻发布;FreeMarker;版本升级;Java
1.引言
现在大部分企业或公司都要求有自己的网站,用来发布新闻信息展示公司自己的形象、宣传自己的产品、获取客户的反馈信息等。基于Web的系统由于前台页面经常需要改版,花费在维护界面改动上的成本越来越高[1,3]。经研究表明,这些网站的网页显示风格在一段时间内不会变化。如果将网站的显示风格抽象成固定模板,而网站的信息内容独立管理,这样网站的显示和数据可分开管理和设计。通过FreeMarker引擎可将信息按照对应的模板生成所需要的HTML页面。这样一个模板可以应用到多条信息的显示上,而同一条信息也可以通过不同模板生成不同的网页,从而可以大大提高信息内容网站的建设和升级[1]。下面以FreeMarker实现某企业新闻模块的改版升级为例,讲述FreeMarker的应用过程。
2.Freemarker简介
FreeMarker是基于Java的开发包和类库,一种基于模板的、用来生成输出文本的通用工具。它一开始就是为MVC设计的,不依赖于Servlet,网络或Web环境,仅仅专注于展示,且程序逻辑(Java程序)和页面设计(FreeMarker模板)分离,分层清晰、易于维护,利于分工合作,支持Struts2,Springmvc等主流Web框架的集成,简单易学、功能强大,免费开源。程序员可以将它嵌入到自己的项目中,实现MVC框架中的View层组件、Html页面静态化、代码生成工具、CMS模板引擎、页面栏目动态定制等。它可以从Servlet获取的数据来动态生成HTML代码,且编译速度非常快,与普通的HTML相比也毫不逊色[2],很多采用MVC模式的软件架构都使用FreeMarker来实现模板功能,支持从任意位置加载模板;从类路径下,从数据库中等,易于定义特设的宏和函数。它的核心原理是:数据模型+模版=输出[1]。
3.新闻发布改进并整合的设计与实现
在企业新闻的发布中,有一些新闻用户的访问量特别多,又有一些用户访问量比较少。针对这两种情况,程序设计人员怎么做呢?又怎么加以区分这两种新闻呢?文章给出具体步骤设计并实现。
3.1 定义Html网页模板,并用FreeMarker对其进行编程
3.1.1 手动制作html网页
比如:制作topimgdowntext.htm,上方显示新闻的图片,下方显示新闻的文字,网页美工人员可以事先用html做好。效果图略。
3.1.2 对模板进行编程
另存topimgdowntext.htm网页为topimg-
downtext.ftl后缀文件,用FreeMarKer语言对其进行编程,原则是只对需要变动的数据进行数据替换,比如这一种上方图片、下方文字新闻,在以后的新闻发布中会用很多次,那么需要替换的部分就是图片和文字,而新闻模板的样式是没有改变的。简单实例如下:替换img标签的${image1},p标签的${content}。更复杂的需要自己动手编程,对模板进行定义。
3.1.3 设置模板专用库templates
模板放于工程目录templates下,这个文件夹专用于存放各类型的网页模板,动态和静态方式都需要调用这个目录下的模板,设置文件夹的目的是为了方便工程管理。还可以自定义模板,导入到模板库,方便新闻发布者预览和调用,预览时候配合原模板的Html文件。
3.2 整合并改进新闻发布
通过对企业单位的分析,发现在实际的网站访问中,有一些新闻用户点击率相当的高,有一些新闻用户点击率不高,于是从服务器承受访问压力的角度来看,对于那些访问不高的新闻采取Servlet动态加载模板输出新闻网页来实现;对于那些访问量特别高的新闻采取新闻发布时,用模板技术,先在后台生成静态的Html新闻网页,并按日期、分类存放在服务器端(sina,sohu大多采取这种方式),当用户访问时候直接调用html静态网页就行了,这样可以减轻因服务器编译、执行带来性能上的压力。
3.2.1 Servlet动态输出网页实现
WEB-INF\web.xml中的配置
说明:在配置Servlet的时候,servlet-name名字可以任意起名,url-pattern可以不用设置,这里设置成*.to为为了和项目中用到的Struts中的*.do格式统一,servlet-class是需要手动写的java代码。关键代码片段如下:
Configuration cfg=new Configuration();
cfg.
setServletContextForTemplateLoading (getServletContext(),SystemPara.templatesAddr);设置FreeMarker的模版文件位置
Map root=new HashMap();建立数据模型
root.put("content",News_Content);为新闻内容赋值;
root.put("image1",ImgAddr+imgsName);为新闻图片赋值;
数据库设计部分内容如下:
字段说明:News_Content,专门存放新闻的文字,New_Src是新闻图片存放位置,News_Template在templates模板目录下,具体调用的模板名。这种方式下对软件版本的改版、升级和维护比较有利。因为新闻的内容始终保持在数据库或文件服务器里面,我们只需要对模板进行修改,又可以利用原来数据重新生成新的新闻网页,缺点就是需要用数据库存储新闻的内容和图片,需要对数据库进行设计。
3.2.2 静态输出网页Html的实现
定义后台输出html文件的java处理类
本系统为例:java处理类的包名目录是:src\logic\freemaker\html。里面定义了四个常用新闻模板处理的java类:多图片新闻,文本新闻,上面图片、下面文字新闻和上面两张图片,下方文字的新闻。
举例MutiImages.java多图片新闻生成为例,核心代码如下:
Template temp=cfg.getTemplate(News_Template);加载模板,模板不同样式。
Map root=new HashMap();
root.put("title",Title);
root.put("content",Content);
root.put("imgslist",ImgAddr);
Writerout=newOutputStreamWriter(new FileOutputStream(OutHtmlAddr),"GBK");
News_Template变量为加载模板的变量,这里引用的是事先在模板库目录templates下定义好的模板。
ImgAddr为List变量,然后再以文本输出流的形式,把文件输出到工程项目规定的地址,就完成静态网页的生成。
3.3 新闻发布策略分析
新闻网页的设计中,我们是选择采取servlet方式输出,还是先输出静态网页html文件,再提供给用户访问呢?这需要额外的设计一个策略选择器。第一步:开发人员可以对该单位进行初步的调研,对该模块新闻的发布预先定义两种模式中的一个。第二步,对新闻网页按日,按月等进行用户访问量的统计,同时对Web服务器的性能进行同步检测,对检测的结果记录下最高和最低的峰值和出现的时间点,然后和这期间的用户访问量做比对,对比对的结果,我们可以加权求一个相对的平均值,超过这个值的这类新闻就按照html静态生成网页形式来解析,提供给用户访问;低于这个值,也就是用户访问比较少的情况下,就采取servlet来访问。这样可以相对达到一个平衡。
4.总结
本文用FreeMarKer模板引擎技术,对某单位的新闻发布系统进行了改造和整合。在这过程中,详细的把开发技术和流程做了介绍。通过实践表明,FreeMarKer模板技术配合servlet动态和后台静态输出html两种方式可以快速对网站的新闻版块进行升级改造,大大缩短人力和财力。
参考文献:
[1]屈建明,陈洁.FreeMarker模板引擎动态生成网页的应用研究[J].计算机与现代化,2011(3).
[2]卞坤.公务员在线学习系统的设计与实现[J].大连理工大学,2012,6:6-7.
[3]张铁头,刘磊.基于模板的WEB视图层生成技术[J].数字技术与应用,2012.
[4]李宁.JavaWeb开发技术大全[M].北京:清华大学出版社,2009.
[5]http://sourceforge.net/projects/freemarker/files/chinese-manual/FreeMarker_Manual_zh_CN.pdf.