服务器端包含SSI(Server Side Include)简介2

服务器端包含SSI(Server Side Include)简介10th April 2009, 11:07 pm
服务器端包含 SSI,是英文 Server Side Includes的简写。SSI是一种可以指挥服务器动态声称网页内容的HTML指令。
通常SSI可以用来确保网页中的一些通用内容,比如版权信息、联系方式、或导航信息在全站所有网页中保持一致。使用SSI显示这些通用内容还可以减轻网站维护的工作量,因为当需要修改这些通用信息的时候,只需要改一个地方就可以了,而不需要逐个修改每一个网页。
各个服务器对SSI命令的支持各有不同,但 #include 和 #exec 是通用的。使用 SSI 的页面文件通常都使用扩展名.shtml,而不是.html 或 .htm,这样以便服务器能够辨认出哪些页面包含SSI指令,这些页面需要先经过服务器处理,翻译执行其中的SSI指令,然后才发送给客户端浏览器。  (当然有些服务器还是支持.html,.htm文件中有SSI指令的)。
如何辨别你的服务器是否支持 SSI?
多数网站寄存服务都支持 SSI - 但是也有一些不支持,特别是一些免费的网站寄存服务。你可以联系你的网站寄存公司询问他们是否支持SSI,也可以通过以下方式来自己测试一下你的服务器是否支持SSI:
1. 拷贝以下HTML内容,保存为文件名test.shtml

<html> <head></head>

<body><!–#echo var=”DATE_LOCAL” –></body>
</html>
2. 将这个文件上载到你的服务器上,然后用浏览器浏览服务器上的这个网页。
3. 如果看到网页显示当前日期,则你的服务器支持 SSI。否则,多半可能你的服务器不支持SSI。你可以尝试与你的网站寄存公司联系看他们是否可以为你开通SSI服务。
练习1: 显示版权信息
1. 拷贝以下内容并存为copyright.html文件名 (你可以把链接和网站名称修改为你的网站):
&copy;2007 <a href=”http://www.prglab.com”> 程序员实验室</a> 版权所有。
在浏览器中它应该显示为
?2007 程序员实验室 版权所有。

注意:在这个文件代码中不能够出现 <html>, <head> 和 <body> 这些标签,否则包含它的页面会出错。
2. 将这个文件copyright.html上传到你的服务器上。
3. 在要显示版权信息的页面底部</body>标签之前插入以下代码:

<!–#include virtual=”/copyright.html” –>
4.将修改后的文件上传到服务器上,然后用浏览器打开服务器上的文件,你应该看到页面的底部显示版权信息。
注意: 写有包含指令(#include)代码的文件可能要保存为扩展名为.shtml的文件名,代码才能生效。
练习 2: 简单的导航条
1. 比如我们要写一个如下所示的导航条

主页| 联系方式 | 产品介绍 | 订单

可以用以下HTML代码来实现:
<p align=”center”><font face=”Geneva, Arial, Helvetica, sans-serif” size=”2″>
<a href=”home.htm”>主页</a>
| <a href=”mailto:myemail@address.com”>联系方式</a>
| <a href=”products.htm”>产品介绍 </a>
| <a href=”orders.htm”>订单</a></font></p>

2. 保存这些代码为文件 navigation.shtml 或 navigation.shtm.
3. 打开要插入导航条的页面,在要显示导航条的位置插入以下代码:
<!–#include virtual=”/navigation.shtml” –>
4. 将所有文件上载到服务器上,并用浏览器检查导航条是否如你所设想的显示。
以上只是两个很简单的SSI使用的例子,你还可以自由发挥写出更复杂的网页。如果需要修改SSI包含的内容,只需要打开写有通用内容的网页,比如上面的copyright.html或navigation.shtml,修改其中的内容,那么所有包含这个文件的网页相应内容都会被自动修改。
SSI 相对来说比较容易掌握,并能提高网站维护效率,不妨一试。
参考文章: Server Side Includes Tutorial (From The Template Store)
Category: 网站设计   · 1 Comment
如何将一个HTML页面嵌套在另一个页面中19th February 2009, 11:04 am
这个在做网页中常要用到,有些通用的内容可集中放在一个页面文件中,其它要用到这些内容的页面只需要包含(引用)这个通用文件即可。这样便于维护,如果有很多网页,当通用内容需要修改时,只改一个文件就可以了,不需要每个文件单独修改。
最典型的应用比如页脚的版权信息等内容可以放在一个叫做footer.html文件里, 然后其他页面文件在页面内容的最后包含这个文件就可以了,具体例子下面有。
要html文件嵌套,最简单的办法是使用SSI(Server Side Include)技术,也就是在服务器端两个文件就被合并了。除了少数免费网页寄存服务外,几乎所有的网页寄存服务器都支持 SSI。这也是一个比较推荐的方法,它与ASP和ASP.NET网页使用的语法一模一样。如果网站管理员偏向使用PHP或JSP的话,语法会稍有不同。
对于不能使用SSI、ASP、ASP.NET、PHP和JSP等服务器端动态页面语言的情况,这里还将介绍两种客户端镶嵌的办法:JavaScript和iframe的方法。当这两种客户端的方法都有很大的弊病,一般不推荐使用。
下面对各种方法单独具体介绍。
1、SSI (Server Side Include)
SSI是一种简单的动态网页制作技术,但是有些服务器要求网页文件扩展名为.shtml才能识别文件中SSI命令。所以如果你的SSI命令看起来不工作,先别放弃,试着把文件扩展名改为.shtml,也许会成功。如果知道自己的服务器是否支持SSI,请看另一篇文章。
使用SSI一个局限性是页面一定要放在网页服务器上才能看到效果,在本地是不好调试的。当然,如果非要在本地调试,就本地装一个Apache服务器好了。
比如你想在每个网页的底部加上同样的版权信息,像
? 2009 程序员实验室 版权所有
可以把这行信息放到一个叫做footer.html的文件里,footer.html的内容为:
<center> &copy; 程序员实验室 版权所有</center>;
这样同一路径下的其他页面文件要包含footer.html的SSI命令是:
<!–#include virtual=”footer.html” –> (常用)
或者
<!–#include file=”footer.html” –>
这两者的几乎是一样的,不同之处在于include virtual后面取的是一个URL形式的路径,甚至还可以执行一个CGI程序并包含其输出结果,如果你的服务器支持CGI的话。而include file后面取的是一个文件系统路径,并且不能执行CGI程序。两者都可以接受相对路径,所以对上面这个简单例子,两者的效果是一样的。如果你不知道URL路径与文件系统路径两者的区别的话,就用include virtual
更多关于SSI的介绍,请看 这篇SSI的介绍文章
2、PHP
如果你的服务器支持PHP的话,用PHP引用footer.html文件的写法如下:
<?php include(”footer.html”); ?>
这句命令所在的文件扩展名必须被为.php。
除了引用本服务器上的文件,PHP的include命令还可以用来引用其它网站上的html文件,比如:
<?php include(”http://www.prglab.com/examples/footer.html”); ?>
当然你要得到其它网站的允许才能引用别人的文件。
3、ASP和ASP.NET
如果你使用的是老式的ASP,则语法是与上面SSI一样的,不需要任何修改,只要把命令所在文件的扩展名改为.asp即可。
对于ASP.NET,也是类似,不同之处在于,因为SSI命令是在ASP命令运行之前被首先编译,所以文件名中不能够使用ASP.NET的变量。如果一定要用的话,就用ASP.NET的命令来做文件嵌套吧。
比如:
        <%          Response.WriteFile ("footer.html")        %>
更多关于怎样在ASP.NET中实现动态文件嵌套,请参考 微软的这篇文章
4、JSP (Java Server Page)

JSP文件需要在基于Java的服务器上运行,比如 Apache Tomcat。JSP包含文件的语法是:
<%@ include file=”footer.html”%>
5、客户端包含
5。1 客户端包含 的利弊
客户端包含有两种方式:Javascript和iframe。让我们先看看两种方法各有什么利弊。
两种方法中Javascript生成的页面格式比较好,Javascript可以从一个URL取到页面片断然后镶嵌在另一个页面的任何位置 。其结果与服务器端包含的结果基本上一样,但弊端是客户端必须开启Javascript功能(目前大多数人是选择开启的,但也有少数出于安全方面的考虑不开启)。另一个弊端是搜索引擎是看不到由Javascript包含的页面的内容的,这对你的网站推广比较不利。
使用iframe比较简单,它可以强制一个HTML页面镶嵌在另一个页面中,类似于是用 object控件将Flash电影、录像、或者MP3播放器嵌入一个页面中。使用iframe,用户端不需要开启Javascript功能。但不利的方面是iframe有固定的高度和宽度,不能随着被嵌入页面的大小而改变。当被嵌入页面大于给定高宽度时,会显示滚动条(当然你也可以使用 scrolling = “no” 来强制滚动条不显示,但这样页面内容会显示不完整),影响页面美观。另外就是搜索引擎可能不收录iframe引用的页面,不利网站推广。
5。2 使用JavaScript的客户端包含
这个方法主要适用于Firefox浏览器(任何操作系统)、IE5以上(Windows)、苹果的Safari浏览器(MacOS X),可以使用一项叫做 XMLHTTP 的API技术来通过Javascript程序读取一个动态读取一个XML文件。这种方法也可以用来读取一个HTML文件,并放到当前网页文件的指定位置。
专业网站设计者:不要用这个! 也许在某些情况下你不得不用JavaScript来实现网页嵌套,但是这只是一种转弯抹角的替代方法。当你的服务器可以支持前面讲的服务器端嵌套方法时,尤其是专业人士,应尽可能避免使用这种方法,因为你的客户可能会投诉你做的网页内容无法被Google搜索到,或不能在某些浏览器中正常显示。
记住这种方法做的网页只能在Firefox,Safari,和IE5以上版本的浏览器中正常显示。大部分人都是用这几种浏览器的,但是不是所有人,而且有些用户因为安全因素考虑会关闭Javascript功能。
重要提示:如果你是在本地电脑上调试网页而不是在服务器上浏览,最新版本的IE浏览器会自动屏蔽Javascript动态生成的部分,并显示警告信息,你必须选择”允许显示动态内容”网页才能正常显示。当你把这些网页文件放到服务器上去的时候这个问题就会自动消失的,因为IE会辨别出主页和被包含的网页内容都来自同一个服务器。
好了,说了够多了,下面是具体怎么做。把以下代码放在网页的<head>里面:
<script>
function clientSideInclude(id, url) {
var req = false;
// Safari, Firefox, 及其他非微软浏览器
if (window.XMLHttpRequest) {
try {
req = new XMLHttpRequest();
} catch (e) {
req = false;
}
} else if (window.ActiveXObject) {
// For Internet Explorer on Windows
try {
req = new ActiveXObject(”Msxml2.XMLHTTP”);
} catch (e) {
try {
req = new ActiveXObject(”Microsoft.XMLHTTP”);
} catch (e) {
req = false;
}
}
}
var element = document.getElementById(id);
if (!element) {
alert(”函数clientSideInclude无法找到id ” + id + “。” +
“你的网页中必须有一个含有这个id的div 或 span 标签。”);
return;
}
if (req) {
// 同步请求,等待收到全部内容
req.open(’GET’, url, false);
req.send(null);
element.innerHTML = req.responseText;
} else {
element.innerHTML =
“对不起,你的浏览器不支持 ” +
“XMLHTTPRequest 对象。这个网页的显示要求 ” +
“Internet Explorer 5 以上版本, ” +
“或 Firefox 或 Safari 浏览器,也可能会有其他可兼容的浏览器存在。”;
}
}
</script>
有了这段代码我们就可以在网页的任何位置插入另一个页面了。首先我们要生成一个作为”容器”的HTML控件,比如<span>,并给这个”容器”控件一个ID,比如includefooter,然后把这个ID和要包含的页面的URL地址传递给前面写的这个js函数clientSideInclude就可以了。
一个需要注意的地方是函数clientSideInclude只有在页面被完全加载后才能工作,所以我们需要在<body>标签的onload事件上来调用这个函数,这是最保险的调用时机,因为这个事件触发的时候浏览器肯定已经完全解析了页面中所有HTML了。
所以,具体代码是:
在需要插入另一页面的地方写:
<span id=”includefooter”> </span>
在页面开始处标签里写:
<body onLoad=”clientSideInclude(’includefooter’, ‘footer.html’);>
当然,你也可以把函数clientSideInclude放在一个单独的文件里面,比如命名为clientSideInclude.js,然后在你的页面<head>标签中插入下面这<script>标签以便可以调用这个函数:
<script src=”clientSideInclude.js” language=”JavaScript”> </script>
5。3 使用iframe的客户端包含
客户端页面嵌套还可以使用iframe的方法,弊端是必须事先想好被嵌套的页面在首页中要占多大的位置。如果被嵌套页面太大,超过事先定义的宽度或高度,则首页会出现滚动条。这也许正是你所需要的,但也许会完全破坏主页的设计。
iframe的使用很简单,下面的例子会在你的页面中嵌入另一个叫做include.html的页面:
<iframe src=”included.html” width=”450″ height=”400″>
<a href=”included.html”>你的浏览器不支持iframe页面嵌套,请点击这里访问页面内容。</a>
</iframe>
这里主页中定义了要插入的页面将显示的高度为400的像素,宽度为450个像素。
我们为什么要在 iframe的里面插入一个普通的超级链接元素<a>呢?这是因为老版本的浏览器和搜索引擎不支持iframe,虽然现在已经很少有人还会使用Netscape 4这样老的浏览器了,但是几乎所有人都会使用象Google这样的搜索引擎。在iframe里面加上超级链接可以帮助搜索引擎找到网页的内容。
另外我们可以定义iframe的一些属性来控制网页的显示效果 ,除了前面用到的最常用宽度(width)和高度(height)的定义外,如果在任何情况下都不希望出现滚动条的话,可以定义iframe的scrolling属性等于“no”。如果不希望镶嵌页面的周围出现边框的话,可以将frameborder属性设置为0。下面这个例子显示了scrolling和frameborder属性的使用:
<iframe src=”included.html” width=”450″ height=”400″ frameborder=”0″ scrolling=”no”>
<a href=”included.html”>你的浏览器不支持iframe页面嵌套,请点击这里访问页面内容。</a>
</iframe>
参考文章:
WWW FAQs: How do I include one HTML file in another?(fromBoutell.com)
Category: 网站设计   · Comment
[JAVA]怎样验证XML文件是否符合schema定义5th May 2008, 02:21 pm
两种方法:
1。 使用SAX解析:
view source print ?
01./***
02.* @param xmlPath - XML文件路径
03.* @param schemaPath - Schema文件路径
04.*/
05. public void saxValidation(String xmlPath, String schemaPath){
06. try {
07.SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
08.saxParserFactory.setNamespaceAware(true);
09.saxParserFactory.setValidating(true);
10.SAXParser saxParser = saxParserFactory.newSAXParser();
11.saxParser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
12.saxParser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", schemaPath);
13. DefaultHandler handler = new DefaultHandler();
14.saxParser.parse(xmlPath, handler);
15.} catch(SAXException exc) {
16.exc.printStackTrace();
17.}
18.}
2。 使用DOM解析:
view source print ?
01./***
02.* @param xmlPath - XML文件路径
03.* @param schemaPath - Schema文件路径
04.*/
05. public void domValidation(String xmlPath, String schemaPath){
06. try {
07.DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
08.docBuilderFactory.setNamespaceAware(true);
09.docBuilderFactory.setValidating(true);
10.docBuilderFactory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
11.docBuilderFactory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", schemaPath);
12.DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
13.Document doc = docBuilder.parse(xmlPath);
14.} catch(DOMException exc) {
15.exc.printStackTrace();
16.}
17.}
Category: Java   · Comment
使用JAVA将彩色图片变为1bit黑白图片1st May 2008, 05:05 pm
最近做的project需要涉及到对扫描图片的文字识别,需要将扫描得到的彩色图片变为1bit的黑白图片。
搜索到很多解决方案,基本的归纳为两个步骤,首先要将彩色图片变为8bit灰度图片(grayscale image),然后再进一步变为1bit的单色图片(1bit monochrome)。
方案一:使用ColorConvert和Dithering操作1、代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值