(1)Web页面静态化技能

将JSP动态页面按照某种模板格式天生对应的.html纯静态Web页面的过程,称之为Web页面静态化技能。

(2)何种场合须要运用Web页面静态化技能

jsp图片预览若何运用Web页面静态化技巧以进步Web运用体系的响应机能 Node.js

当有些企业运用系统中的页面信息在一段韶光内不发生变革时(比如内容管理系统、网上商城中的商品信息等),可以运用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运用表示层数据和样式的实例

如何运用“XML+XSLT”技能分离Web表示层数据和样式

课程设计辅导——运用AJAX技能提高Web运用的整体相应性能

如何在Web运用系统表示层开拓中运用Velocity模板技能