1.简介:
SSI全称(Server Side Includes)是在HTML静态页面中使用的指令,当页面在服务端执行的时候是可以进行服务端解析的。这种方式可以让我们在存在的HTML页面里面分 块动态生成内容而不在整个执行了CGI等服务端技术的基础之上进行动态页面服务。在返回请求的页面(包含SSI指令)前,服务器会处理这些指令,并用处理 的结果替换指令,然后把页面返回。我们使用Tomcat作为Http服务器的时候,我们需要使用SSI可以在Tomcat添加对SSI的支持。
Tomcat服务器的SSI支持的实现方式和Apache里面的SSI指令一样,在Tomcat里面实现SSI支持使用的是一个 Servlet和一个Filter(Servlet和Filter的基本信息参考JSP教程),我们可以使用其中一种方式来进行SSI支持的配置,但是不 需要两个同时配置,同时配置是否会产生冲突我不太清楚,一般情况下配置一个就可以了。
实现SSI支持的Servlet实现使用了org.apache.catalina.ssi.SSIServlet,另外需要在Servlet的路径解析里面添加映射规则“*.shtml”。
实现SSI支持的Filter使用了org.apache.calalina.ssi.SSIFilter。另外,在Filter路径解析 里面也需要添加映射规则“*.shtml”,而且在Filter配置的时候需要在映射规则里面添加能够执行的mime type,contentType的初始化参数允许你执行服务器下边的资源。在Tomcat里面默认是禁用了SSI的。
注意:SSI指令执行Tomcat外部的JVM,如果我们使用Java的安全管理器需要在 calalina.policy文件里面进行配置。若要使用SSI Servlet和SSI Filter,直接在服务器的路径$CATALINA_BASE/conf/web.xml文件里面将SSI的注释去掉。需要注意的是在Tomcat服务 器里面仅仅只有标记了privileged的Context可以使用SSI功能。(*:当privileged设置为true的时候,才允许Tomcat 的Web应用使用容器内的Servlet,Tomcat的文档里面讲了使用的lib的域,每个应用程序如果不设置这个属性,是不能访问容器内的 Servlet的,这里应该指代的是全局的Servlet)
否则这里会遇到异常:
java.lang.SecurityException: Filter of class org.apache.catalina.ssi.SSIFilter(SSIServlet)is privileged and cannot be loaded by this web application
2.服务器配置属性:
在配置SSI Servlet的时候需要用到的参数(init parameters)如下:
buffered:是需要将输入保存到缓冲区(0=false,1=true)默认是0(false)
debue:配置调试日志的记录级别,默认0;
expires:SSI包含某个页面的超时配置,默认行为是所有的SSI指令在每一次请求中执行
isVirtualWebappRelative:是针对Tomcat Context的根目录(虚拟目录)进行相对路径解析还是针对Tomcat的服务器目录进行相对路径解析(0=false,1=true)默认是0,不使用虚拟目录。
inputEncoding:如果资源不是自身的,资源来自于容器外部,可以针对外部资源进行编码的设置,以什么变法方式输入资源,默认使用的是资源所在平台使用的编码。
outputEncoding:SSI执行结果输出的编码方式,默认是UTF-8的。
配置SSI Filter的时候需要使用以下参数(init paramters):
contextType:配置一个可以匹配的正则表达式规则提供给SSI执行使用,若自定义自己的匹配规 则,需要在mime 类型里面配置下边的可选项:在form里面设置“mime/type;charset=set”默认的是“text/x-server-parsed- html(;.*)?”
debug:同上
expires:同上
isVirtualWebappRelative:同上
3.指令描述:
SSI是被HTML文档内需要进行处理的包含部分的SSI Servlet调用的。这些指令是HTML文档的注释形式,这些指令在将内容发送到客户端之前进行内容的替换。标准格式如下:
<!--#directive [parm=value] -->
这些指令包括:
config:设置日期格式一起被SSI处理的其他数据(<!--#config timefmt="%B %Y" -->)
echo:将会被变量的值替换掉(<!--#echo var="VARIABLE_NAEM" -->)
exec:用来执行服务器端的命令
include:包含某些内容(<!--#include virtual="file-name" -->)
flastmod:返回某个文件最后一次修改的时间(<!--#flastmod file="filename.shtml" -->)
fsize:返回某个文件的大小(<!--#fzie file="filename.shtml" -->)
printenv:返回所有定义的变量(<!--#printenv -->)
set:用来为定义的变量赋值(<!--#set var="foo" value="Bar" -->)
if elif endif else:创建条件分支语句
4.SSI Servlet里面的变量如下:
AUTH_TYPE——针对用户的认证授权方式:BASIC,FORM,etc.和Tomcat内的认证方式同步
CONTENT_LENGTH——从服务器表单传过来的数据长度,字符数目或者数据的字节数
CONTENT_TYPE——服务器访问呢数据的MIME类型,比如“text/html”
DATE_GMT——目前的时间格式方式使用GMT
DATE_LOCAL——目前的时间格式方式设置成为本地时间格式
DOCUMENT_NAME——当前上下文环境的文件地址
DOCUMENT_URI——虚拟路径定义的文件地址
GATEWAY_INTERFACE——CGI的版本定义:“CGI/1.1”
HTTP_ACCEPT——一个客户端可以接受的MIME类型列表
HTTP_ACCEPT_ENCODING——客户端可以接受的压缩文件类型的列表
HTTP_ACCEPT_LANGUAGE——客户端可以支持的语言列表
HTTP_CONNECTION——管理客户端的连接:是“Close”还是“Keep-Alive”
HTTP_HOST——客户端请求的站点地址
HTTP_REFERER——客户端请求之前所在的URL地址
HTTP_USER_AGENT——客户使用的浏览器端的请求结果
LAST_MODIFIED——当前页面上一次访问和修改的时间
PATH_INFO——访问此Servlet的路径信息
PATH_TRANSLATED——PATH_INFO提供的translated版本
QUERY_STRING——在URL地址?之后的请求参数列表
QUERY_STRING_UNESCAPED——没有经过编码过的请求参数
REMOTE_ADDR——用户请求客户端IP地址
REMOTE_HOST——用户发送请求的主机名
REMOTE_PORT——用户发送请求的端口号
REMOTE_USER——认证授权需要的发送请求的用户名
REQUEST_METHOD——请求使用方法:GET或者POST
REQUEST_URI——客户端原来访问请求的Web页面的URI地址
SCRIPT_FILENAME——在服务器上当前页面的地址
SCRIPT_NAME——当前页面的名称
SERVER_ADDR——服务器所在的IP地址
SERVER_NAME——服务器的主机名或者IP地址
SERVER_PORT——服务器接受请求的端口号
SERVER_PROTOCOL——服务器处理请求的协议:“HTTP/1.1”
SERVER_SOFTWARE——服务器响应客户端请求的名称和版本号
UNIQUE_ID——一旦创建链接过后每一次会话由服务器分配的唯一会话标识(是不是SessionID?我不敢肯定,因为没有做过验证,有可能是有可能不是,不过有一点,此属性和直接和会话相关的。)
5.配置过程:
1).先保证Tomcat可以运行,即能够正常启动
2).(5.x版本)服务器根目录下边$TOMCAT_HOME(或者$CATALINA_HOME)/server/lib/目录下边有一个文件:
servlets-ssi.renametojar,将这个文件名更名为一个jar后缀,当然最方便的方法是直接改掉文件后缀,按照Tomcat扫描jar路径类的原理来讲,直接更名为jar应该也是可以的,不过我没尝试过,一般网上最常用的方法是改成:servlets-ssi.jar。(6.x版本)服务器不需要去寻找jar文件了,直接进入下一步操作都可以。
3).找到文件:$TOMCAT_HOME(或者$CATALINA_HOME)/conf/web.xml,这里面不需要我们自己写入SSI Servlet和SSI Filter的配置,首先我们要选择使用哪种方式来配置:
Servlet配置:
在这个文件里面,找到以下注释代码段,将注释代码段去掉:
Servlet配置——
<!--
<servlet>
<servlet-name>ssi</servlet-name>
<servlet-class>
org.apache.catalina.ssi.SSIServlet
</servlet-class>
<init-param>
<param-name>buffered</param-name>
<param-value>1</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>expires</param-name>
<param-value>666</param-value>
</init-param>
<init-param>
<param-name>isVirtualWebappRelative</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>4</load-on-startup>
</servlet>
-->
ServletMapping配置——
<!--
<servlet-mapping>
<servlet-name>ssi</servlet-name>
<url-pattern>*.shtml</url-pattern>
</servlet-mapping>
-->
Filter配置:
Filter的相关配置——
<!--
<filter>
<filter-name>ssi</filter-name>
<filter-class>
org.apache.catalina.ssi.SSIFilter
</filter-class>
<init-param>
<param-name>contentType</param-name>
<param-value>text/x-server-parsed-html(;.*)?</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>expires</param-name>
<param-value>666</param-value>
</init-param>
<init-param>
<param-name>isVirtualWebappRelative</param-name>
<param-value>0</param-value>
</init-param>
</filter>
-->
FilterMapping相关配置——
<!--
<filter-mapping>
<filter-name>ssi</filter-name>
<url-pattern>*.shtml</url-pattern>
</filter-mapping>
-->
只是Filter配置里面还需要取消另外一个注释,下边的MIME TYPE的服务器支持相关注释
<!--
<mime-mapping>
<extension>shtml</extension>
<mime-type>text/x-server-parsed-html</mime-type>
</mime-mapping>
-->
上边的注释取消过后,配置就基本好了,在Tomcat 5.x的版本中配置的时候,到这个地步就结束了,但是在Tomcat 6.x版本中可能还会出现下边的异常:
java.lang.SecurityException: Filter of class org.apache.catalina.ssi.SSIFilter(SSIServlet) is privileged and cannot be loaded by this web application
4).所以正对这点6.x还有一个步骤,在$TOMCAT_HOME(或者$CATALINA_HOME)/conf/context.xml 文件中在<Context>结点添加一个属性privileged="true",然后再启动就不会抛出上边的异常了。
5).若要解决乱码问题,根据上边文档需要修改SSI中的启动参数:添加如下代码:
<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>
上边参数已经描述详细了:
相关推荐
Server Side Include,通常称为服务器端嵌入,是一种类似于ASP的基于服务器的网页制作技术。大多数(尤其是基于Unix平台)的WEB服务器如Netscape Enterprise Server等均支持SSI命令。 为什么要用SSI 用个例子来说明...
Server Side Include proxy 支持proxy代理,用以实现 ajax 的跨域请求 安装 fedis 方式一: $ git clone https://github.com/gauliang/fedis.git $ cd fedis $ npm install $ gulp 方式二: npm
**SSI (Server Side Include) 技术** SSI(Server Side Include),全称为服务器端包含,是一种在静态HTML页面中嵌入动态内容的技术。它允许网页开发者在HTML文档中插入如时间戳、服务器变量、执行脚本等内容,而...
标题中的“SSI结合代码备份”指的是Server Side Include(SSI)技术与代码版本控制相结合的实践。SSI是一种在静态HTML文件中嵌入动态内容的技术,常用于网页更新和维护,而结合代码备份则意味着如何利用SSI来辅助...
SSI(Server Side Include)是一种在Web服务器端处理页面动态包含的技术。它允许网页开发者在HTML文件中嵌入服务器端的脚本或指令,以便在页面加载时动态地插入数据、执行计算或者引用其他资源。SSI主要应用于静态...
SSI 框架使用了 Server-Side Include(SSI)技术来实现服务器端的模板引擎。SSI 框架的配置文件主要包含了两个部分:模板配置和数据源配置。 SSI 框架的模板配置主要用于定义模板的结构和内容,而数据源配置则用于...
本文档主要介绍了SSL证书卸载和SSI(Server Side Include)高级应用,涵盖了SSI的定义、使用理由、制作责任人、包含处理等方面。 什么是SSI SSI(Server Side Include)是服务器端页面包含,工作在web服务器上,...
**SSI (Server Side Include) 技术详解** SSI(Server Side Include),即服务器端包含,是一种在静态HTML页面中嵌入动态内容的技术。它允许网页设计者在HTML文档中插入如时间戳、服务器变量、执行CGI脚本等动态...
**SSI(Server Side Include)简介** SSI,全称为Server Side Include,是一种服务器端的脚本语言,主要用于在HTML页面中动态插入服务器上的静态或动态内容。这种技术在Web开发早期非常流行,它允许开发者在不使用...
标题 "tomcat-ssi.rar_SSI" 暗示了这个压缩包与Tomcat服务器配置有关,特别是关于Server Side Include(SSI)的功能。SSI是一种在Web服务器端处理动态内容的技术,允许开发者在HTML页面中嵌入动态内容,如时间戳、...
【SSI(Server Side Include)技术详解】 SSI,全称服务器端包含(Server Side Include),是一种在Web服务器端处理网页内容的技术。它允许开发者在HTML文件中嵌入动态内容,如包含其他文件、执行脚本等,从而简化...
"ssi.zip_SSI" 指示这是一个与SSI(Server Side Include)相关的压缩包,可能包含一个简化版的SSI框架,用于教学目的。SSI是一种服务器端脚本语言,允许在HTML文件中嵌入动态内容,如时间戳、文件包含等。 **描述...
SSH(Secure Shell)是一种网络协议,用于安全地远程登录到服务器进行管理操作,而SSI(Server Side Include)是一种早期的Web服务器技术,允许在静态HTML页面中嵌入动态内容。 **SSH(Secure Shell)** SSH主要...
SSI(Server Side Include),全称为服务器端包含,是一种在Web服务器端处理动态内容的技术,它允许HTML文件中嵌入其他文件或执行简单的脚本。在Java环境下,我们可以使用各种框架来实现SSI功能,以提高网站的开发...
SSI(Server Side Include)是一种在Web服务器端处理的页面包含技术,它允许开发者在HTML页面中插入动态内容,如服务器端脚本、文本、图像等。这个压缩包包含的是一系列用于SSI框架开发的jar包,这些jar包是构建基于...
"一个简单的SSI模板" 指的可能是服务器端包含(Server Side Include,简称SSI)技术的一种简单应用。SSI是一种在静态HTML页面中嵌入动态内容的简单方法,它允许开发者通过在HTML文件中加入特定的指令来执行服务器端...
**服务端包含(SSI,Server Side Include)技术详解与实战案例** 服务端包含(SSI,Server Side Include)是一种早期的Web开发技术,主要用于在HTML页面中动态插入其他文件内容,如文本、图像、脚本等,以实现部分...
SSI(Server Side Include)是一种网页开发技术,常用于在HTML页面中嵌入动态内容,比如时间戳、服务器信息或者外部文件。在这个实例中,我们将会探讨如何在使用MySQL数据库的环境中实现SSI功能,并结合IBatis这个...
#include> 3.显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等) 4.直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序) 5.设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式...