Sun Java System Application Server 7 Web应用开发者指南

上一部分 | 目录 | 下一部分


使用服务器解析的HTML

HTML文件可以包含在服务器端执行的标记。除了支持这些标准的服务器端标记外,Sun Java System Application Server7还允许嵌入servlet,定义自己的服务器端标记。

可以生成子定义服务器解析的HTML标记。关于这方面的更多信息参见Sun Java System Application ServerNSAPI开发者指南

关于安全性,服务器解析的HTML标记依赖于服务器的安全配置。更多信息请参考"SHTML和CGI的安全性"以及Sun Java System Application Server管理员安全指南

该组件有如下一些部分:

服务器端HTML和J2EE web应用

Sun Java System Application Server中,服务器解析的HTML不能与J2EE web应用交互。具体来说:

  • 不要将服务器解析的HTML放在web应用背景的根中。
  • 在servlet或jsp中不能包含服务器解析的HTML输出。
  • 不能从servlet或jsp转发请求给服务器解析的HTML。
  • 不能将J2EE安全性约束和过滤器映射特性应用到服务器解析的HTML。

启动服务器端HTML

要启动服务器端HTML,必须:

1.            在管理接口的服务器实例中打开HTTP服务器组件。

2.            访问虚拟服务器页面。

3.            点击要启动服务器端HTML的虚拟服务器的名字。

4.            点击HTTP/HTML标签。

5.            点击解析HTML选项。

6.            为将解析HTML的服务器选择资源。

选择虚拟服务器或在虚拟服务器上指定路径。

如果选择了某个目录,只有当服务器接受到对该目录或该目录中任意文件的URL时才解析HTML

7.            选择是否激活服务器解析HTML

可以激活HTML文件但不激活exec标记,或者激活HTML文件同时激活exec标记,这时允许HTML文件来执行服务器端的其它程序。

8.            选择解析哪些文件。

可以选择是否只解析扩展名为.shtml的文件,还是所有的HTML文件,选择所有HTML文件将降低性能。如果使用UNIX,可以选择解析具有执行权限的UNXI文件,尽管这可能不可靠。

9.            点击OK按钮。

10.       访问服务器实例页面,选择应用变化的按钮。

一旦激活了解析功能,需要确定一下下面的命令是否增加进了init.conf文件(本地线程是关闭的):

Init funcs="shtml_init,shtml_send" shlib="install _dir/bin/Shtml.dll" NativeThread="no" fn="load-modules"

注意,必须将Sun Java System Application Server7中的NativeThread设置成“no”。另外,这些功能现在源于Shtml.dll(或在Unix中源于libShtml.so),在windows中它位于install_dir/bin(在UNIX中位于install_dir/lib)。

另外,确信下面的命令加入到了obj.conf文件中:

<Object name="default">
...
...
Service fn="shtml_send" type="magnus-internal/parsed-html" method="(GET|HEAD)"
...
</Object>

使用服务器端HTML命令

这部分描述了在HTML文件中用于包含服务器解析的标记的HTML命令。这些命令是嵌入到HTML文件中的,由obj.conf文件的parse-html函数处理。

服务器根据命令以及它的属性来用数据替换每条命令。命令的格式如下:

<!--#command attribute1 attribute2 <Body>... -->

属性的格式为一对名称-值,例如:

name="value"

命令和属性名应该小写。

命令是隐藏在HTML注释中的,因此如果不能被服务器解析就会被忽略。标准的服务器端命令有:

config

配置命令为其它命令初始化格式。

  • 属性errmsg定义了当解析文件时有错误发生,发送给客户的消息。错误同样记录在服务器日志文件中。
  • 属性timefmt flastmod命令确定日期的格式。它和util_strftime函数使用相同格式的字符。默认格式为:"%A, %d-%b-%y %T"

    关于时间格式的详细信息请参考"时间格式"

  • 属性sizefmt属性用来为fsize命令文件大小的格式。可以为这样一些值:
    • 以字节的形式将文件大小汇报为一个整数,格式为12,345,678
    • abbrev (默认) 将文件大小汇报成KBMB为单位的某个整数。

例如:

<!--#config timefmt="%r %a %b %e, %Y" sizefmt="abbrev"-->

它将日期格式像08:23:15 AM Wed Apr 15, 1996值这样设置,文件大小格式设置成文件所使用字符的KBMB的数值。

include

include命令将文件插入到已解析的文件中。可以通过包含另一个已解析的文件,而该文件又包含其它文件,等等来形成嵌套文件。如果服务器为其所在的目录使用了访问控制,客户请求的已解析的文档必须同时获得使用包含的文件的权利。

Sun Java System Application Server7中,可以使用带有virtual属性的include命令来包含一个CGI程序文件。同时必须使用exec命令来执行CGI程序。

·   属性 virtual是文件在服务器上的URL

·   属性file是从当前目录开始的相对路径名。不能包含像../这样的元素,也不能是一个绝对路径。

例如:

<!--#include file="bottle.gif"-->

echo

echo命令插入一个环境变量的值。属性var指定要插入的环境变量。如果没有发现该变量,将插入“(none)”。关于环境变量列表请参见"服务器端HTML命令中的环境变量"部分。

例如:

<!--#echo var="DATE_GMT"-->

fsize

fsize命令发送文件的大小。属性与include命令的属性(virtualfile)相同。文件大小的格式由config命令中的sizefmt属性确定。

例如:

<!--#fsize file="bottle.gif"-->

flastmod

flastmod命令打印输出文件最后一次修改的日期。属性与include命令的属性(virtualfile)相同。日期格式由config命令的timefmt确定。

例如:

<!--#flastmod file="bottle.gif"-->

exec

exec命令运行一个shell命令或某个CGI程序。

  • 属性cmd(仅针对UNIX)使用/bin/sh来运行一个命令。在命令中可以包含任意特殊的环境变量。
  • 属性cgi运行一个CGI程序,并在已解析的文件中包含其输出。

例如:

<!--#exec cgi="workit.pl"-->

服务器端HTML命令中的环境变量

              除了在CGI中使用的普通环境变量外,在已解析的命令中可以包含如下的变量:

  • DOCUMENT_NAME

已解析文件的名字。

  • DOCUMENT_URI

已解析文件的虚拟路径(例如: /shtml/test.shtml)。

  • QUERY_STRING_UNESCAPED

客户发送的任意查找查询的未转意版本,所有shell特殊字符都用字符‘\’进行转意。

  • DATE_LOCAL

当前的日期和本地时间。

  • DATE_GMT

以格林尼治标准时间表示的当前日期和时间。

  • LAST_MODIFIED

文件最后修改的日期。

嵌入servlet

Sun Java System Application Server7支持Java web服务器引入的<SERVLET>标记。该标记允许在某个SHTML文件中嵌入servlet输出。启动该行为不需要改变任何配置。如果SSIservlet都启动了,那么<SERVLET>标记也可用了。

<SERVLET>标记的语法与SSI命令的语法略有不同,它与<APPLE>标记的语法很像:

<servlet code=code>
<param name=param1 value=v3>
<param name=param2 value=v4>
.
.
</servlet>

代码参数指定servletURI,包括web应用程序的背景根。该URI必须与J2EE部署描述文件(web.xml)中的servlet-mapping元素的url-pattern子元素相匹配。

时间格式

下面的表格对服务器解析的HTML使用的日期和时间格式串作了说明。左边一列列出了格式符号,右边一列解释了符号的含义。

   时间格式

符号

含义

%a  

 缩写工作日的名字(3个字符)

%d

 以十进制数表示的月份中的日(1-31

%S

 十进制表示的秒(00-59

%M

十进制表示的分钟(00-59 

%H

24小时格式的小时(00-23 

%Y

带有世纪的年份,表示成十进制形式,直到2099

%b

月份名的缩写(3个字符) 

%h

月份名的缩写(3个字符) 

%T

"HH:MM:SS"格式的时间

%X

 "HH:MM:SS"格式的时间

%A

 工作日的全名

%B

月份的全名 

%C

"%a %b %e %H:%M:%S %Y"

%c

"%m/%d/%y %H:%M:%S"格式的日期和时间

%D

"%m/%d/%y"格式的日期

%e

 十进制表示的月份中的日(1-31),不以0开头

%I

12小时形式的时间(01-12 

%j

十进制表示的一年中的日(001-366 

%k

24小时形式的时间格式(0-23),不以0开头 

%l

12小时形式的时间格式(1-12),不以0开头 

%m

十进制表示的月份(01-12 

%n

换行 

%p

A.M./P.M.指示时钟的12小时 

%R

"%H:%M"格式的时间

%r

"%I:%M:%S %p"格式的时间

%t

Tab

%U

 十进制表示的一年中的星期,以星期天为一周的第一天(00-51

%w

十进制表示的工作日(0-6,星期天为0

%W

以十进制表示年的第几个星期,以星期一为一周的第一天(00-51

%x

"%m/%d/%y"格式的日期

%y

不带世纪的年份,以十进制表示(00-99

%%

百分比符号 



上一部分 | 目录 | 下一部分

 

常见问答
下载中心
产品简介
 
 
Solaris论坛
 
   
 
null