闵毓
http://www.eshoo.com.cn 欢迎来到异客中国
posts - 49,comments - 97,trackbacks - 0

一、介绍:
  SSI是Server Side Includes的缩写,是嵌入到HTML页面的一组指令的集合。在返回请求的页面(包含SSI指令)前,服务器会处理这些指令,并用处理的结果替换指令,然  后把页面返回。这样就允许在HTML页面中添加动态产生的内容。
  SSI是向页面中添加小的信息片段的很好的方法。如果页面的大部分都是产生的则需要选择其它的解决方案。
二、主要用途
  目前,主要有以下几种用用途:
  1、显示服务器端环境变量<#echo>
  2、将文本内容直接插入到文档中<#include>
  3、显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等)
  4、直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序)
  5、设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式) 高级SSI<XSSI>可设置变量使用if条件语句。
三、设置Tomcat
     Tomcat对SSI提供了支持,但在默认的情况下这种支持是关闭的。如果你用Tomcat做为HTTP服务器并且需要SSI,那么需要自己来设置。

四、设置方法如下:

        在$CATALINA_BASE/server/lib/目录下找到servlets-ssi.renametojar文件 
        将这个文件重命名为servlets-ssi.jar 
        在$CATALINA_BASE/conf/目录下找到web.xml文件 
        使用SSI Servlet就删除在SSI servlet和servlet-mapping周围的注释 
        使用SSI filter就删除在SSI filter和filter-mapping周围的注释

五、基本指令
       1、SSI指令的语法格式如下:
           <!--#element [attribute=value] [attribute=value] ... -->
              这些指令以HTML注释的形式出现,所以如果你没有正确设置SSI,浏览器会忽略这些指令。如果你正确设置了SSI,这些指令会被相应的结果替换。
       2、config
           <!--#config timefmt="%B %Y" -->
           config用来指定返回给客户端浏览器的错误信息、日期和文件大小的格式。
        常用指令:
           <!--#config errmsg="自定义错误信息"--> 
           <!--#config sizefmt="显示单位"--> 
           <!--#config timefmt="显示格式"--> 
        参数: 
            errmsg 自定义SSI执行错误信息,可以为任何你喜欢的方式。 
            sizefmt 文件大小显示方式,默认为字节方式("bytes")可以改为千字节方式("abbrev") 
            timefmt 时间显示方式,最灵活的配置属性。 
        Eg:
            <!--#config errmsg="服务器执行错误,请联系管理员 yiho@126.com,谢谢!"--> 
            <!--#fsize file="不存在的文件.htm"-->

            以千字节方式显示文件大小 
            <!--#config sizefmt="abbrev"--> 
            <!--#fsizefile="news.htm"--> 
           以特定的时间格式显示时间
   <!--#config timefmt="%Y年/%m月%d日 星期%W 北京时间%H:%M:%s,%Y年已过去了%j天 今天是%Y年的第%U个星期"-->
   <!--#echo var="DATE_LOCAL"--> 显示今天是星期几,几月,时区
   <!--#config timefmt="今天%A, %B ,服务器时区是 %z,是"-->
   <!--#echo var="DATE_LOCAL"-->   
 3、echo
   echo用来输出变量的值。
    <!--#echo var="VARIABLE_NAME" -->
    <!--#echo var="变量名称"-->
   本文档名称:程序代码:
    <!--#echo var="DOCUMENT_NAME"-->
   现在时间:程序代码:
    <!--#echo var="DATE_LOCAL"-->
   你的IP地址是程序代码:
    <!--#echo var="REMOTE_ADDR"-->
 4、exec
  <!--#exec cmd="COMMOND" -->
  exec用来执行命令。 将某一外部程序的输出插入到页面中。可插入CGI程序或者是常规应用程序的输入,这取决于使用的参数是cmd还是cgi。
   <!--#exec cmd="文件名称"-->
   <!--#exec cgi="文件名称"-->
   <!--#exec cmd="文件名称"-->
   <!--#exec cgi="文件名称"-->
  参数:
   cmd 常规应用程序
   cgi CGI脚本程序
  Eg:
   <!--#exec cmd="cat /etc/passwd"-->将会显示密码文件
   <!--#exec cmd="dir /b"-->将会显示当前目录下文件列表
   <!--#exec cgi="/cgi-bin/gb.cgi"-->将会执行CGI程序gb.cgi。
   <!--#exec cgi="/cgi-bin/access_log.cgi"-->将会执行CGI程序access_log.cgi。
  注意:
   从上面的示例可以看出,这个指令相当方便,但是也存在安全问题。
  禁止方法:
   .Apache,将access.conf中的"Options Includes ExecCGI"这行代码删除;
   .在IIS中,要禁用 #exec 命令,可修改 SSIExecDisable 元数据库;  
 5、flastmod
  <!--#flastmod file="FILE_NAME" -->
  flastmod返回FILE_NAME所代表的文件的最后修改时间。
  Eg:
   <!--#flastmod file="news.htm"-->
    将当前目录下news.htm文件的最近更新日期插插入到当前页面
 6、fsize
  <!--#fsize file="FILE_NAME" -->
  fsize返回FILE_NAME所代表的文件的大小。
  <!--#flastmod file="文件名称"-->
  <!--#fsize file="文件名称"-->
  参数:
   file 指定包含文件相对于本文档的位置 如 info.txt 表示当前目录下的的info.txt文档
   virtual 指定相对于服务器文档根目录的位置 如 /hoyi/info.txt 表示
  注意:
   文件名称必须带有扩展名。
  Eg: 
   <!--#fsize file="news.htm"-->
    将当前目录下news.htm的文件大小入到当前页面
 7、include
  <!--#include file="文件名称"-->
  <!--#include virtual="文件名称"-->
  include插入FILE_NAME所代表的文件的内容。
  file 文件名是一个相对路径,该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中,但不能在上一级目录中。如表示当前目  录下的的nav_head.htm文档,则为file="nav_head.htm"。
  virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hoyi目录下的nav_head.htm文件;则为file="/hoyi/nav_head.htm"
  参数:
   file 指定包含文件相对于本文档的位置
   virtual 指定相对于服务器文档根目录的位置
  注意:
   1、文件名称必须带有扩展名。
   2、被包含的文件可以具有任何文件扩展名,我觉得直接使用htm扩展名最方便
 8、printenv
  <!--#printenv -->
   printenv返回所有定义的变量的列表。
 9、set
  <!--#set var="VARIABLE_NAME" value="VARIABLE_VALUE" -->
  set用来自定义变量。在SSI中有许多标准的变量(如DATE_LOCAL),其中也包括对于CGI程序有效的环境变量。
 10、if elif endif else
  if elif endif else用来条件选择。
  #if
  作用: 创建可以改变数据的页面,这些数据根据使用if语句时计算的要求予以显示。
    语法: 程序代码:
   <!--#if expr="$变量名="变量值A""-->
   显示内容
    <!--#elif expr="$变量名="变量值B""-->
   显示内容
    <!--#else-->
   显示内容
    <!--#endif"-->
   Eg:
    <!--#if expr="$SERVER_NAME="hoyi.zb169.net""-->
     中华E搜网http://www.eshoo.com.cn
    <!--#elif expr="$SERVER_NAME="linux.cqi.com.cn"" -->
     中华E搜网http://www.eshoo.com.cn/bbs
    <!--#else-->
     中华E搜网http://www.eshoo.com.cn
    <!--#endif"-->
注意: 用于前面指令中的反斜杠,是用来代换内部的引号,以便它们不会被解释为结束表达式。不可省略。
  
六、普通用法
 1、下面是一些比较常规的SSI的用法:
  最后修改时间
   有两种方法:
   This file last modified <!--#flastmod file="ssi.shtml" -->
   This file last modified <!--#echo var="LAST_MODIFIED" -->
  包含一个footer
   <!--#include virtual="/footer.html" -->
  设置errmsg
   <!--#config errmsg="[error message!]" -->
  设置sizefmt
   <!--#config sizefmt="bytes|abbrev" -->
  执行命令
  <!--#exec cmd="dir" -->
 2、高级SSI
  XSSI(Extended SSI)是一组高级SSI指令,内置于Apache 1.2或更高版本的mod-include模块之中。
   其中可利用的的指令有:
   <!--#printenv-->
   <!--#printenv-->
   <!--#printenv-->
   <!--#printenv-->
  作用: 显示当前存在于WEB服务器环境中的所有环境变量。
  (1)#set
   作用:可给变量赋值,以用于后面的if语句。
   语法:程序代码:
     <!--#set var="变量名"value="变量值"-->
   参数:无
   示例: 程序代码:
    <!--#set var="color"value="红色"-->
    SSI允许自定义变量,这些变量可以用来进行比较和条件判断。
   定义变量
    <!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->
   条件表达式
    <!--#if expr="test_condition" -->
    <!--#elif expr="test_condition" -->
     <!--#else -->
    <!--#endif -->

posted on 2006-04-30 15:29 闵毓 阅读(3384) 评论(0)  编辑  收藏 所属分类: 其他

只有注册用户登录后才能发表评论。


网站导航: