如何应用Web页面静态化技术以提高Web应用系统的响应性能
suiw9 2024-11-13 14:46 41 浏览 0 评论
软件项目实训及课程设计指导——如何应用Web页面静态化技术提高Web应用系统的响应性能
1、什么是Web页面静态化技术
(1)Web页面静态化技术
将JSP动态页面按照某种模板格式生成对应的*.html纯静态Web页面的过程,称之为Web页面静态化技术。
(2)何种场合需要应用Web页面静态化技术
当有些企业应用系统中的页面信息在一段时间内不发生变化时(比如内容管理系统、网上商城中的商品信息等),可以应用Web页面静态化技术,这样可以提高整个系统的响应效率——因为无须再访问后台数据库系统、也不需要再次编译处理JSP动态页面文件,因此能够减少对Web应用系统的消耗和性能影响。
2、为什么要应用Web页面静态化技术
目前基于B/S(Browser/Server,浏览器/服务器模式)体系架构的企业应用系统基本上都是由动态Web页面所构成的(比如由*.jsp、*.aspx、*.php等类型),正因为是动态化的Web页面才能满足不同的Web浏览者的个性化的访问需要、并且能够与访问者产生相互交互。
但为了能够产生出动态的应用效果,用户每一次对目标页面的HTTP请求都会在Web服务器端对这些动态Web页面进行编译或者动态处理,而这些操作都是很消耗Web服务器系统资源的。
如果目标页面文件(比如*.jsp)在一定的时间内,其动态显示的内容不会发生改变(比如新闻系统中的新闻信息显示、网点中的商品分类和某一商品信息的详情页等),那么就没有必要为每一次对它的HTTP请求访问,都进行一次"新"的编译或执行。此时可以在用户第一次对它访问后,就把它在这段没有发生改变的时间内的页面处理结果保存到一个纯静态的页面文件(*.html格式)或者有静态效果的其它格式页面文件(*.vm、*.ftl等形式)中,然后用户以后每次再访问这个动态Web页面时,后台Web服务器系统程序就直接采用转换后的静态页面内容进行响应。
因此,经过静态化技术转换处理后的结果Web页面能够快速地响应用户的HTTP请求,而且还能够大大地减少对Web服务器系统资源的消耗。当然,为了能够达到静态化的功能实现目标,软件应用系统的开发人员可以在Web应用系统的开发中应用各种模板技术——比如Velocity模板、FreeMarker模板技术等。当然,读者如果熟悉Web页面静态化技术的实现原理后,也可以自己编程实现。
在Web应用系统的表示层开发中如何通过应用Velocity模板技术以提高Web应用系统的响应性能,作者在以前的文章中的做了详细的介绍,有兴趣的读者可以翻看文章《软件项目实训及课程设计指导——如何在Web应用系统表示层开发实现中应用Velocity模板技术》。
作者在下文将为读者介绍如何在Web应用系统的表示层开发中应用FreeMarker模板技术以提高Web应用系统的响应性能。
3、在Web应用系统的表示层开发中应用FreeMarker模板技术
(1)FreeMarker模板是什么、怎么理解"模板引擎"的概念
FreeMarker 和Velocity都属于"模板引擎"(作者注:"模板引擎"在J2EE平台中一般为框架形式的系统程序和相关的系统库),开发人员应用这些模板引擎所提供的模板语言处理相关的数据,模板引擎系统会按照开发人员的要求输出文本,这些文本的格式可以是HTML网页、电子邮件、配置文件以及源代码等形式。
如下代码示例为在标准的HTML页面中内嵌FreeMarker模板语言的语句(参看其中的黑体标识的语句)的示例。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <title>showInfoTemplate.ftl</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
</head> <body>
<h2>采用标准的方式获得参数值: ${showResultInfo}</h2 > <br>
<h2>采用FreeMarker模板的内建变量的方式获得参数值: ${Request.showResultInfo }</h2 > <br>
</body></html>
(2)为什么要应用FreeMarker等类型的模板技术
谈到"模板"的概念,相信读者应该不会感觉到陌生感,在生活中大量地应用各种各样的"模板",应用的目的读者也应该都会理解。同样,在计算机软件应用系统中也大量地提高各种模板和应用各种模板来简化和加速某项"工作",比如Word中的文档格式模板、编程语言中的print("%各种格式符")语句中的替换模板等等。而在J2EE系统平台的应用系统开发中之所以应用FreeMarker模板技术:
首先,FreeMarker模板技术同样也能够实现Web应用系统中的表示逻辑和数据处理逻辑相互分离——这是通过在模板文件中包装HTML标签实现的。
FreeMarker模板采用标准的Web Servlet程序中所提供的模型数据动态地生成目标HTML页面文件。在Web应用系统开发中如果应用FreeMarker模板技术,界面开发人员只需要关注于界面(也就是FreeMarker的模板文件)的开发,而系统中的业务逻辑的开发人员也只需要负责将需要显示的数据填入到FreeMarker的模板文件的数据模型中。最终由FreeMarker模板引擎负责合并数据模型和模板文件,然后产生出完整的Web页面文件并输出到Web浏览器中。
其次,实现将基于动态化技术的各种Web页面(如*.jsp、*.aspx、*.php等)转换为静态的HTML格式或其它文本格式的Web页面,达到"动态页面静态化"的高效响应的应用效果。
因此,模板引擎不只是可以让开发人员实现代码级别的分离(如系统中的业务逻辑代码和用户界面展示控制代码的分离),也可以实现软件应用系统中的数据分离(如动态可变数据与静态固定数据相互分离),甚至还可以实现应用系统中的代码单元共享(代码重用)等效果。
4、Struts及Struts2应用框架都全面地支持FreeMarker模板技术
(1)FreeMarker模板特别适应于基于MVC体系架构模式的Web应用系统
Struts2应用框架默认采用FreeMarker作为其模板文件,并且Struts2应用框架中所有的主题模板文件都是采用FreeMarker模板技术编写的。
(2)Struts2应用框架全面提供对FreeMarker模板技术的支持
在基于Struts2应用框架的Web应用系统中,开发人员只需要将项目中的Action类的配置定义中的结果<result>标签中的type属行设置为:type="freemarker",就可以自动地由Struts2应用框架中内带的FreeMarker引擎完成模型数据和模板文件的总装配和输出(参看如下示例图所示)。
(3)Struts应用框架也同样提供对FreeMarker模板技术的支持
而在Struts应用框架中应用FreeMarker模板技术,开发人员只需要在Web应用系统的部署描述文件web.xml中配置出与FreeMarker模板相关的FreemarkerServlet组件(参看如下示例图所示),然后由该FreemarkerServlet组件将项目中的相关Action类中所保存的模型数据和模板文件相互集成组装成最终的HTML页面文件、并向Web浏览器输出。
作者将在下文及后续文章中为读者介绍在J2EE Web应用系统、J2EE Struts应用框架的应用系统及J2EE Struts2应用框架的应用系统等环境中如何应用FreeMarker模板技术实现Web页面静态化的应用效果。作者首先在下文为读者介绍在J2EE Web应用系统环境中如何应用FreeMarker模板技术。
5、在J2EE Web应用项目中添加一个JSP页面文件
(1)在Web项目的userManage目录下添加一个文件名称为fmtWebUserLogin.jsp的JSP页面文件,该页面主要功能是模拟用户系统登录,其中包含有一个标准的HTML表单,创建的过程参看如下示例图所示。
(2)fmtWebUserLogin.jsp页面文件的代码示例
<%@ page language="java" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>My JSP 'fmtUserLogin.jsp' starting page</title>
</head><body>
<form action="/Struts2Web/fmtServletAction" method="post" >
您的名称:<input type="text" name="userName" /> <br />
您的密码:<input type="password" name="userPassWord" /> <br />
<input type="submit" value="提交" name="submitButton" onclick="this.value='正在提交请求,请稍候'"/>
<input type="reset" value="取消" />
</form>
</body></html>
(3)fmtWebUserLogin.jsp页面静态预览的效果图如下图所示
6、在J2EE Web应用项目中添加一个Servlet组件
在J2EE Web应用系统中使用FreeMarker模板时,应该让J2EE Servlet组件来合并模板和数据。因此J2EE Servlet组件负责创建Configuration类型的对象实例,并负责合并模板和数据。
(1)程序包名称为com.px1987.struts2.servlet,类名称为FMTServletAction,创建的过程参看如下示例图所示。
(2)将J2EE Servlet组件的URL-Pattern设置为/fmtServletAction,创建的过程参看如下示例图所示。
(3)FMTServletAction程序类的代码示例
package com.px1987.struts2.servlet;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class FMTServletAction extends HttpServlet {
private Configuration oneConfiguration=null;
public FMTServletAction() {
super();
}
public void init() throws ServletException {
/** 初始化FreeMarker配置,并创建出一个Configuration的实例 */
oneConfiguration = new Configuration(); //设置FreeMarker的模版文件位置
oneConfiguration.setServletContextForTemplateLoading(getServletContext(),"userManage");
} //第一个参数是本web应用的 ServletContext,第二个参数是模板文件的路径
public void destroy() {
super.destroy();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String resultMessage=null;
String userName=request.getParameter("userName");
String userPassWord=request.getParameter("userPassWord");
boolean returnResult=userName.equals("yang") &&userPassWord.equals("1234");
if(returnResult){
resultMessage =userName+"您登录成功!";
}
else{
resultMessage =userName+"您的身份信息无效!";
}
Map oneHashMap = new HashMap();
oneHashMap.put("showResultInfo", resultMessage); //取得模版文件
Template oneTemplate= oneConfiguration.getTemplate("showInfoFMTTemplate.ftl");
response.setContentType("text/html; charset=gb2312");
Writer out = response.getWriter();
try{ //结果必须输出到HttpServletResponse中,才能被浏览器加载
oneTemplate.process(oneHashMap, out);
}
catch (TemplateException e){
throw new ServletException("加载FreeMarker的模板文件时出现了错误", e);
}
}
}
7、在J2EE Web应用项目中添加一个FreeMarker模板文件
(1)模板文件的名称为showInfoFMTTemplate.ftl,创建的过程参看如下示例图所示。
(2)模板文件showInfoFMTTemplate.ftl的代码示例如下,注意其中黑体标识的代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <title>showInfoTemplate.ftl</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
</head> <body>
<h2>采用标准的方式获得参数值: ${showResultInfo}</h2 > <br>
</body></html>
8、部署本Web项目并启动测试页面以验证本示例的功能
(1)正确地部署完毕本Web项目后,在浏览器的URL地址栏中输入如下示图中的访问地址,启动测试页面 ,执行的结果参看如下示例图所示。
(2)在测试页面的表单中模拟用户登录系统的状态,输入相关的登录参数后的执行结果参看如下示例图所示。
从本示例的执行结果来看,在showInfoFMTTemplate.ftl页面中同样也可以获得在传统的J2EE Web应用环境中一般由动态JSP类型的Web页面才能获得的动态结果数据,但本示例中的*.ftl页面是静态效果的Web页面。因此,最终实现和达到了"动态页面静态化"的高效响应的应用效果。
作者为了能够让读者进一步地理解"动态页面静态化"的应用效果,可以通过浏览结果页面相关的源程序从而确认最终是否为一个HTML格式的纯静态页面。读者可以在Web浏览器中右键单击,然后在弹出的快捷菜单项目中选择"查看源文件"的功能子菜单项目(参看如下示例图所示)。
将在Web浏览器中显示出用户当前正在浏览的Web页面的源代码,熟悉HTML语言的读者应该能够看懂其中的代码含义——全部为HTML格式的纯静态页面标签。
如何应用XML+XSLT+AJAX组合技术实现无刷新数据查询
应用XML+XSLT技术分离Web应用表示层数据和样式的实例
相关推荐
- 5款Syslog集中系统日志常用工具对比推荐
-
一、为何要集中管理Syslog?Syslog由Linux/Unix系统及其他网络设备生成,广泛分布于整个网络。因其包含关键信息,可用于识别网络中的恶意活动,所以必须对其进行持续监控。将Sys...
- 跨平台、多数据库支持的开源数据库管理工具——DBeaver
-
简介今天给大家推荐一个开源的数据库管理工具——DBeaver。它支持多种数据库系统,包括Mysql、Oracle、PostgreSQL、SLQLite、SQLServer等。DBeaver的界面友好...
- 强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)
-
NavicatPremium,一款集数据迁移、数据库管理、SQL/查询编辑、智能设计、高效协作于一体的全能数据库开发工具。无论你是MySQL、MariaDB、MongoDB、SQLServer、O...
- 3 年 Java 程序员还玩不转 MongoDB,网友:失望
-
一、什么场景使用MongoDB?...
- 拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南
-
作为一名在NoSQL丛林中披荆斩棘的数据猎人,没有比GUI工具更称手的瑞士军刀了。本文将带你围观五款主流MongoDB管理神器的特性与暗坑,附赠精准到扎心的吐槽指南一、MongoDBCompass:...
- mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
-
前言最近在做neo4j相关的同步处理,因为产线的可视化工具短暂不可用,发现写起来各种脚本非常麻烦。...
- solidworks使用心得,纯干货!建议大家收藏
-
SolidWorks常见问题...
- 统一规约-关乎数字化的真正实现(规范统一性)
-
尽管数字化转型的浪潮如此深入人心,但是,对于OPCUA和TSN的了解却又甚少,这难免让人质疑其可实现性,因为,如果缺乏统一的语义互操作规范,以及更为具有广泛适用的网络与通信,则数字化实际上几乎难以具...
- Elasticsearch节点角色配置详解(Node)
-
本篇文章将介绍如下内容:节点角色简介...
- 产前母婴用品分享 篇一:我的母婴购物清单及单品推荐
-
作者:DaisyH8746在张大妈上已经混迹很久了,有事没事看看“什么值得买”已渐渐成了一种生活习惯,然而却从来没有想过自己要写篇文章发布上来,直到由于我产前功课做得“太过认真”(认真到都有点过了,...
- 比任何人都光彩照人的假期!水润、紧致的肌肤护理程序
-
图片来源:谜尚愉快的假期临近了。身心振奋的休假季节。但是不能因为这种心情而失去珍贵的东西,那就是皮肤健康。炙热的阳光和强烈的紫外线是使我们皮肤老化的主犯。因此,如果怀着快乐的心情对皮肤置之不理,就会使...
- Arm发布Armv9边缘AI计算平台,支持运行超10亿参数端侧AI模型
-
中关村在线2月27日消息,Arm正式发布Armv9边缘人工智能(AI)计算平台。据悉,该平台以全新的ArmCortex-A320CPU和领先的边缘AI加速器ArmEthos-U85NPU为核心...
- 柔性——面向大规模定制生产的数字化实现的基本特征
-
大规模定制生产模式的核心是柔性,尤其是体现在其对定制的要求方面。既然是定制,并且是大规模的定制,对于制造系统的柔性以及借助于数字化手段实现的柔性,就提出了更高的要求。面向大规模定制生产的数字化业务管控...
- 创建PLC内部标准——企业前进的道路
-
作者:FrankBurger...
- 标准化编程之 ----------- 西门子LPMLV30测试总结
-
PackML乃是由OMAC开发且被ISA所采用的自动化标准TR88.00.02,能够更为便捷地传输与检索一致的机器数据。PackML的主要宗旨在于于整个工厂车间倡导通用的“外观和感觉”,...
你 发表评论:
欢迎- 一周热门
-
-
Linux:Ubuntu22.04上安装python3.11,简单易上手
-
宝马阿布达比分公司推出独特M4升级套件,整套升级约在20万
-
MATLAB中图片保存的五种方法(一)(matlab中保存图片命令)
-
别再傻傻搞不清楚Workstation Player和Workstation Pro的区别了
-
Linux上使用tinyproxy快速搭建HTTP/HTTPS代理器
-
如何提取、修改、强刷A卡bios a卡刷bios工具
-
Element Plus 的 Dialog 组件实现点击遮罩层不关闭对话框
-
日本组合“岚”将于2020年12月31日停止团体活动
-
SpringCloud OpenFeign 使用 okhttp 发送 HTTP 请求与 HTTP/2 探索
-
tinymce 号称富文本编辑器世界第一,大家同意么?
-
- 最近发表
-
- 5款Syslog集中系统日志常用工具对比推荐
- 跨平台、多数据库支持的开源数据库管理工具——DBeaver
- 强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)
- 3 年 Java 程序员还玩不转 MongoDB,网友:失望
- 拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南
- mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
- solidworks使用心得,纯干货!建议大家收藏
- 统一规约-关乎数字化的真正实现(规范统一性)
- Elasticsearch节点角色配置详解(Node)
- 产前母婴用品分享 篇一:我的母婴购物清单及单品推荐
- 标签列表
-
- dialog.js (57)
- importnew (44)
- windows93网页版 (44)
- yii2框架的优缺点 (45)
- tinyeditor (45)
- qt5.5 (60)
- windowsserver2016镜像下载 (52)
- okhttputils (51)
- android-gif-drawable (53)
- 时间轴插件 (56)
- docker systemd (65)
- slider.js (47)
- android webview缓存 (46)
- pagination.js (59)
- loadjs (62)
- openssl1.0.2 (48)
- velocity模板引擎 (48)
- pcre library (47)
- zabbix微信报警脚本 (63)
- jnetpcap (49)
- pdfrenderer (43)
- fastutil (48)
- uinavigationcontroller (53)
- bitbucket.org (44)
- python websocket-client (47)