Tomcat中SSI的配置

转篇CSDN上的关于SSI的博,有些地方总结的非常不错。

转自:http://blog.csdn.net/silentbalanceyh/archive/2008/12/04/3444239.aspx

 

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 创建条件分支语句

Apache SSI官方文档

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>

上边参数已经描述详细了:

6. 总结:

  关于 Tomcat 环境下边的 SSI 的配置我就整理了这些,有什么有疑问的地方或者语法错误请指点,来信: silentbalanceyh@126.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值