在实际的应用中,如果页面只需显示极少的信息(服务器环境信息,WEB文档相关信息等等),我们为此专门写一个程序显然太耗精力。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"/>标签。
目前主流web服务器都提供了SSI实现,我们只需要打开SSI功能就可以使用。步骤如下(以Tomcat5.5为例):
1. 将$CATALINA_HOME/server/lib/servlets-ssi.renametojar的名称改为servlets-ssi.jar
2. 设置$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"/>
3. 在$CATALINA_HOME/ conf/web.xml开启SSI的功能,Tomcat提供了两种开启SSI的方式:一种是servlet,另一种是filter。这里我们使用Servlet开启SSI功能。如:
<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-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>百姓养生堂</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指令的时候,必须遵循它的格式。
1. 程序代码:
<!--#指令名称="指令参数“ -->
2. 示例:
<!--#include file="foot.html"-->
3. 说明:
<!-- -->是HTML语法中表示注释,当WEB服务器不支持SSI时,会忽略这些信息。
#include 为SSI指令之一。
file 为include的参数, foot.htm为参数值,在本指令中指将要包含的文档名。
4. 注意:
<!--与#号间无空格,只有SSI指令与参数间存在空格。
上面的标点="",一个也不能少。
SSI指令是大小写敏感的,因此参数必须是小写才会起作用。
------------------------------------------------
#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的文件大小入到当前页面
#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>
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" -->
#set指令
作用:可给变量赋值,以用于后面的if语句。
语法:
<!--#set var="变量名" value="变量值"-->
示例:
<!--#set var=“varname" value=“liming"-->
#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"-->
注意:用于前面指令中的反斜杠,是用来代换内部的引号,以便它们不会被解释为结束表达式。不可省略。