SSI-服务端包含技术
2014-09-22 20:40
190 查看
一.什么是SSI?
SSI(Server Side Include),通常称为“服务器端包含”技术。使用了SSI技术的文件默认的后缀名为.shtml,
SSI技术通过在html文件中加入SSI指令让web服务器在输出标准HTML代码之前先解释SSI指令,
并把解释完后的输出结果和HTML代码一起返回给客户端。
在大部分份的项目中,我们主要使用了SSI中的包含指令<!--#include virtual="/global/foot.jsp" -->,
他的作用类似于JSP中的<jsp:include page="/global/foot.jsp"/>标签。
二.为何要使用SSI?
既然JSP中的<jsp:include page=“/global/foot.jsp”/>标签也提供了类似的功能,为何我们要使用SSI技术?
主要是因为以下两点:
1.首先SSI技术是通用技术,它不受限于运行环境,在java、dotnet、CGI、ASP、PHP下都可以使用SSI技术。
2.解释SSI的效率比解释JSP的效率快很多,因为JSP规范提供了太多的功能,这些功能都需要servlet引擎一一进行解释,所以效率比较低。
在目前,大部分的门户网站都使用了SSI技术。解释SSI文件最佳的服务器是Apache Server。
大型门户网站基本上都是采用Apache Server来解释SSI文件,巴巴运动网也是采用了Apache Server来解释SSI文件。
三、配置使用SSI?
目前主流的web服务器都提供了SSI实现,我们只需要打开SSI功能就可以使用。
下面我们就介绍在Tomcat5.5下如何使用SSI技术:
第一步:把$CATALINA_HOME/server/lib/servlets-ssi.renametojar的名称改为servlets-ssi.jar
第二步:设置$CATALINA_HOME/conf/context.xml文件,在<Context>节点添加privileged="true"属性,
该属性指定我们发布的web应用有权限使用容器的servlet。当你如果需要在$CATALINA_HOME/conf/server.xml添加其它web应用时,
最好也为<Context>加上privileged="true"属性,如下:
<Context debug="0" path="" docBase="E:\website" privileged="true"/>
第三步:在$CATALINA_HOME/ conf/web.xml开启SSI的功能,Tomcat提供了两种开启SSI的方式:一种是servlet,另一种是filter。
这里我们使用Servlet开启SSI功能。
在$CATALINA_HOME/ conf/web.xml文件中找到<servlet-name>ssi</servlet-name> ,把对该Servlet的注释去掉,
然后根据shtml文件的编码格式指定inputEncoding 和outputEncoding 属性值,代码见下页。
<servlet>
<servlet-name>ssi</servlet-name>
<servlet-class>org.apache.catalina.ssi.SSIServlet</servlet-class>
这里省略了一些代码
<init-param>
<param-name>inputEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>outputEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<load-on-startup>4</load-on-startup>
</servlet>
当打开了上面servlet的注释之后,我们别忘了也要<servlet-mapping>的注释去掉,如:
<servlet-mapping>
<servlet-name>ssi</servlet-name>
<url-pattern>*.shtml</url-pattern>
</servlet-mapping>
四、SSI例子?
main.shtml内容
<html xmlns="http://www.w3.org/1999/xhtml"><HEAD>
<TITLE>测试SSI</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>
<BODY>
<!--#include file="head.jsp" -->
<br>中部<br>
<!--#include file="foot.html" -->
</BODY></html>
head.jsp内容:
<%@ page language="java" pageEncoding="UTF-8"%>
这是头部
foot.html内容:
这是尾部
----------------------------------------------------------------------------------------------------------------------------------------
一、SSI指令基本格式?
程序代码:
<!--#指令名称="指令参数“ -->
示例:
<!--#include file="foot.html"-->
说明:
<!-- -->是HTML语法中表示注释,当WEB服务器不支持SSI时,会忽略这些信息。
#include 为SSI指令之一。
file 为include的参数, foot.htm为参数值,在本指令中指将要包含的文档名。
注意:
<!--与#号间无空格,只有SSI指令与参数间存在空格。
上面的标点="",一个也不能少。
SSI指令是大小写敏感的,因此参数必须是小写才会起作用。
#include 示范
作用:将文本文件的内容直接插入到文档页面中。
语法:
<!--#include file="文件名称"-->
<!--#include virtual="文件名称"-->
file 文件名是一个相对路径,该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中,
但不能在上一级目录中。如表示当前目录下的head.jsp文档,则为<!--#include file="head.jsp" -->。
virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下global目录下的foot.html文件;
则为<!--#include virtual="/global/foot.html" -->
参数:
file 指定包含文件相对于本文档的位置
virtual 指定相对于服务器文档根目录的位置
注意:
文件名称必须带有扩展名。
被包含的文件可以具有任何文件扩展名。
二、SSI指令-- #flastmod 和 #fsize?
#flastmod 和 #fsize 示范
作用:
#flastmod 文件最近更新日期
#fsize 文件的长度
语法:
<!--#flastmod file="文件名称"-->
<!--#fsize file="文件名称"-->
参数:
file 指定包含文件相对于本文档的位置
virtual 指定相对于服务器文档根目录的位置 如 /global/foot.html 表示
注意:文件名称必须带有扩展名。
示例:
<!--#flastmod file="foot.html"-->将当前目录下foot.html文件的最近更新日期插入到当前页面
<!--#fsize file="foot.html"-->将当前目录下news.html的文件大小入到当前页面
三、SSI指令-- #echo?
#echo 示范
作用:将环境变量插入到页面中。
语法:
<!--#echo var="变量名称"-->
示例:
本文档名称:<!--#echo var="DOCUMENT_NAME"--> <br>
你的IP地址:<!--#echo var="REMOTE_ADDR"--> <br>
显示当前文档的虚拟路径:<!--#echo var="DOCUMENT_URI" -->
QUERY_STRING_UNESCAPED:显示未经转义处理的由客户端发送的查询字串,其中所有的特殊字符前面都有转义符"\"。
例如:<!--#echo var="QUERY_STRING_UNESCAPED" -->
<!--#config timefmt="%Y-%m-%d %a %H:%M:%S"-->
现在时间:<!--#echo var="DATE_LOCAL"--> <br>
四、SSI指令-- #set指令?
#set
作用:可给变量赋值,以用于后面的if语句。
语法:
<!--#set var="变量名" value="变量值"-->
示例:
<!--#set var=“varname" value=“lihuoming"-->
五、SSI指令-- #if指令?
#if
作用:创建可以改变数据的页面,这些数据根据使用if语句时计算的要求予以显示。
语法:
<!--#if expr="$变量名=\"变量值A\""-->
显示内容
<!--#elif expr="$变量名=\"变量值B\""-->
显示内容
<!--#else-->
显示内容
<!--#endif"-->
示例:
<!--#set var="varname" value="b"-->
<!--#if expr="$varname=\"a\""-->
A。
<!--#elif expr="$varname=\"b\"" -->
B。
<!--#else-->
other
<!--#endif"-->
注意:用于前面指令中的反斜杠,是用来代换内部的引号,以便它们不会被解释为结束表达式。不可省略。
六、SSI指令-- Echo 命令?
echo命令还可以显示以下环境变量:
SERVER_SOFTWARE:显示服务器软件的名称和版本。例如:
<!--#echo var="SERVER_SOFTWARE" --><br>
SERVER_NAME: 显示服务器的主机名称,DNS别名或IP地址。例如:
<!--#echo var="SERVER_NAME" --><br>
SERVER_PROTOCOL:显示客户端请求所使用的协议名称和版本,如HTTP/1.0。例如:
<!--#echo var="SERVER_PROTOCOL" --><br>
SERVER_PORT:显示服务器的响应端口。例如:
<!--#echo var="SERVER_PORT" --><br>
REQUEST_METHOD:显示客户端的文档请求方法,包括GET, HEAD, 和POST。例如:
<!--#echo var="REQUEST_METHOD" --><br>
REMOTE_HOST:显示发出请求信息的客户端主机名称。
<!--#echo var="REMOTE_HOST" --><br>
REMOTE_ADDR:显示发出请求信息的客户端IP地址。
<!--#echo var="REMOTE_ADDR" --><br>
AUTH_TYPE:显示用户身份的验证方法。
<!--#echo var="AUTH_TYPE" --><br>
REMOTE_USER:显示访问受保护页面的用户所使用的帐号名称。
<!--#echo var="REMOTE_USER" -->
SSI(Server Side Include),通常称为“服务器端包含”技术。使用了SSI技术的文件默认的后缀名为.shtml,
SSI技术通过在html文件中加入SSI指令让web服务器在输出标准HTML代码之前先解释SSI指令,
并把解释完后的输出结果和HTML代码一起返回给客户端。
在大部分份的项目中,我们主要使用了SSI中的包含指令<!--#include virtual="/global/foot.jsp" -->,
他的作用类似于JSP中的<jsp:include page="/global/foot.jsp"/>标签。
二.为何要使用SSI?
既然JSP中的<jsp:include page=“/global/foot.jsp”/>标签也提供了类似的功能,为何我们要使用SSI技术?
主要是因为以下两点:
1.首先SSI技术是通用技术,它不受限于运行环境,在java、dotnet、CGI、ASP、PHP下都可以使用SSI技术。
2.解释SSI的效率比解释JSP的效率快很多,因为JSP规范提供了太多的功能,这些功能都需要servlet引擎一一进行解释,所以效率比较低。
在目前,大部分的门户网站都使用了SSI技术。解释SSI文件最佳的服务器是Apache Server。
大型门户网站基本上都是采用Apache Server来解释SSI文件,巴巴运动网也是采用了Apache Server来解释SSI文件。
三、配置使用SSI?
目前主流的web服务器都提供了SSI实现,我们只需要打开SSI功能就可以使用。
下面我们就介绍在Tomcat5.5下如何使用SSI技术:
第一步:把$CATALINA_HOME/server/lib/servlets-ssi.renametojar的名称改为servlets-ssi.jar
第二步:设置$CATALINA_HOME/conf/context.xml文件,在<Context>节点添加privileged="true"属性,
该属性指定我们发布的web应用有权限使用容器的servlet。当你如果需要在$CATALINA_HOME/conf/server.xml添加其它web应用时,
最好也为<Context>加上privileged="true"属性,如下:
<Context debug="0" path="" docBase="E:\website" privileged="true"/>
第三步:在$CATALINA_HOME/ conf/web.xml开启SSI的功能,Tomcat提供了两种开启SSI的方式:一种是servlet,另一种是filter。
这里我们使用Servlet开启SSI功能。
在$CATALINA_HOME/ conf/web.xml文件中找到<servlet-name>ssi</servlet-name> ,把对该Servlet的注释去掉,
然后根据shtml文件的编码格式指定inputEncoding 和outputEncoding 属性值,代码见下页。
<servlet>
<servlet-name>ssi</servlet-name>
<servlet-class>org.apache.catalina.ssi.SSIServlet</servlet-class>
这里省略了一些代码
<init-param>
<param-name>inputEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>outputEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<load-on-startup>4</load-on-startup>
</servlet>
当打开了上面servlet的注释之后,我们别忘了也要<servlet-mapping>的注释去掉,如:
<servlet-mapping>
<servlet-name>ssi</servlet-name>
<url-pattern>*.shtml</url-pattern>
</servlet-mapping>
四、SSI例子?
main.shtml内容
<html xmlns="http://www.w3.org/1999/xhtml"><HEAD>
<TITLE>测试SSI</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>
<BODY>
<!--#include file="head.jsp" -->
<br>中部<br>
<!--#include file="foot.html" -->
</BODY></html>
head.jsp内容:
<%@ page language="java" pageEncoding="UTF-8"%>
这是头部
foot.html内容:
这是尾部
----------------------------------------------------------------------------------------------------------------------------------------
一、SSI指令基本格式?
程序代码:
<!--#指令名称="指令参数“ -->
示例:
<!--#include file="foot.html"-->
说明:
<!-- -->是HTML语法中表示注释,当WEB服务器不支持SSI时,会忽略这些信息。
#include 为SSI指令之一。
file 为include的参数, foot.htm为参数值,在本指令中指将要包含的文档名。
注意:
<!--与#号间无空格,只有SSI指令与参数间存在空格。
上面的标点="",一个也不能少。
SSI指令是大小写敏感的,因此参数必须是小写才会起作用。
#include 示范
作用:将文本文件的内容直接插入到文档页面中。
语法:
<!--#include file="文件名称"-->
<!--#include virtual="文件名称"-->
file 文件名是一个相对路径,该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中,
但不能在上一级目录中。如表示当前目录下的head.jsp文档,则为<!--#include file="head.jsp" -->。
virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下global目录下的foot.html文件;
则为<!--#include virtual="/global/foot.html" -->
参数:
file 指定包含文件相对于本文档的位置
virtual 指定相对于服务器文档根目录的位置
注意:
文件名称必须带有扩展名。
被包含的文件可以具有任何文件扩展名。
二、SSI指令-- #flastmod 和 #fsize?
#flastmod 和 #fsize 示范
作用:
#flastmod 文件最近更新日期
#fsize 文件的长度
语法:
<!--#flastmod file="文件名称"-->
<!--#fsize file="文件名称"-->
参数:
file 指定包含文件相对于本文档的位置
virtual 指定相对于服务器文档根目录的位置 如 /global/foot.html 表示
注意:文件名称必须带有扩展名。
示例:
<!--#flastmod file="foot.html"-->将当前目录下foot.html文件的最近更新日期插入到当前页面
<!--#fsize file="foot.html"-->将当前目录下news.html的文件大小入到当前页面
三、SSI指令-- #echo?
#echo 示范
作用:将环境变量插入到页面中。
语法:
<!--#echo var="变量名称"-->
示例:
本文档名称:<!--#echo var="DOCUMENT_NAME"--> <br>
你的IP地址:<!--#echo var="REMOTE_ADDR"--> <br>
显示当前文档的虚拟路径:<!--#echo var="DOCUMENT_URI" -->
QUERY_STRING_UNESCAPED:显示未经转义处理的由客户端发送的查询字串,其中所有的特殊字符前面都有转义符"\"。
例如:<!--#echo var="QUERY_STRING_UNESCAPED" -->
<!--#config timefmt="%Y-%m-%d %a %H:%M:%S"-->
现在时间:<!--#echo var="DATE_LOCAL"--> <br>
四、SSI指令-- #set指令?
#set
作用:可给变量赋值,以用于后面的if语句。
语法:
<!--#set var="变量名" value="变量值"-->
示例:
<!--#set var=“varname" value=“lihuoming"-->
五、SSI指令-- #if指令?
#if
作用:创建可以改变数据的页面,这些数据根据使用if语句时计算的要求予以显示。
语法:
<!--#if expr="$变量名=\"变量值A\""-->
显示内容
<!--#elif expr="$变量名=\"变量值B\""-->
显示内容
<!--#else-->
显示内容
<!--#endif"-->
示例:
<!--#set var="varname" value="b"-->
<!--#if expr="$varname=\"a\""-->
A。
<!--#elif expr="$varname=\"b\"" -->
B。
<!--#else-->
other
<!--#endif"-->
注意:用于前面指令中的反斜杠,是用来代换内部的引号,以便它们不会被解释为结束表达式。不可省略。
六、SSI指令-- Echo 命令?
echo命令还可以显示以下环境变量:
SERVER_SOFTWARE:显示服务器软件的名称和版本。例如:
<!--#echo var="SERVER_SOFTWARE" --><br>
SERVER_NAME: 显示服务器的主机名称,DNS别名或IP地址。例如:
<!--#echo var="SERVER_NAME" --><br>
SERVER_PROTOCOL:显示客户端请求所使用的协议名称和版本,如HTTP/1.0。例如:
<!--#echo var="SERVER_PROTOCOL" --><br>
SERVER_PORT:显示服务器的响应端口。例如:
<!--#echo var="SERVER_PORT" --><br>
REQUEST_METHOD:显示客户端的文档请求方法,包括GET, HEAD, 和POST。例如:
<!--#echo var="REQUEST_METHOD" --><br>
REMOTE_HOST:显示发出请求信息的客户端主机名称。
<!--#echo var="REMOTE_HOST" --><br>
REMOTE_ADDR:显示发出请求信息的客户端IP地址。
<!--#echo var="REMOTE_ADDR" --><br>
AUTH_TYPE:显示用户身份的验证方法。
<!--#echo var="AUTH_TYPE" --><br>
REMOTE_USER:显示访问受保护页面的用户所使用的帐号名称。
<!--#echo var="REMOTE_USER" -->
相关文章推荐
- SSI服务端包含技术
- apache 开启服务器包含(SSI)技术
- ssi静态包含技术总结
- 服务器端包含、嵌入技术SSI(Server SideInc lude)详解
- Apache的SSI(服务端包含)
- Apache的服务端包含--SSI
- Atitit Server Side Include ssi服务端包含规范 csi esi
- Atitit Server Side Include ssi服务端包含规范 csi esi
- 服务端技术进阶(五)分布式系统解决之道:目录、消息队列、事务系统及其他
- 服务端开发,使用的主流技术框架
- SSI技术
- 【问底】夏俊:深入网站服务端技术(一)——网站并发的问题
- LigerUI Grid服务端分页技术
- 如何提高Web服务端并发效率的异步编程技术
- 【Android】如何配合服务端实现防盗链技术
- Node.js后台服务端技术入门
- ASP.NET Core2利用Jwt技术在服务端实现对客户端的身份认证
- 服务端技术进阶(二)JBoss和tomcat的区别
- 以网游服务端的网络接入层设计为例,理解实时通信的技术挑战