您的位置:首页 > 其它

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