首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Apache Tomcat SSI (Server Side Includes) 啟用與配置完整指南

     編輯:Java 相關知識

Tomcat 內建支援 SSI (`.shtml`),可在靜態頁面嵌入動態片段 (導航欄、頁腳、計數器等),無需完整 JSP/Servlet 開銷。本文涵蓋 Servlet/Filter 兩種啟用方式、參數配置、指令語法與安全限制。

啟用方式二選一 (修改 $CATALINA_BASE/conf/web.xml)

方式 A:SSIServlet (傳統)

<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>
<servlet-mapping>
    <servlet-name>ssi</servlet-name>
    <url-pattern>*.shtml</url-pattern>
</servlet-mapping>

方式 B:SSIFilter (推薦,支援靜態資源同步處理)

<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>
</filter>
<filter-mapping>
    <filter-name>ssi</filter-name>
    <url-pattern>*.shtml</url-pattern>
</filter-mapping>

關鍵初始化參數

參數預設說明
buffered01=緩衝輸出再發送,0=直接流式
debug0日誌級別 (0-99)
expires-1SSI include 快取秒數,-1=每請求重解析
isVirtualWebappRelative01=虛擬目錄相對路徑,0=Server 根相對
inputEncoding平台預設外部 include 資源輸入編碼
outputEncodingUTF-8輸出編碼

SSI 指令速查

<!--#config timefmt="%Y-%m-%d" -->          設定時間格式
<!--#echo var="DATE_LOCAL" -->              輸出變數
<!--#include virtual="/common/header.html" --> 包含檔案 (virtual=WebApp 相對, file=檔案系統相對)
<!--#flastmod virtual="/foo.html" -->       檔案最後修改時間
<!--#fsize virtual="/foo.html" -->          檔案大小
<!--#printenv -->                          列印所有環境變數
<!--#set var="name" value="value" -->       設定變數
<!--#if expr="$var = 'value'" -->...<!--#endif --> 條件判斷

安全限制 (重要)

  • **僅 privileged="true" 的 Context 可用 SSI** (防止惡意 WebApp 存取容器內部 Servlet)。
  • Context 配置:<Context privileged="true" ...> (在 server.xml 或 META-INF/context.xml)。
  • 若報 SecurityException: Filter ... is privileged → 確認 Context 權限。
  • 使用 Java SecurityManager 時,需在 catalina.policy 授權 SSI Servlet/Filter 權限。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved