首页 > 学院 > 开发设计 > 正文

【转】 SSI(Server Side Includeds)使用详解

2019-11-14 21:00:49
字体:
来源:转载
供稿:网友
【转】 SSI(Server Side Includeds)使用详解

SSI使用入门:

什么是SSI技术?

SSI(ServeSideIncludes),通常称之为服务器端包含,使用SSI技术文件默认的后缀名为.shtml,SSI技术通过在html文件中加入SSI指令,让服务器端在输出html之前解释SSI指令,并把解释完的结果和html代码一同输出给客户端。SSI指令实在服务器端执行的。

在大部分项目中我们主要使用SSI的包含指令<!--#includevirtual="/globle/foot.jsp"-->

标签。

为什么要使用SSI技术?

既然jsp中的<jsp:includepage="/globle/foot.jsp"/>标准动作,也提供了类似的功能。为什么我们还要使用SSI技术?

主要原因有一下几点:

1,首先SSI技术是通用技术,不局限于运行环境,在java、dotne、CGI、aspphp都 可以使用SSI技术。

2,解释SSI指令要比解释JSP的效率要高,因为servlet规范提供了太多的功能。这些功能都需要好servlet引擎一一进行解释,所以效率比较低。

在目前大部分门户网站都是用了SSI技术,解释SSI文件的最佳服务器是ApacheHttpServer。大型门户网站基本上都采用ApacheServer来解释SSI文件

在Tomcat6.x中怎么应用SSI技术:

介绍:

SSI(服务器端包含)放置在HTML页面的指令,他们让你动态生成的内容添加到现有的HTML页面,而无需通过一个CGI程序,或其他动态技术服务整个页面。当你使用Tomcat作为你的HTTP服务器,并且需要SSI支持,你能够在Tomcat下增加SSI支持。通常,这是在开发过程中,当你不想要运行一个象ApacheWeb服务器(ApacheHttpServer)。Tomcat的SSI支持实现Apache(ApacheHttpServer)相同的SSI指令。如果在运营网站的时候应该使用ApacheHttpServer服务器解释SSI指令,如果使用Tomcat作为解释SSI指令的服务器,虽然可以实现但是效率低。启用SSI支持可以通过一个servlet和Filter,但是你只能选一种方式,要么是servlet或者是filter。

基于servlet的SSI支持已经被实现通过类org.apache.catalina.ssi.SSIServlet。习惯上,servlet的映射URL路径为"*.shtml"。

基于filter的SSI支持已经被实现通过类org.apache.catalina.ssi.SSIFilter。习惯上,servlet的映射URL路径为"*.shtml"。尽管它可以映射到“*”,因为它会选择性地启用/禁用SSI的处理基于MIME类型,contentType的初始化参数允许您应用SSI处理JSP页面,JavaScript,或者你想要的任何其他内容。

在Tomcat默认情况下禁用SSI支持。

环境搭建:

警告:

可以使用SSI指令的执行程序到TomcatJVM外部。如果你是使用JavaSecurityManager,这将绕过你的安全策略配置在catalina.policy里。

要使用SSI的servlet,删除在$CATALINA_BASE/conf/web.xml中SSIservlet和servlet的映射周围的XML注释。

要使用SSI的servlet,删除在$CATALINA_BASE/conf/web.xml中SSI过滤器和过滤器的映射周围的XML注释。

只有标记为特权的上下文可以使用SSI功能(见Context元素的特权属性)。在context.xml文件中配置如下:<ContextPRivileged="true"></Context>

servlet配置:

有几个servlet初始化参数可用于配置的SSIservlet的行为:

debug:通过这个servlet为日志信息调试详细级别。Default0。

expires:在一个带有SSI指令的页面将要过期的秒数,默认的行为是为所有的SSI指令评估每次请求。

isVirtualWebappRelative:SSI指令“virtual”路径被解释为相对与上下文的根目录,而不是服务器的根目录?(0=false,1=true)Default0(false)。

inputEncoding:必须为SSI的资源指定编码,如果不能从资源本身决定。默认值是默认的平台编码。

outputEncoding:用于编码的SSI处理的结果。默认是UTF-8。

allowExec:exec命令启用了吗?默认值是false

filter配置:

有几个filter初始化参数可用于配置的SSIfilter的行为:

contentType:SSI的处理被应用之前,必须匹配一个正则表达式模式。Defaultis"text/x-server-parsed-html(;.*)?".

debug:通过这个servlet为日志信息调试详细级别。Default0。

expires:在一个带有SSI指令的页面将要过期的秒数,默认的行为是为所有的SSI指令评估每次请求。

isVirtualWebappRelative:SSI指令“virtual”路径被解释为相对的上下文根目录,而不是服务器的根目录?(0=false,1=true)Default0(false)。

allowExec:exec命令启用了吗?默认值是false。

指令:

指令采取的HTML注释的形式,该指令被替换为在发送页面给客户端之前的解释SSI的结果。

指令的一般形式是:<!--#directive[parm=value]-->

config:<!--#configtimefmt="%Y-%m-%d%H:%M:%S"-->格式化时间,本身不输出,要放在输出时间指令的上面,才有效。

echo:<!--#echovar="VARIABLE_NAME"-->输出环境变量对应的值,环境变量有SSI提供。

include:<!--#includevirtual="file-name"-->和<!--#includefile="file-name"-->包含文件。

区别:file文件名是一个相对路径,该路径相对于使用#include文件所在的目录,被包含文件可以是同以目录或者子目录。但不能是上一级目录;

Virtual文件名是web站点的虚拟完整路径,如表示服务器文档根目录下global目录下的foot.jsp,则为<!--#includevirtual="/globle/foot.jsp"-->

flastmod:<!--#flastmodfile="filename.shtml"-->文件最后修改时间。

fsize:<!--#fsizefile="filename.shtml"-->返回文件大小。

printenv:<!--#printenv-->返回所有定义的变量列表。

set:<!--#setvar="foo"value="Bar"-->把值赋给定义的变量。此外仅设置值字面上一样,除了仅仅简单的设置值外,你可以使用任何其他变量,包括环境变量。您将指定的东西是一个变量,而不是一个简单字符串,通过在变量的名称前加上美元符号。

ifelifendifelse:类似于java的条件语句。

例如:

为了把美元符号放入变量的值,你需要用一个反斜线转译美元符号

<!--#setvar="cost"value="/$100"-->

<!--#setvar="date"value="${DATE_LOCAL}_${DATE_GMT}"-->

<!--#ifexpr="$DATE_LOCAL=/Monday/"-->

<p>Meetingat10:00onMondays</p>

<!--#elifexpr="$DATE_LOCAL=/Friday/"-->

<p>Turninyourtimecard</p>

<!--#else-->

<p>Yogaclassatnoon.</p>

<!--#endif-->

环境变量:

VariableName

Description

AUTH_TYPE

Thetypeofauthenticationusedforthisuser:BASIC,FORM,etc.

CONTENT_LENGTH

Thelengthofthedata(inbytesorthenumberofcharacters)passedfromaform.

CONTENT_TYPE

TheMIMEtypeofthequerydata,suchas"text/html".

DATE_GMT

CurrentdateandtimeinGMT

DATE_LOCAL

Currentdateandtimeinthelocaltimezone

DOCUMENT_NAME

Thecurrentfile

DOCUMENT_URI

Virtualpathtothefile

GATEWAY_INTERFACE

TherevisionoftheCommonGatewayInterfacethattheserverusesifenabled:"CGI/1.1".

HTTP_ACCEPT

AlistoftheMIMEtypesthattheclientcanaccept.

HTTP_ACCEPT_ENCODING

Alistofthecompressiontypesthattheclientcanaccept.

HTTP_ACCEPT_LANGUAGE

Alistofthelanguagesthattheclientcanaccept.

HTTP_CONNECTION

Thewaythattheconnectionfromtheclientisbeingmanaged:"Close"or"Keep-Alive".

HTTP_HOST

Thewebsitethattheclientrequested.

HTTP_REFERER

TheURLofthedocumentthattheclientlinkedfrom.

HTTP_USER_AGENT

Thebrowsertheclientisusingtoissuetherequest.

LAST_MODIFIED

Lastmodificationdateandtimeforcurrentfile

PATH_INFO

Extrapathinformationpassedtoaservlet.

PATH_TRANSLATED

ThetranslatedversionofthepathgivenbythevariablePATH_INFO.

QUERY_STRING

Thequerystringthatfollowsthe"?"intheURL.

QUERY_STRING_UNESCAPED

Undecodedquerystringwithallshellmetacharactersescapedwith"/"

REMOTE_ADDR

TheremoteIPaddressoftheusermakingtherequest.

REMOTE_HOST

Theremotehostnameoftheusermakingtherequest.

REMOTE_PORT

TheportnumberatremoteIPaddressoftheusermakingtherequest.

REMOTE_USER

Theauthenticatednameoftheuser.

REQUEST_METHOD

Themethodwithwhichtheinformationrequestwasissued:"GET","POST"etc.

REQUEST_URI

Thewebpageoriginallyrequestedbytheclient.

SCRIPT_FILENAME

Thelocationofthecurrentwebpageontheserver.

SCRIPT_NAME

Thenameofthewebpage.

SERVER_ADDR

Theserver'sIPaddress.

SERVER_NAME

Theserver'shostnameorIPaddress.

SERVER_PORT

Theportonwhichtheserverreceivedtherequest.

SERVER_PROTOCOL

Theprotocolusedbytheserver.E.g."HTTP/1.1".

SERVER_SOFTWARE

Thenameandversionoftheserversoftwarethatisansweringtheclientrequest.

UNIQUE_ID

Atokenusedtoidentifythecurrentsessionifonehasbeenestablished.

SSI是当然不是对CGI或其他的技术用于生成动态网页的替代品,不过这是一个很好的方式对于往页面加入少量的动态的内容,并且不用做额外的工作。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表