谢氏工作室 - 我的精彩
我的鬼迹~~~~<br> 我的网路生活~~~<br> 我的~~~~~~~~~~~~~<br> Email:mrshelly@hotmail.com



■用户登录
用户名:
密   码:
■站内搜索
 

■最后更新


■最新评论


■存档




■我的链接

Net-Tools







■网站排名情况


■水盟最新发表
共1页 1
   PHP 通过 ADODB 连接 Access 的一个实例    |   阅读全文   |   评论(1)  |  引用(trackback1)  

PHP 通过  ADODB  连接 Access 的一个实例~~~~

<?php
include('tohtml.inc.php'); // load code common to ADODB
include('adodb.inc.php'); // load code common to ADODB
$db = &ADONewConnection("ado_access");
print "<h1>Connecting $db->databaseType...</h1>";
$access = 'test.mdb';
$myDSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;'.'DATA SOURCE='. $access . ';';.'USER ID=;PASSWORD=;';

if (@$db->PConnect($myDSN, "", "", "")) {
print "ADO version=".$db->_connectionID->version."<br>";
$sql = 'select name, group1 from experts';
$rs = $db->Execute($sql);
rs2html($rs,'border=2 cellpadding=3',array('Customer Name','Customer ID'));
} else print "ERROR: Access test requires a Access database $access".'<BR>'.$db->ErrorMsg();
?>

 

//下面是今晚我自己的测试代码.

<?php
include("adodb.inc.php");

$db=&ADONewConnection("ado_access");  //设定以ADO_ACCESS方式连接数据库.
$access = "d:\\WWW\\test\\test.mdb";  //设定ACCESS数据库的路径.  PHP可以用 _FILE_ _DIR_ 常量来获取吧??  忘记了./:D  注意路径用 双 \ ,调试中走了些弯路.
$myDSN="Provider=Microsoft.Jet.OLEDB.4.0;"."DATA SOURCE=".$access.";"." USER ID=;PASSWORD=;";    //连接 字串
if(@$db->Connect($myDSN,"","","")){     // 如果连接成功的话,
 $sql="SELECT * FROM `USER`";   //设置SQL语句
 $rs=$db->Execute($sql);       //运行 SQL语句查询
while($rs->MoveNext()){        //循环整个 RecordSet
 for($i=0;$i<count($rs->fields);$i++) echo "$i is :".$rs->fields[$i]."<BR />";  //输出 每个字段的值.
 }
// 上面这段是 Select 查询


 $sql="UPDATE `USER` SET Id='14' WHERE Id='13'";
 $rs=$db->Execute($sql);
//上面这段是 Update 查询

 $sql="INSERT INTO `USER` (`Id`,`Domains`,`Ftpuser`,`Ftppass`,`ChangePassword`,`HomeDir`,`RelPaths`,`AlwaysAllowLogin`,`DiskQuota`,`TimeOut`,`Access1`) VALUES ('15','Domain1','Shelly','Shelly','1','F:\','1','1','14400','300','F:\|RWL')";
 $rs=$db->Execute($sql);
// 上面这段是 Insert into  查询

}
else die ("Connect error".$db->ErrorMsg());  //如果连接出错,就给出出错信息.
$db->Close();  //关闭连接.

 

上面就是关于用  PHP 调用ADODB 类库 对Access 数据库操作的实例. 希望对您有用. /:D 有其它论坛记得 TrackBack Me.....

shelly 发表于  2004-05-22 16:28:28


   URL优化技术--类似CU的动态页面静态网址    |   阅读全文   |   评论(1)  |  引用(trackback1)  

URL优化技术--类似CU的动态页面静态网址


CU论坛进入分论坛的每个话题连接是html,这种技术最近得到很多的应用。
http://bbs.xianfeng.net/index.html
就是这样子的例子。


CU论坛进入分论坛的每个话题连接是html,这种技术最近得到很多的应用。
http://bbs.xianfeng.net/index.html
就是这样子的例子。

一、前提条件:
引用:
服务器上面的WEB服务器软件为Apache,至于其他的WEB服务器软件是否可以做到我没有测试


二、必要条件:
引用:
加载了ReWrite模块,这个看看你的Httpd.conf的配置文件之中关于rewrite的模块是否#屏蔽了

代码:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so


三、必备知识:
引用:
正则表达式的相关知识,虽然在一些基本应用之中,可能不一定需要正则表达式的知识,但是你可能会上瘾,所以强烈建议掌握相关正则表达式的知识


四、配置
引用:

以下的配置,是我实际应用,绝对正确(处于相关原因,未能原版展示,请见谅,但是所显得绝对是可用的):



代码:
#打开Rewrite
RewriteEngine On
#Rewrite规则集
RewriteRule ^/forum([0-9]+)_topic([0-9]+)\.html$ /topic.cgi?forum=$1&topic=$2
RewriteRule ^/forum([0-9]+)\.html$ /forums.cgi?forum=$1
RewriteRule ^/index.html$ /index.cgi
RewriteRule ^/view_forum([0-9]+)_topic([0-9]+)\.html$ /view.cgi?forum=$1&topic=$2
RewriteRule ^/forum([0-9]+)_show([0-9]+)\.html$ /forums.cgi?forum=$1&show=$2


五、说明
引用:

RewriteRule ^/forum([0-9]+)_topic([0-9]+)_show([0-9]+)\.html$ /topic.cgi?forum=$1&topic=$2&show=$3
这个rewrite规则分为三个部分:
RewriteRule 要转换的表达式 实际的调用页面
^/forum([0-9]+)_topic([0-9]+)\.html$
    表示    表示
    论坛    文章
    编号    编号
    一到    $2
    多个
    数字
    匹配
    结果
    在$1
/topic.cgi?forum=$1&topic=$2
如果网址为:
forum12_topic234.html
就表示论坛12的第234个主题,调用的实际页面就是
topic.cgi?forum=12&topic=234



六、程序上的修改:
代码:
以上所做的已经可以把一个有效的静态地址转换为动态页面了,当然我们需要修改一下子我们自己的程序:
例如原来的程序是:
echo "topic.cgi?forum=$forumid&topic=$topicid"
那么修改后的程序就是:
echo "forum$forumid\_topic$topicid.html"



七、附加:
引用:

以上所说得其实很简陋,如果你掌握了正则表达式的相关知识,也掌握了Apache的rewrite的相关知识,那么所能做到得远比以上所展示的精彩绝伦,当然,太复杂了也不是好事哦

shelly 发表于  2004-05-22 12:12:21


   哈哈,有人在技术文章中提及我。    |   阅读全文   |   评论(4)  |  引用(trackback1)  

哈哈,居然有人在技术文章中提及我得名字。呵呵,难得~~~~~开心~~~~~~

http://www.knowsky.com/list.asp?id=4127

呵呵,MM的文章中提及很正常啦,其它的技术文章中提及就真得不正常了~~~~~~

shelly 发表于  2004-05-22 09:05:07


   SMS Mo 的AT指令[转]    |   阅读全文   |   评论(1)  |  引用(trackback1)  
AT 指令
功                     能

AT+CMGC
Send an SMS command(发出一条短消息命令)

AT+CMGD
Delete SMS message(删除SIM卡内存的短消息)

AT+CMGF
Select SMS message formate(选择短消息信息格式:0-PDU;1-文本)

  

AT+CMGL
List SMS message from preferred store(列出SIM卡中的短消息PDU/text:   0/“REC UNREAD”-未读,1/“REC READ”-已读,2/“STO UNSENT”-待发,3/“STO SENT”-已发,4/“ALL”-全部的)

AT+CMGR
Read SMS message(读短消息)

AT+CMGS
Send SMS message(发送短消息)

AT+CMGW
Write SMS message to memory(向SIM内存中写入待发的短消息)

AT+CMSS
Send SMS message from storage(从SIN|M内存中发送短消息)

AT+CNMI
New SMS message indications(显示新收到的短消息)

AT+CPMS
Preferred SMS message storage(选择短消息内存)

AT+CSCA
SMS service center address(短消息中心地址)

AT+CSCB
Select cell broadcast messages(选择蜂窝广播消息)

AT+CSMP
Set SMS text mode parameters(设置短消息文本模式参数)

AT+CSMS
Select Message Service(选择短消息服务)


对短消息的控制共有三种模式:
Block Mode

基于AT命令的PDU Mode

基于AT命令的Text Mode

使用Block模式需要手机生产厂家提供驱动支持,目前,PDU Mode 已取代 Block Mode, Text Mode比较简单,本文重点介绍模式PDU Mode,以西门子公司的产品TC35T为例。
2.计算机与TC35T的通信
(1)RS232串口连接
由于TC35T自带RS232串口线,故只需将其连接到计算机串口即可。打开超级终端,选择相应的串口,将端口参数设置为:速率—4800、奇偶校验位—无、数据位—8、停止位—1、流量控制—硬件。
(2)连接测试
输入“AT”然后回车,屏幕上返回“OK”表明计算机与TC35T已连接成功,TC35T能够正常工作。这时就可以测试各类AT命令。
当测试命令“AT+CMGS=?<CR>”时,如果返回“OK”标明TC35T支持该指令。该指令的完整语法如下:
如果此时TC35T处于PDU Mode(即“AT+CMGF?<CR>”返回“0”)

AT+CMGS=<length><CR>PDU is given<^Z/ESC>
如果短消息发送成功,则返回“OK”,并显示信息号:
+CMGS: <mr>[,<ackpdu>]
如果短消息发送失败,则返回如下信息号:
+CMS ERROR: <err>
如果此时TC35T处于Text Mode(即“AT+CMGF?<CR>”返回“1”)

AT+CMGS=<da>[,toda]<CR>text is entered<^Z/ESC>
如果短消息发送成功,则返回“OK”,并显示信息号:
+CMGS: <mr>[,<scts>]
如果短消息发送失败,则返回如下信息号:
+CMS ERROR: <err>
另外,由于使用的是TC35T,当有新的短消息到来时,需要TC35T产生提示,使用指令“AT+CNMI”。该指令的完整语法如下:
AT+CNMI=[<mode>][,<mt>][,<bm>][,<ds>][,<bfr>]
如果有新的短消息来到,则TC35T将自动返回下列提示:
+CMTI: “SM”, <index>
此时读出<index>,然后用“AT+CMGR”指令即可读出短消息内容。

shelly 发表于  2004-05-22 08:57:25


   SELECT多重选择时的变量传递    |   阅读全文   |   评论(1)  |  引用(trackback1)  

呵呵,很多人都可能用这种经历:

<select name=select1 multiple>

  <option value='1' selected> Select1 </option>
  <option value='2'> Select2 </option>
  <option value='3' selected> Select3 </option>
  <option value='4' selected> Select4 </option>

</select>

在PHP中最终得到的可是最后选择的那项的值。

呵呵,莫办法,GOOGLE了一下,发觉是

<select name="select1[]" multiple>

  <option value='1' selected> Select1 </option>
  <option value='2'> Select2 </option>
  <option value='3' selected> Select3 </option>
  <option value='4' selected> Select4 </option>

</select>

 

但这种方法有个问题,如果您要在客户端对复选框是否被选择、选择了几个用javascript来判断时,javascript会因为复选框的name中含有[]而出错。您可以在表单中加入一个隐含域,用javascript设置它的值。

<script language="javascript">
function check()
{
var strchoice="";
for(var i=0;i<document.news.choice.length;i++)
{
if (document.news.choice.checked)
{
strchoice=strchoice+document.news.choice.value+",";
}
}
if (!document.news.choice.length)
{
if (document.news.choice.checked)
{
strchoice=document.news.choice.value;+","
}
}
strchoice=strchoice.substring(0,strchoice.length-1);
document.news.choiceid.value=strchoice;
alert(document.news.choiceall.value);
}
</script>
<html>
...
<form name="news" action="test.php" method="post" onsubmit="check()">
<input type="checkbox" name="choice" value="1">
<input type="checkbox" name="choice" value="2">
<input type="checkbox" name="choice" value="3">
<input type="checkbox" name="choice" value="4">
<input type="hidden" name="choiceid" value="">
</form>
...
</html>

shelly 发表于  2004-05-17 14:42:53


   关于JS中各对象方法事件    |   阅读全文   |   评论(1)  |  引用(trackback1)  
shelly 发表于  2004-05-17 11:09:32


   JS对FLASH内部变量的交互    |   阅读全文   |   评论(2)  |  引用(trackback1)  

以前在我在 http://members.lycos.co.uk/tencent/  上保留的文章,不在了。

最后在 http://www.macromedia.com 上找到答案:

JavaScript 操作FLASH 关键要注意以下几点:

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
 codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"
 width=400 height=180 id="myFlash">

    <embed src="javascript_to_flash.swf" quality=high width=400 height=180 type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" name="myFlash" swliveconnect="true">

    function doPassVar(args){
 var sendText = args.value;
 window.document.myFlash.SetVariable("myVar", sendText);
}

附可控制Flash Player的Javascript方法:
一览表:
Play() ---------------------------------------- 播放动画
StopPlay()------------------------------------停止动画
IsPlaying()----------------------------------- 动画是否正在播放
GotoFrame(frame_number)---------------- 跳转到某帧
TotalFrames()------------------------------- 获取动画总帧数
CurrentFrame()------------------------------回传当前动画所在帧数-1
Rewind()-------------------------------------使动画返回第一帧
SetZoomRect(left,top,right,buttom)-------放大指定区域
Zoom(percent)------------------------------改变动画大小
Pan(x_position,y_position,unit)------------使动画在x,y方向上平移
PercentLoaded()----------------------------返回动画被载入的百分比
LoadMovie(level_number,path)----------- 加载动画
TGotoFrame(movie_clip,frame_number)- movie_clip跳转到指定帧数
TGotoLabel(movie_clip,label_name)------ movie_clip跳转到指定标签
TCurrentFrame(movie_clip)--------------- 回传movie_clip当前帧-1
TCurrentLabel(movie_clip)-----------------回传movie_clip当前标签
TPlay(movie_clip)---------------------------播放movie_clip
TStopPlay(movie_clip)----------------------停止movie_clip的播放
GetVariable(variable_name)-----------------获取变量
SetVariable(variable_name,value)-----------变量赋值
TCallFrame(movie_clip,frame_number)---call指定帧上的action
TCallLabel(movie_clip,label)----------------call指定标签上的action
TGetProperty(movie_clip,property)--------获取movie_clip的指定属性
TSetProperty(movie_clip,property,number)-设置movie_clip的指定属性

 

FLASH 操作 JavaScript 关键要注意以下几点:

on (release) {
  fscommand ("send_var", inputVar);
}

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">

<embed src="javascript_to_flash.swf" quality=high
width=366 height=142
type="application/x-shockwave-flash"

pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash" name="myFlash" swLiveConnect="true">
</embed>

function myFlash_DoFSCommand(command, args)                {
  var myFlashObj = InternetExplorer ? myFlash : document.myFlash;
  alert (args);
}

 

http://www.macromedia.com/support/flash/ts/documents/java_script_comm.htm

shelly 发表于  2004-05-15 12:18:01


   PHPLIB 的模板嵌套    |   阅读全文   |   评论(1)  |  引用(trackback1)  

FROM :PHPE.NET

<?php

$t = new Template("/home/mydir/mytemplates/");

// 这三行同第一个例子一样
$t->set_file("MyFileHandle","MyTemplate.ihtml");
$t->set_var("some_color",$my_color);
$t->parse("MyOutput","MyFileHandle");

// 注意我们没有调用p()
// 这里,仍然没有输出任何东西

// 现在分析第二个模板
$t->set_file("WholeHandle","wholePage.ihtml");

// wholePage.ihtml 有 "{MyOutput}" 在里面
$t->parse("MyFinalOutput","WholeHandle");

// 所有的 {MyOutput} 被替换了
$t->p("MyFinalOutput");
// 输出 MyFinalOutput 的值

?>

 

下面是其中几个函数的使用

$T->Set_File("随便定义","模板文件.tpl");

$T->Set_Block("在set_file中定义的","<!-- 来自模板 -->","随便定义");

$T->Parse("在Set_Block中定义的","<!-- 来自模板 -->",true);

$T->Parse("随便输出结果","在Set_File中定义的");

设置循环格式为:

<!--(多于一个空格) BEGIN $handle(多于一个空格)-->

如何将模板生成静态网页

PHP代码:--------------------------------------------------------------------------------

<?php
//这里使用phplib模板
  ............
  ............
  $tpl->parse("output","html");
  $output = $tpl->get("output");// $output 为整个网页内容


  function wfile($file,$content,$mode='w') {
  $oldmask = umask(0);
  $fp = fopen($file, $mode);
  if (!$fp) return false;
  fwrite($fp,$content);
  fclose($fp);
  umask($oldmask);
  return true;
}
  // 写到文件里
  Wfile($FILE,$output);
  header("location:$FILE");//重定向到生成的网页
}
?>

 

唉,还是去官方站点啃E文档算了。

http://www.sanisoft.com/phplib/manual/index.php
--------------------------------------------------------------------------------

shelly 发表于  2004-05-13 16:08:02


   常用代理软件的端口映射方法。~~    |   阅读全文   |   评论(0)  |  引用(trackback1)  
出处: pc286.com   作者:不详


1,如何设置sygate在局域网内架设web,ftp,mail服务器?

--------------------------------------------------------------------------------

在SYGATE里面的ACCESS RULE来设置就可以了。设置方法如下:
比如你的拨号机器为192.168.0.1, WEB服务器在192.168.0.10。
那么设置方法就是在菜单tools
->access rules里面点add
->import a rule from system
-> 在下拉框种选择our web server,
然后用“detail”,看到的
direction :in,
client 192.168.0.10,
destport:80。


2,如何用windows的“internet连接共享”中设置端口转发?

--------------------------------------------------------------------------------

以在内部pc 192.168.1.2上架设web server为例子,web的一般默认端口是80,设置如下:
1,右击“桌面”的“网上邻居”,查看“属性”;
2,右击相应网络连接,查看“属性”中的“共享”,点击“设置”;
3,在“服务”的标签中点“填加”,在“服务名”中填写您要的名称,例如“WEB”,在“服务端口”中填写80,使用的协议选tcp。
4,在“专用网络服务器计算机的名称或地址”填写内部提供服务的服务器的ip地址,然后点击“确定”就可以了


3,如何设置winroute在局域网内架设web服务器?

--------------------------------------------------------------------------------

以架设web server为例:
1、打开Winroute Administration。
2、点击settings->advanced->port mapping按钮,在port mapping 页面中点击add,打开settings对话框。
3、在protocol中选择tcp。
4、选择Listen single port,并填写使用的端口号80。
5、在destination中填写内部提供web服务的计算机内部网络地址,比如 192.168.0.10。
6、点击ok。
7、重新连接Internet

4,如何设置wingate在局域网内架设web服务器?

--------------------------------------------------------------------------------

以架设web server为例:
1. 开启GateKeeper,在左面点击WWW Proxy Service,按鼠标右键,进入WWW Proxy Service的属性页,在General页中将Service端口设置发布Web所使用的端口,一般为80,这样Wingate开放了一个80端口的HTTP代理服务。
2. 进入Bindings页,选择第一个选项即Allow Connections coming in on any internet connections。
3. 重要的是在Non-Proxy Requests页,默认是选择了Reject Request,把它改为Pipe request through to predetermined。在下面Server和Port栏中,填局域网中内部提供Web服务的机器的IP地址和端口(比如192.168.0.10,80)。
这样,Wingate就将外部对80端口的HTTP请求转发到局域网中IP地址为192.168.0.10这台电脑的80端口去。只要192.168.0.80电脑的IIS正确设置了80端口的Web服务,就能被局域网外部访问到。
4. 确定并保存。

5,如何用PortTunnel做端口转发在局域网内架设web服务器?

--------------------------------------------------------------------------------

以架设web server为例,网关地址192.168.0.1,web server的内网地址为192.168.0.10:
1,首先,在192.168.0.1上没有占用80端口;
2,在192.168.0.1 上安装“PortTunnel”软件;
3,运行“PortTunnel”软件,在首窗口内点击“Add”按钮;
4,在弹出窗口的“main”里面配置如下:
name:web
enabled:打勾
port in:80
bind address:any(0.0.0.0)
port out:80
address out:192.168.0.10
5,点击“OK”按钮保存就可以了。
shelly 发表于  2004-05-08 14:12:23


   JS 巨好在线调试工具 :)    |   阅读全文   |   评论(2)  |  引用(trackback1)  
Debug Textarea


        


<HTML>
<HEAD>
<TITLE>Debug Textarea</TITLE>
<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>
</HEAD>
<style>
* {
 font-size: 12px
}
body {
 margin: 10px; padding: 0px
}
table.list{
 cursor: default;
 border:1px solid #cccccc
 background-color: #cccccc;
 border-collapse: collapse;
 border-Color: #cccccc;
}
</style>
<script language="javascript">
// Coded by windy_sk <windy_sk@126.com> 20040205

function reportError(msg,url,line) {
 var str = "You have found an error as below: \n\n";
 str += "Err: " + msg + " on line: " + line;
 alert(str);
 return true;
}

window.onerror = reportError;


document.onkeydown = function() {
 if(event.ctrlKey){
  switch(event.keyCode) {
   case 82: //r
    runcode();
    break;
   case 83: //s
    savecode();
    break;
   case 71: //g
    goto(prompt('Please input the line number', '1'));
    break;
   case 65: //a
    document.execCommand("SelectAll");
    break;
   case 67: //c
    document.execCommand("Copy");
    break;
   case 88: //x
    document.execCommand("Cut");
    break;
   case 86: //v
    document.execCommand("Paste");
    break;
   case 90: //z
    document.execCommand("Undo");
    break;
   case 89: //y
    document.execCommand("Redo");
    break;
   default:
    break;
  }
  event.keyCode = 0;
  event.returnValue = false;
 }
 return;
}


function show_ln(){
 var txt_ln  = document.getElementById('txt_ln');
 var txt_main  = document.getElementById('txt_main');
 txt_ln.scrollTop = txt_main.scrollTop;
 while(txt_ln.scrollTop != txt_main.scrollTop) {
  txt_ln.value += (i++) + '\n';
  txt_ln.scrollTop = txt_main.scrollTop;
 }
 return;
}


function editTab(){
 var code, sel, tmp, r;
 event.returnValue = false;
 sel =event.srcElement.document.selection.createRange();
 r = event.srcElement.createTextRange();

 switch (event.keyCode){
  case (8) :
   if (!(sel.getClientRects().length > 1)){
    event.returnValue = true;
    return;
   }
   code = sel.text;
   tmp = sel.duplicate();
   tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top);
   if(sel.parentElement() != tmp.parentElement()) return;;
   sel.setEndPoint('startToStart', tmp);
   sel.text = sel.text.replace(/^\t/gm, '');
   code = code.replace(/^\t/gm, '').replace(/\r\n/g, '\r');
   r.findText(code);
   r.select();
   break;
  case (9) :
   if (sel.getClientRects().length > 1){
    code = sel.text;
    tmp = sel.duplicate();
    tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top);
    if(sel.parentElement() != tmp.parentElement()) return;
    sel.setEndPoint('startToStart', tmp);
    sel.text = '\t'+sel.text.replace(/\r\n/g, '\r\t');
    code = code.replace(/\r\n/g, '\r\t');
    r.findText(code);
    r.select();
   }else{
    sel.text = '\t';
    sel.select();
   }
   break
  case (13) :
   tmp = sel.duplicate();
   tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top);
   if(sel.parentElement() != tmp.parentElement()) return;
   tmp.setEndPoint('endToEnd', sel);
   sel.text = '\r\n' + tmp.text.replace(tmp.text.replace(/^[\t ]+/g, ""),"");
   sel.select();
   break;
  default  :
   event.returnValue = true;
   break;
 }
 return;
}


function runcode() {
 var str = document.getElementById("txt_main").value;
 var code_win = window.open('about:blank');
 code_win.document.open();
 code_win.document.writeln("<script>");
 code_win.document.writeln("function reportError(msg,url,line){\nline-=14;\nvar str='You have found an error as below: \\n\\n';\nstr+='Err: '+msg+' on line: '+(line);\nalert(str);\nopener.goto(line);\nopener.focus();\nwindow.onerror=null;\nsetTimeout('self.close()',10);\nreturn true;\n}");
 code_win.document.writeln("window.onerror = reportError;");
 code_win.document.writeln("<\/script>");
 code_win.document.writeln(str);
 code_win.document.close();
 return;
}


function savecode() {
 var str = document.getElementById("txt_main").value;
 var code_win = window.open('about:blank','_blank','top=10000');
 code_win.document.open();
 code_win.document.writeln(str);
 code_win.document.close();
 code_win.document.execCommand('saveas','','code.html');
 code_win.close();
 return;
}


function goto(ln) {
 if(!/^\d+$/.test(ln) || ln==0) return;
 var obj = document.getElementById("txt_main");
 var rng = obj.createTextRange();
 var arr = obj.value.split(/\n/);
 if(ln>arr.length) ln = arr.length;
 var str_tmp = "";
 for(var i=0; i<ln-1; i++) {
  str_tmp += arr[i];
 }
 rng.moveStart('character',str_tmp.length);
 str_tmp = "";
 for(i=ln; i<arr.length; i++) {
  str_tmp += arr[i];
 }
 rng.moveEnd('character',-str_tmp.length);
 rng.select();
 return;
}

window.onload = function() {document.getElementById("txt_main").value = "<script>\nalert(')\n<\/script>";}
</script>
<table width='600' class='list' border='1' bgcolor='#eeeeee' bordercolorlight='#000000' bordercolordark='#FFFFFF' cellpadding='0' cellspacing='0'>
  <tr bgcolor='#cccccc'>
    <td colspan='2' height='20' align='center'><b>Debug Textarea</b></td>
  </tr>
  <tr>
    <td colspan='2'>
        <table width='95%' border='0' align='center' >
   <tr>
     <td align='center'><br />
       <textarea id='txt_ln' name='content' rows='10' style='width:40px;overflow:hidden;height:200px;border-right:0px;text-align:right;line-height:14px' onselectstart='this.nextSibling.focus();return false' readonly></textarea><textarea id='txt_main' name='content' rows='10' cols='80' onkeydown='editTab()' onkeyup='show_ln()' onscroll='show_ln()' wrap='off' style='overflow:auto;height:200px;padding-left:5px;border-left:0px;line-height:14px'></textarea>
       <script>for(var i=1; i<=20; i++) document.getElementById('txt_ln').value += i + '\n';</script>
     </td>
   </tr>
          <tr>
            <td align='center'><br />
              <input type='button' value=' 运 行 ' onclick='runcode()' accesskey='r'>&nbsp;&nbsp;
              <input type='button' value=' 保 存 ' onclick='savecode()' accesskey='s'>&nbsp;&nbsp;
              <input type='button' value=' 跳 转 ' onclick="goto(prompt('Please input the line number', '1'))"  accesskey='g'>&nbsp;&nbsp;
            </td>
          </tr>
        </table>
    </td>
  </tr>
</table>


 

shelly 发表于  2004-05-07 14:01:13


   巧用 ADODB.Stream 做页子的编码转换。    |   阅读全文   |   评论(0)  |  引用(trackback1)  

<body>
<div id=xxx></div>
<script language="JavaScript">

function charsetConvert(str,oldCharset,newCharset){
 var stream=new ActiveXObject("ADODB.Stream");
 stream.type=2;
 stream.Mode=0;
 stream.Open();
 stream.Charset=newCharset;
 stream.WriteText(str);
 stream.Position= 0;
 stream.Type= 2;
 stream.Charset=oldCharset;
 var s=stream.ReadText();
 stream.Close();
 return s;
}
var t=new Date();
xxx.innerHTML+=charsetConvert("UTF-8涓

shelly 发表于  2004-05-07 12:55:04


   Sorry,各位观众,我很傻    |   阅读全文   |   评论(5)  |  引用(trackback1)  
shelly 发表于  2004-05-03 11:43:18


   MySQL 条件正则资料页    |   阅读全文   |   评论(1)  |  引用(trackback1)  
shelly 发表于  2004-05-01 01:44:36


   JS 表格控制范例    |   阅读全文   |   评论(0)  |  引用(trackback2)  

<script language="JavaScript" type="text/JavaScript">
/*---------------------------------------------------------------------------
表格、单元格操作类
作者:龙卫国
user:lwg888
email:lwg888@163.com
时间:2004-2-17
功能:
    合并单元格,拆分单元格,向上插入行,向下插入行,向左插入列,
 向右插入列,删除行,删除列
设计思路:
    将表格按总行与总列数进行网状分割,为每个座标网格找到对应的单元格,
 这样,在操作过程中就可以随时找出每个单元格的位置及属性
适用IE5.0以上
转载请保留作者信息
-----------------------------------------------------------------------------*/

function LwgTable(){
    this.tdobj;
 this.trobj;
 this.tblobj;
 this.xy=new Array();
 this.x;
 this.y;
}

function tmpObj (x,y,obj) {
    this.x   = x;
 this.y   = y;
 this.obj = obj;
}

LwgTable.prototype.getObj=function(){
    var tdobj=document.selection.createRange().parentElement();
 if (!tdobj || tdobj.tagName != "TD")return false;
 var trobj=tdobj.parentElement;
 if (!trobj || trobj.tagName != "TR")return false;
 var tblobj=trobj.parentElement.parentElement;
 if (!tblobj || tblobj.tagName != "TABLE")return false;
 this.tdobj=tdobj;
 this.trobj=trobj;
 this.tblobj=tblobj;
 return true;
}

LwgTable.prototype.setxy=function(){
 for (var i=0;i<this.tblobj.rows.length;i++)
     this.xy[i]=new Array();
 
 for (var i=0;i<this.tblobj.rows.length;i++){
  var tmp_row=this.tblobj.rows[i];
  var tmp_y=0;
  for (var n=0;n<tmp_row.cells.length;n++){
      var tmp_cell=tmp_row.cells[n];
   if (this.tdobj==tmp_cell){
       this.x=i;
    tmp_y=this.y=this.findy(i,tmp_y);
   }
   for (var c=0;c<tmp_cell.colSpan;c++){
       for (var r=0;r<tmp_cell.rowSpan;r++){
     var tmp_ir=i+r;
     var tmp_y=this.findy(tmp_ir,tmp_y);
     if (c==0 && r==0) var tmp_obj=new tmpObj(i,tmp_y,tmp_cell);
     this.xy[tmp_ir][tmp_y]=tmp_obj;
    }
   }
   tmp_y++;
  }
 }
}

LwgTable.prototype.findy=function(x,y){
    if (!this.xy[x][y])return y;
 else return this.findy(x,y+1);
}

LwgTable.prototype.mergeCell = function (what){
 switch (what){
   case "up":
  var tmp_obj=this.checkToMerge(-1,0);
  if (!tmp_obj)return false;
  if (this.tdobj.innerHTML != "&nbsp;")tmp_obj.obj.innerHTML+=this.tdobj.innerHTML;
  tmp_obj.obj.rowSpan+=this.dropCell(this.trobj.rowIndex,this.tdobj.cellIndex,'r');
     break;
   case "down":
  var tmp_obj=this.checkToMerge(this.tdobj.rowSpan,0);
  if (!tmp_obj)return false;
  if (tmp_obj.obj.innerHTML != "&nbsp;")this.tdobj.innerHTML+=tmp_obj.obj.innerHTML;
  this.tdobj.rowSpan+=this.dropCell(this.trobj.rowIndex+this.tdobj.rowSpan,tmp_obj.obj.cellIndex,'r');
     break;
   case "left":
  var tmp_obj=this.checkToMerge(0,-1);
  if (!tmp_obj)return false;
  if (this.tdobj.innerHTML != "&nbsp;")tmp_obj.obj.innerHTML+=this.tdobj.innerHTML;
  tmp_obj.obj.colSpan+=this.dropCell(this.trobj.rowIndex,this.tdobj.cellIndex,'c');
     break;
   case "right":
  var tmp_obj=this.checkToMerge(0,this.tdobj.colSpan);
  if (!tmp_obj)return false;
  if (tmp_obj.obj.innerHTML != "&nbsp;")this.tdobj.innerHTML+=tmp_obj.obj.innerHTML;
  this.tdobj.colSpan+=this.dropCell(this.trobj.rowIndex,this.tdobj.cellIndex+1,'c');
  break;
   default :
     break;
 }
}

LwgTable.prototype.checkToMerge = function (x,y){
 if (!this.xy[this.x+x])return false;
 var tmp_obj=this.xy[this.x+x][this.y+y];
 if (!tmp_obj)return false;
 if (x!=0){
  if (tmp_obj.y!=this.y || tmp_obj.obj.colSpan!=this.tdobj.colSpan)return false;
 }
 else if (y != 0){
  if (tmp_obj.x!=this.x || tmp_obj.obj.rowSpan!=this.tdobj.rowSpan)return false;
 }
 return tmp_obj;
}

LwgTable.prototype.dropCell=function (x,y,kind){
 var trobj=this.tblobj.rows[x];
 if (!trobj)return false;
 var rowspans=trobj.cells[y].rowSpan;
 var colspans=trobj.cells[y].colSpan;
 trobj.deleteCell(y);
 if (kind=="r")return rowspans;
 else if (kind=="c")return colspans;
}

LwgTable.prototype.changeRowspan = function (x,num){
 var y=0;
 while (y<this.xy[x].length){
  var tmp=this.xy[x][y];
  if (tmp.obj.rowSpan > 1){
   tmp.obj.rowSpan+=num;
  }
  y+=tmp.obj.colSpan;
 }
}

LwgTable.prototype.insertRow = function (what,num){
 var x  = this.x;
 var x1 = (what=='up') ? x : (x + 1);
 if (x1==this.tblobj.rows.length){
     for (var n=0;n<num;n++){
      var newRow=this.tblobj.insertRow(x1);
   var lastxy=this.xy[this.xy.length-1];
   var i=0;
   while (i<lastxy.length){
       var newCell=newRow.insertCell();
    newCell.innerHTML="&nbsp;";
    newCell.mergeAttributes(lastxy[i].obj);
    newCell.rowSpan=1
    i+=lastxy[i].obj.colSpan;
   }
  }
  return true;
 }
 for (var n=0;n<num;n++){
     var trobj=this.tblobj.rows[x];
     var newRow=this.tblobj.insertRow(x1);
     var delcell=new Array();
     for(var i=0;i<trobj.cells.length;i++){
      if (trobj.cells[i].rowSpan==1){
       var newCell=newRow.insertCell();
    newCell.innerHTML="&nbsp;";
          newCell.mergeAttributes(trobj.cells[i])
      }
   else if (what=='up'){
       var newCell=newRow.insertCell();
    trobj.cells[i].rowSpan+=1;
       newCell.innerHTML=trobj.cells[i].innerHTML;
       delcell[i]=1;
          newCell.mergeAttributes(trobj.cells[i])
      }
     }
     var deli=0;
     for (i in delcell){
         trobj.deleteCell(i-deli);
      deli++;
     }
 }
 this.changeRowspan(this.x,num);
}

LwgTable.prototype.deleteRow = function (){
 if (this.trobj.rowIndex==this.tblobj.rows.length-1){
     this.tblobj.deleteRow(this.trobj.rowIndex);
        return true;
 }
 var y=0;
 while (y<this.xy[this.x].length){
     var tmp_obj=this.xy[this.x][y].obj;
  if (tmp_obj.rowSpan > 1){
      tmp_obj.rowSpan-=1;
   if (tmp_obj.parentElement.rowIndex == this.x){
    if (tmp_obj.cellIndex<this.trobj.cells.length-1)var cellIndex=this.xy[this.x+1][y+tmp_obj.colSpan].obj.cellIndex;
    else var cellIndex=this.tblobj.rows[this.x+1].cells.length;
    newCell=this.tblobj.rows[this.x+1].insertCell(cellIndex)
       newCell.replaceNode(tmp_obj);
   }
  }
  y+=tmp_obj.colSpan;
 }
 this.tblobj.deleteRow(this.trobj.rowIndex);
}

LwgTable.prototype.deleteCol = function (){
    var x=0;
 while (x<this.xy.length){
     var tmp_obj=this.xy[x][this.y].obj;
  x+=tmp_obj.rowSpan
  if (tmp_obj.colSpan==1){
      tmp_obj.parentElement.deleteCell(tmp_obj.cellIndex);
  }
  else tmp_obj.colSpan-=1;
 }
}

LwgTable.prototype.insertCol = function (what,num){
 var x=0;
 while (x<this.xy.length){
     var tmp_obj=this.xy[x][this.y].obj;
  x+=tmp_obj.rowSpan
  if (tmp_obj.colSpan==1){
      var cellIndex=(what=="right")?(tmp_obj.cellIndex+1):tmp_obj.cellIndex;
   for (var n=0;n<num;n++){
       var newCell=tmp_obj.parentElement.insertCell(cellIndex);
    newCell.innerHTML="&nbsp;";
          newCell.mergeAttributes(tmp_obj)
   }
  }
  else tmp_obj.colSpan+=num;
 }
}

LwgTable.prototype.rowSplit = function (num){
    if (num<2)return false;
 while (num>1){
     var y=0;
  var tmp_x=this.x+this.tdobj.rowSpan-1;
  var tmp_index=0;
  while (y<this.xy[tmp_x].length){
      var tmp_obj=this.xy[tmp_x][y]
   if(this.tdobj.rowSpan>1){
    if (tmp_obj.obj==this.tdobj){
        var newCell=this.tblobj.rows[tmp_x].insertCell(tmp_index);
        newCell.innerHTML="&nbsp;";
              newCell.mergeAttributes(this.tdobj)
     newCell.rowSpan=1
    }
    if (tmp_x==tmp_obj.x)tmp_index++;
   }
   else {
    if (tmp_obj.obj==this.tdobj){
        var newRow=this.tblobj.insertRow(this.x+1);
     var newCell=newRow.insertCell(0);
        newCell.innerHTML="&nbsp;";
    }
    else tmp_obj.obj.rowSpan+=1;
   }
      y+=tmp_obj.obj.colSpan;
  }
  if(this.tdobj.rowSpan>1)this.tdobj.rowSpan-=1
  num-=1
 }
}

LwgTable.prototype.colSplit = function (num){
 var x=0;
 while (x<this.xy.length){
     var tmp_obj=this.xy[x][this.y].obj;
  x+=tmp_obj.rowSpan
  if (tmp_obj==this.tdobj){
   for (var n=0;n<num;n++){
       var newCell=tmp_obj.parentElement.insertCell(this.tdobj.cellIndex);
    newCell.innerHTML="&nbsp;";
          newCell.mergeAttributes(tmp_obj)
   }
  }
  else tmp_obj.colSpan+=num;
 }
}

function table_change(){
    var t=new LwgTable();
 if (!t.getObj())return false;
 t.setxy();
 var args=table_change.arguments;
 switch (args[0]){
     case "insertrow_up":
    t.insertRow('up',args[1])
       break
     case "insertrow_down":
       t.insertRow('down',args[1])
    break
     case "deleterow":
       t.deleteRow()
    break
     case "deletecol":
       t.deleteCol()
    break
     case "insertcol_left":
       t.insertCol('left',args[1])
    break
     case "insertcol_right":
       t.insertCol('right',args[1])
    break
     case "rowsplit":
       t.rowSplit(args[1])
    break
     case "colsplit":
       t.colSplit(args[1])
    break
     case "merge":
       t.mergeCell(args[1]);
    break
  default:
    break;
 }
}

</script>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<table border="0" cellpadding="5" cellspacing="1" bgcolor="#999999">
  <tr bgcolor="#FFFFFF">
    <td align="right" bgcolor="#efefef">合并单元格</td>
    <td><input type="button" name="Submit2" value="向上" onClick="table_change('merge','up')">
  <input type="button" name="Submit22" value="向下" onClick="table_change('merge','down')">
      <input type="button" name="Submit23" value="向左" onClick="table_change('merge','left')">
      <input type="button" name="Submit24" value="向右" onClick="table_change('merge','right')"></td>
  </tr>
  <tr bgcolor="#FFFFFF">
    <td align="right" bgcolor="#efefef">拆分单元格</td>
    <td><input type="button" name="Submit2424" value="拆成3行" onClick="table_change('rowsplit',3)">
      <input type="button" name="Submit24242" value="拆成2列" onClick="table_change('colsplit',2)"></td>
  </tr>
  <tr bgcolor="#FFFFFF">
    <td align="right" bgcolor="#efefef">插入行</td>
    <td><input type="button" name="Submit242" value="向上插入3行" onClick="table_change('insertrow_up',3)">
      <input type="button" name="Submit2422" value="向下插入2行" onClick="table_change('insertrow_down',2)"></td>
  </tr>
  <tr bgcolor="#FFFFFF">
    <td align="right" bgcolor="#efefef">插入列</td>
    <td><input type="button" name="Submit2423" value="向左插入3列" onClick="table_change('insertcol_left',3)">
      <input type="button" name="Submit24223" value="向右插入2列" onClick="table_change('insertcol_right',2)"></td>
  </tr>
  <tr bgcolor="#FFFFFF">
    <td align="right" bgcolor="#efefef">删除行</td>
    <td><input type="button" name="Submit24222" value="删除行" onClick="table_change('deleterow')"></td>
  </tr>
  <tr bgcolor="#FFFFFF">
    <td align="right" bgcolor="#efefef">删除列</td>
    <td><input type="button" name="Submit242222" value="删除列" onClick="table_change('deletecol')"></td>
  </tr>
</table>
使用方式:先在单元格中建立一个选区,再点击上面按钮<br>
<table width="100%" border="1">
  <tr>
    <td colspan="2">1</td>
    <td>2</td>
    <td>3</td>
  </tr>
  <tr>
    <td bgcolor="#CCCCCC">&nbsp;</td>
    <td rowspan="2">47</td>
    <td>5</td>
    <td>6</td>
  </tr>
  <tr>
    <td rowspan="3">45</td>
    <td>8</td>
    <td bgcolor="#CCCCCC">9</td>
  </tr>
  <tr>
    <td rowspan="3">10</td>
    <td bgcolor="#FFFFCC">11</td>
    <td rowspan="2">1214</td>
  </tr>
  <tr>
    <td bgcolor="#CCCCCC">13</td>
  </tr>
  <tr>
    <td>123</td>
    <td bgcolor="#CCCCCC">&nbsp;</td>
    <td>6</td>
  </tr>
</table>

合并单元格
拆分单元格
插入行
插入列
删除行
删除列
使用方式:先在单元格中建立一个选区,再点击上面按钮
1 2 3
  47 5 6
45 8 9
10 11 1214
13
123   6
shelly 发表于  2004-04-29 13:14:54


   晕哦,申请这么长的EMAIL。还要我备份    |   阅读全文   |   评论(4)  |  引用(trackback1)  
shelly 发表于  2004-04-28 09:25:56


   JS Check 值操作。/:D 留个范例在这里。    |   阅读全文   |   评论(0)  |  引用(trackback1)  

<form name="myform">
<input type="checkbox" name="price" value=1000 onclick=countot()>1000<BR>
<input type="checkbox" name="price" value=2000 onclick=countot()>2000<BR>
<input type="checkbox" name="price" value=3000 onclick=countot()>3000<BR>
<input type="checkbox" name="price" value=4000 onclick=countot()>4000<BR>
<input type="text" name="labelForPrice" value=0>
</form>
<script>
function countot()
{
     var objSrc=document.myform.price;
     var totPrice=0;
     for(var i=0;i<objSrc.length;i++)
     {
            if(objSrc[i].checked == true)
                   totPrice+=parseInt(objSrc[i].value);

     }
     document.myform.labelForPrice.value=totPrice;
}
</script>

 

1000
2000
3000
4000
shelly 发表于  2004-04-27 19:11:29


   最近想接触一下JSP。    |   阅读全文   |   评论(0)  |  引用(trackback1)  

/:~ 单就看了看开发环境的安装就头大。晕死。不如 PHP 的好。就几个DLL文件链到APACHE就OK了~~~

唉~~~~~~  ~~~

shelly 发表于  2004-04-23 14:07:09


   Google 搜索技巧    |   阅读全文   |   评论(0)  |  引用(trackback0)  

google搜索技巧

搜索技巧

一,GOOGLE简介

Google是一个搜索引擎,由两个斯坦福大学博士生Larry Page与Sergey Brin于1998年9月发明,Google Inc. 于1999年创立。

二,GOOGLE特色

GOOGLE支持多达132种语言,包括简体中文和繁体中文;
GOOGLE网站只提供搜索引擎功能,没有花里胡哨的累赘;
GOOGLE速度极快,据说有8000多台服务器,200多条T3级宽带;

GOOGLE的专利网页级别技术PageRank能够提供高命中率的搜索结果;
GOOGLE的搜索结果摘录查询网页的部分具体内容,而不仅仅是网站简介;
GOOGLE智能化的“手气不错”功能,提供可能最符合要求的网站;
GOOGLE的“网页快照”功能,能从GOOGLE服务器里直接取出缓存的网页。

三,基本搜索:+,-,OR

GOOGLE无需用明文的“+”来表示逻辑“与”操作,只要空格就可以了。

示例:搜索所有包含关键词“易筋经”和“吸星大法”的中文网页
搜索:“易筋经 吸星大法”
结果:已搜索有关易筋经 吸星大法的中文(简体)网页。共约有726项查询结果,这是第1-10项。搜索用时0.13秒。

注意:文章中搜索语法外面的引号仅起引用作用,不能带入搜索栏内。

GOOGLE用减号“-”表示逻辑“非”操作。

示例:搜索所有包含“易筋经”而不含“吸星大法”的中文网页
搜索:“易筋经 -吸星大法”
结果:已搜索有关易筋经 -吸星大法的中文(简体)网页。共约有5,440项查询结果,这是第1-10项。搜索用时0.13秒。

注意:这里的“+”和“-”号,是英文字符,而不是中文字符的“+”和“-”。此外,操作符与作用的关键字之间,不能有空格。比如“易筋经 - 吸星大法”,搜索引擎将视为逻辑“与”操作,中间的“-”被忽略。

GOOGLE用大写的“OR”表示逻辑“或”操作。但是,关键字为中文的或查询似乎还有BUG,无法得到正确的查询结果。

示例:搜索包含布兰妮“Britney”或者披头士“Beatles”、或者两者均有的中文网页。
搜索:“britney OR beatles”
结果:已搜索有关britney OR beatles的中文(简体)网页。共约有14,600项查询结果,这是第1-10项。搜索用时0.08秒。
搜索:“布兰妮 OR 披头士”
结果:找不到和您的查询-布兰妮 OR 披头士-相符的网页。

注意:小写的“or”,在查询的时候将被忽略;这样上述的操作实际上变成了一次“与”查询。

“+”和“-”的作用有的时候是相同的,都是为了缩小搜索结果的范围,提高查询结果命中率。

例:查阅天龙八部具体是哪八部。

分析:如果光用“天龙八部”做关键字,搜索结果有26,500项,而且排前列的主要与金庸的小说《天龙八部》相关,很难找到所需要的资讯。可以用两个方法减少无关结果。

1,如果你知道八部中的某一部,比如阿修罗,增加“阿修罗”关键字,搜索结果就只有995项,可以直接找到全部八部,“天龙八部 阿修罗”。

2,如果你不知道八部中的任何一部,但知道这与佛教相关,可以排除与金庸小说相关的记录,查询结果为1,010项,可以迅速找到需要的资料,“天龙八部 佛教 -金庸”。

四,辅助搜索:通配符、大小写、句子、忽略字符以及强制搜索

GOOGLE不支持通配符,如“*”、“?”等,只能做精确查询,关键字后面的“*”或者“?”会被忽略掉。

GOOGLE对英文字符大小写不敏感,“GOD”和“god”搜索的结果是一样的。

GOOGLE的关键字可以是词组(中间没有空格),也可以是句子(中间有空格),但是,用句子做关键字,必须加英文引号。

示例:搜索包含“long, long ago”字串的页面。
搜索:“"long, long ago"”
结果:已向英特网搜索"long, long ago". 共约有28,300项查询结果,这是第1-10项。搜索用时0.28秒。

注意:和搜索英文关键字串不同的是,GOOGLE对中文字串的处理并不十分完善。比如,搜索“"啊,我的太阳"”,我们希望结果中含有这个句子,事实并非如此。查询的很多结果,“啊”、“我的”、“太阳”等词语是完全分开的,但又不是“啊 我的 太阳”这样的与查询。显然,GOOGLE对中文的支持尚有欠缺之处。

GOOGLE对一些网路上出现频率极高的词(主要是英文单词),如“i”、“com”,以及一些符号如“*”、“.”等,作忽略处理,如果用户必须要求关键字中包含这些常用词,就要用强制语法“+”。

示例:搜索包含“Who am I ?”的网页。如果用“"who am i ?"”,“Who”、“I”、“?”会被省略掉,搜索将只用“am”作关键字,所以应该用强制搜索。
搜索:“"+who +am +i"”
结果:已向英特网搜索"+who +am +i". 共约有362,000项查询结果,这是第1-10项。搜索用时0.30秒。

注意:英文符号(如问号,句号,逗号等)无法成为搜索关键字,加强制也不行。

五,高级搜索:site,link,inurl,allinurl,intitle,allintitle

“site”表示搜索结果局限于某个具体网站或者网站频道,如“sina.com.cn”、“edu.sina.com.cn”,或者是某个域名,如“com.cn”、“com”等等。如果是要排除某网站或者域名范围内的页面,只需用“-网站/域名”。

示例:搜索中文教育科研网站(edu.cn)上所有包含“金庸”的页面。
搜索:“金庸 site:edu.cn”
结果:已搜索有关金庸 site:edu.cn的中文(简体)网页。共约有2,680项查询结果,这是第1-10项 。搜索用时0.31秒。

示例:搜索包含“金庸”和“古龙”的中文新浪网站页面,
搜索:“金庸 古龙 site:sina.com.cn”
结果:已在sina.com.cn搜索有关金庸 古龙的中文(简体)网页。共约有869项查询结果,这是第1-10项。搜索用时0.34秒。

注意:site后的冒号为英文字符,而且,冒号后不能有空格,否则,“site:”将被作为一个搜索的关键字。此外,网站域名不能有“http”以及“www”前缀,也不能有任何“/”的目录后缀;网站频道则只局限于“频道名.域名”方式,而不能是“域名/频道名”方式。诸如“金庸 site:edu.sina.com.cn/1/”的语法是错误的。

“link”语法返回所有链接到某个URL地址的网页。

示例:搜索所有含指向google吧“www.google8.net”链接的网页。
搜索:“link:www.google8.net
结果:搜索有链接到www.google8.net的网页。共约有55项查询结果,这是第1-10项。搜索用时0.13秒。

注意:“link”不能与其他语法相混合操作,所以“link:”后面即使有空格,也将被GOOGLE忽略。

inurl语法返回的网页链接中包含第一个关键字,后面的关键字则出现在链接中或者网页文档中。有很多网站把某一类具有相同属性的资源名称显示在目录名称或者网页名称中,比如“MP3”、“GALLARY”等,于是,就可以用INURL语法找到这些相关资源链接,然后,用第二个关键词确定是否有某项具体资料。INURL语法和基本搜索语法的最大区别在于,前者通常能提供非常精确的专题资料。

示例:查找MIDI曲“沧海一声笑”。
搜索:“inurl:midi 沧海一声笑”
结果:已搜索有关inurl:midi 沧海一声笑的中文(简体)网页。共约有14项查询结果,这是第1-10项。搜索用时0.01秒。

示例:查找微软网站上关于windows2000的安全课题资料。
搜索:“inurl:security windows2000 site:microsoft.com”
结果:已在microsoft.com内搜索有关 inurl:security windows2000的网页。共约有198项查询结果,这是第1-10项。搜索用时0.37秒。

注意:“inurl:”后面不能有空格,GOOGLE也不对URL符号如“/”进行搜索。GOOGLE对“cgi-bin/phf”中的“/”当成空格处理。

allinurl语法返回的网页的链接中包含所有查询关键字。这个查询的对象只集中于网页的链接字符串。

示例:查找可能具有PHF安全漏洞的公司网站。通常这些网站的CGI-BIN目录中含有PHF脚本程序(这个脚本是不安全的),表现在链接中就是“域名/cgi-bin/phf”。
语法:“allinurl:"cgi-bin" phf +com”
搜索:已向英特网搜索allinurl:"cgi-bin" phf +com. 共约有40项查询结果,这是第1-10项。搜索用时0.06秒。

allintitle和intitle的用法类似于上面的allinurl和inurl,只是后者对URL进行查询,而前者对网页的标题栏进行查询。网页标题,就是HTML标记语言title中之间的部分。网页设计的一个原则就是要把主页的关键内容用简洁的语言表示在网页标题中。因此,只查询标题栏,通常也可以找到高相关率的专题页面。

示例:查找日本明星藤原纪香的照片集。
搜索:“intitle:藤原纪香 写真”
结果:已搜索有关intitle:藤原纪香 写真的中文(简体)网页。共约有284项查询结果,这是第1-10项。搜索用时0.03秒。

GOOGLE的罕用高级搜索语法:related,cache,info

related用来搜索结构内容方面相似的网页。例:搜索所有与中文新浪网主页相似的页面(如网易首页,搜狐首页,中华网首页等),“related:www.sina.com.cn/index.shtml”。

cache用来搜索GOOGLE服务器上某页面的缓存,这个功能同“网页快照”,通常用于查找某些已经被删除的死链接网页,相当于使用普通搜索结果页面中的“网页快照”功能。

info用来显示与某链接相关的一系列搜索,提供cache、link、related和完全包含该链接的网页的功能。

示例:查找和GOOGLE吧相关的一些资讯。
搜索:“info:www.google8.net”
结果:有关www.google8.net的网页信息。
google8.net|google的绿色通道|
→Google吧 搜索引擎的学习、记录、思考、应用。[blog
摘要:搜索引擎、google排名、网站推广、网络营销], ...


Google 提供这个网址的信息:


  • 查看Google网页快照里www.google8.net的存档
  • 寻找和www.google8.net类似的网页
  • 寻找网页有链接到www.google8.net
  • 寻找网页包含有www.google8.net



六,其他重要功能

目录服务

如果不想搜索网页,而是想寻找某些专题网站,可以访问GOOGLE的分类目录“http://directory.google.com/”,中文目录是“http://directory.google.com/Top/World/Chinese_Simplified/”。不过由于GOOGLE的目录由Dmoz志愿者服务,而GOOGLE在国内名气相对比较小,因此中文目录下收录站点很少。

工具条

为了方便搜索者,GOOGLE提供了工具条,集成于浏览器中,用户无需打开GOOGLE主页就可以在工具条内输入关键字进行搜索。此外,工具条还提供了其他许多功能,如显示页面PageRank等。最方便的一点在于用户可以快捷的在GOOGLE主页、目录服务、新闻组搜索、高级搜索和搜索设定之间切换。欲安装GOOGLE的工具条,可以访问“http://toolbar.google.com/”,按页面提示可以自动下载并安装。

新闻组(USENET)搜索

新闻组中有大量的有价值信息,DEJA一直是新闻组搜索引擎中的佼佼者。2001年2月份,GOOGLE将DEJA收购并提供了所有DEJA的功能。现在,除了搜索之外,GOOGLE还支持新闻组的WEB方式浏览和张贴功能。

输入“http://groups.google.com/”后,便进入GOOGLE新闻组界面。可惜现在还没有中文界面。因为新闻组中的帖子实在是多,所以我点击“Advaced Groups Search”进入高级搜索界面http://groups.google.com/advanced_group_search。新闻组高级搜索界面提供对关键字、新闻组、主题、作者、帖子序号、语言和发布日期的条件搜索。其中作者项指作者发帖所用的唯一识别号电子信箱。比如要在alt.chinese.text内搜索著名老牌网络写手图雅的帖子,可以用下列指令“group:alt.chinese.text author:tuya@ccmail.uoregon.edu”。不过一般而言,我更推荐使用图形搜索界面,方便而且直观。

搜索结果翻译

曾经为那些你不懂的法文、西班牙文页面烦恼么?现在,GOOGLE支持一项搜索结果翻译功能,可以把非英文的搜索结果翻译成英文!!虽然目前只支持有限的拉丁语、法语、西班牙语、德语和葡萄牙文,但是我不得不承认,这是个伟大的改进。

不过,目前只能在英文状态GOOGLE下实现这个功能。进入GOOGLE的设置页面,http://www.google.com/preferences,有一个“BETA: Enable translation of search results into your interface language. ”的选项,把它选中,就OK了。

搜索结果过滤

网络上的成人内容浩如烟海,而且很多站点具有欺骗或者其他不良企图,浏览者很容易掉入其中的陷阱。为此,GOOGLE新设立了成人内容过滤功能,见GOOGLE的设置页面,http://www.google.com/preferences,最底下有一个选项SafeSearch Filtering。不过,中文状态下的GOOGLE尚没有这个功能。

PDF文档搜索

我对GOOGLE尤其欣赏的一点就是它提供对PDF文档内文的检索。目前GOOGLE检索的PDF文档大约有2500万左右。这真是太美妙了。PDF是ADOBE公司开发的电子文档格式,现在已经成为互联网的电子化出版标准。PDF文档通常是一些图文并茂的综合性文档,提供的资讯一般比较集中全面。

示例:搜索关于电子商务(ECOMMERCE)的PDF文档。
搜索:“inurl:pdf ecommerce”
结果:已向英特网搜索inurl:pdf ecommerce. 共约有19,200项查询结果,这是第1-10项。搜索用时0.11秒。

下面是某项搜索结果:

[PDF] www.usi.net/pdf/outsoucing-ecommerce.pdf
Outsourcing Electronic Commerce Business Case White Paper By: John P. Sahlin, Product
Marketing Professonial (PMP) Implementation Manager, Web Engineering ...
一般文字档 - 类似网页

可以看到,GOOGLE在PDF档前加上了[PDF]的标记,而且,GOOGLE把PDF文件转换成了文字档,点击“一般文字档”,可以粗略的查看该PDF文档的大致内容。当然,PDF原有的图片以及格式是没有了。

图像文档搜索

GOOGLE提供了Internet上图像文件的搜索功能!!目前该功能尚在B测试阶段,但已经非常好用。访问地址是“images.google.com”。你可以在关键字栏位内输入描述图像内容的关键字,如“britney spears”,也可以输入描述图像质量或者其他属性的关键字,如“high quality”。

GOOGLE给出的搜索结果具有一个直观的缩略图(THUMBNAIL),以及对该缩略图的简单描述,如图像文件名称,以及大小等。点击缩略图,页面分成两祯,上祯是图像之缩略图,以及页面链接,而下祯,则是该图像所处的页面。屏幕右上角有一个“Remove Frame”的按钮,可以把框架页面迅速切换到单祯的结果页面,非常方便。GOOGLE还提供了对成人内容图像的限制功能,可以让搜索者免受不必要的骚扰。

不过,非常遗憾的是,图像搜索功能还不支持中文。

七,搜索技巧杂谈

关键词的选择在搜索中起到决定性的作用,所有搜索技巧中,关键词选择是最基本也是最有效的。

例一:查找《镜花缘》一书中淑士国酒保的酸话原文。

分析:如果按照一般的思路,找某部小说中的具体段落,就需要用搜索引擎先找到这本书,然后再翻到该段落。这样做当然可以,但是效率很低。如果了解目标信息的构成,用一些目标信息所特有的字词,可以非常迅速的查到所需要的资料。也就是说,高效率的搜索关键字不一定就是目标信息的主题。在上面的例子中,酒保谈到酒的浓淡与贵贱的关系时,之乎者也横飞。因此,可以用特定的词语一下子找到目标资料。

搜索:“酒 贵 贱 之”,OK,找到的第一条信息就是镜花缘的这一段落:“先生听者:今以酒醋论之,酒价贱之,醋价贵之。因何贱之?为甚贵之?真所分之,在其味之。酒昧淡之,故而贱之;醋味厚之,所以贵之。...”

以上的关键字选择技巧可以谓之“特定词法”。

例二:“黄花闺女”一词中“黄花”是什么意思。

分析:“黄花闺女”是一个约定的俗语,如果只用“黄花闺女 黄花”做关键词,搜索结果将浩如烟海,没什么价值,因此必须要加更多的关键词,约束搜索结果。选择什么关键词好呢?备选的有“意思”、“含义”、“来历”、“由来”、“典故”、“出典”、“渊源”等,可以猜到的是,类似的资料,应该包含在一些民俗介绍性的文字里,所以用诸如“来历”、“由来”、“出典”等词汇的概率更高一些。

搜索:“黄花闺女 黄花 由来”,查到“黄花”原来出典于《太平御览》,与南朝的寿阳公主相关。如果想获得第一手资料,那就可以用“太平御览 寿阳公主”做搜索了。

以上的关键字选择技巧可以谓之“近义词法”。

例三:刘德华同志的胸围是多少。

分析:首先声明,这是某个MM要我做的搜索,我把它作为搜索案例而已,没其他的意思。非常直接的搜索是,“刘德华 胸围”,但事实上,这么搜索出来的结果,尽是一些诸如“刘德华取笑莫文蔚胸围太小”之类的八卦新闻,无法快速得到所需要的资料。可以想到的是,需要的资料应该包含在刘德华的全面介绍性文字中,除了胸围,应该还包括他的身高,体重,生日等一系列相关信息。OK,这样就可以进一步的增加其他约束性关键词以缩小搜索范围。

搜索:“刘德华 胸围 身高”,没有料到的情况发生了,网上炙手可热的痞子蔡《第一次亲密接触》里居然含有这样关键字,阿泰“改编自刘德华《忘情水》的变态歪歌”、“用身高体重三围和生日来加以编号”。好办,把这部小说去掉,“刘德华 胸围 身高 -阿泰”,OK,结果出来了,华仔胸围84cm。说明一下,为什么用“阿泰”而不用“第一次亲密接触”呢?这是因为小说的名字被转载的时候可能有变动,但里面角色的名字是不会变的。

以上的关键字选择技巧可以谓之“相关词法”。

其他常用搜索个案

例一:找人

分析:一个人在网上揭示的资料通常有:姓名,网名,性别,年龄,毕业学校,工作单位,外号,住址,电话,信箱,BP,手机号码,ICQ号,OICQ号等等。所以,如果你要了解一下你多年没见过的同学,那不妨用上述信息做关键字进行查询,也许会有大的收获。

例二:找软件

分析一:最简单的搜索当然就是直接以软件名称以及版本号为关键字查询。但是,仅仅有软件名称和目标网站,显然还不行,因为搜索到的可能是软件的相关新闻。应该再增加一个关键字。考虑到下载页面上常有“点击此处下载”或者“download”的提示语,因此,可以增加“下载”或者“download”为关键字。
搜索:“winzip 8.0 下载”
结果:已搜索有关winzip 8.0 下载的中文(简体)网页。共约有6,670项查询结果,这是第1-10项。搜索用时0.22秒。

分析二:很多网站设有专门的下载目录,而且就命名为“download”,因此,可以用INURL语法直接搜索这些下载目录。
搜索:“winzip 8.0 inurl:download”
结果:已搜索有关winzip 8.0 inurl:download的中文(简体)网页。共约有358项查询结果,这是第1-10项。搜索用时0.44秒。

在互联网上随意的下载软件是不安全的,因为供下载的软件有可能带有病毒或者捆绑了木马,所以,对下载网站作一个限定,是一个稳妥的思路。可以用SITE语法达到这个目的。

共享软件下载完之后,使用的时候,软件总跳出警示框,或者软件的功能受到一定限制。由于中国的网民多是穷棒子,所以应该再找一个注册码。找注册码,除了软件的名称和版本号外,还需要有诸如“serial number”、“sn”、“序列号”等关键字。现在,来搜索一下winzip8.0的注册码。
搜索:“winzip 8.0 sn”
结果:已向英特网搜索winzip 8.0 sn. 共约有777项查询结果,这是第1-10项。搜索用时0.30秒。

例三:找图片

除了GOOGLE提供的专门图片搜索功能,还可以组合使用一些搜索语法,达到图片搜索之目的。

分析一:专门的图片集合,提供图片的网站通常会把图片放在某个专门目录下,如“gallary”、“album”、“photo”、“image”等。这样就可以使用INURL语法迅速找到这类目录。现在,试着找找小甜甜布兰妮的照片集。
搜索:“"britney spears" inurl:photo”
结果:已向英特网搜索"britney spears" inurl:photo. 共约有2,720项查询结果,这是第1-10项。搜索用时0.23秒。

分析二:提供图片集合的网页,在标题栏内通常会注明,这是谁谁的图片集合。于是就可以用INTITLE语法找到这类网页。
搜索:“intitle:"britney spears" picture”
结果:已向英特网搜索intitle:"britney spears" picture. 共约有317项查询结果,这是第1-10项。搜索用时0.40秒。

分析三:明星的FANS通常会申请免费个人主页来存放他们偶像的靓照。于是用SITE语法指定某免费主页提供站点,是个迅速找到图片的好办法。
搜索:“"britney spears" site:geocities.com”
结果:已在geocities.com内搜索有关"britney spears"的网页。共约有5,020项查询结果,这是第1-10项。搜索用时0.47秒。

例四:找MP3

分析一:提供MP3的网站,通常会建立一个叫做MP3的目录,目录底下分门别类的存放各种MP3乐曲。所以,可以用INURL语法迅速找到这类目录。现在用这个办法找找老歌“say you say me”。
搜索:“"say you say me" inurl:mp3”
结果:已向英特网搜索inurl:mp3 "say you say me". 共约有155项查询结果,这是第1-10项。搜索用时0.17秒。

分析二:也可以通过网页标题,找到这类提供MP3的网页。
搜索:“"say you say me" intitle:mp3”
结果:已向英特网搜索"say you say me" intitle:mp3. 共约有178项查询结果,这是第1-10项。搜索用时0.73秒。

当然,如果你知道某个网站的下载速度快,而且乐曲全,就可以用SITE语法先到该网站上看看有没有目标乐曲。

例五:找书

分析一:对我而言,常访问的电子图书馆类网站就那么几个,比如文艺类的“www.shuku.net”。于是可以用SITE语法很简单的找到某本书(如果该网站上有的话)。比如,“旧唐书 site:shuku.net”,就可以马上找到该书。如果没有,通常别的网站上也很难找到。因此,找书的关键,是你了解一大批著名的图书馆网站。

分析二:我上面介绍的第一项关键字选择技巧特定词法,对于迅速找到某书或者文章也是极其有用的,当然,这得建立在你已经读过该书,对书的内容有印象的基础上。比如如果了解堂吉诃德一书战风车的大致内容,就可以用“吉诃德 风车 桑乔”迅速找到该书。

九,GOOGLE搜索FAQ

Q:如何全面的了解google.com?
A:查看网站相关页面“http://www.google.com/about.html”。

Q:如何切换google.com的初始语言界面?
A:点击搜索栏右边的“使用偏好”(Preferences),选择“界面语言”(Interface Language)中你期望的语言,点击最下面的“设定使用偏好”(Save Preferences)按钮。需要提醒的是,GOOGLE用cookie记录这个偏好,所以如果你把浏览器的cookie功能关掉,就无法进行设定。

Q:如何设定每页搜索结果显示数量?
A:同上,进入使用偏好,在该页的“查看结果”(Number of Results)选择显示结果数,数目越大,显示结果需要的时间越长,默认是10项。

Q:搜索到的链接无法打开怎么办?
A:链接无法打开的原因很多,比如网站当机,或者ISP过滤等,可以点击GOOGLE的“网页快照”查看在GOOGLE服务器上的网页缓存。

Q:打开搜索结果的链接,可是该页面太大,很难找到一下子找到目的资料怎么办?
A:直接打开“网页快照”,GOOGLE会把关键词用不同颜色标记出来,很容易找到。


shelly 发表于  2004-04-17 14:30:03


   惠普 激打 HP1150 打印机软故障排除一例。    |   阅读全文   |   评论(0)  |  引用(trackback0)  

本来排除这故障费了些周折,搞的我有些头大,差点坏了我名声(/tx)。

序:本就为仓管系统服务器重启问题(后查得是电源质量问题)搞的焦头烂额的。接到新(软起动)公司的求救电话。说AutoCAD 2000 不能打印。晕晕,怎么可能呀?      猛然想起,上次给装激打时,只是打印了测试页。嗯,可能存在软件兼容性问题。

现象:火速(/:D 没有啦)赶到新公司,发觉该打印机,点击打印时,有一出错提示。没有仔细看,就点确定,预览可以看到,打印时,吐出一张空白纸。 用记事本及Word 打印正常。

解决:

1 既然这样,WORD正常,记事本正常。呵呵,那应该是 AutoCAD2000 的问题了吧。嗯,俺的拿手好戏。

  1.a  删除原有的AutoCAD2000程序,并删除安装目录。

  1.b  清理注册表 。

2 安装AutoCAD2000 一切正常。装好加密狗后,再打印。晕晕,故障依旧。

  然后,头脑一热,就进AutoCAD2000的设置里进行了关于打印的N项设置的设置试验。晕晕~~~  未果~~~

......

3 最后:

  把 AutoCAD2000 的 Drv 目录下的 hpgdi6.drv 文件备份为  hpgdi6_bak.drv。并把 原 gdi6.drv COPY一份并改名为 hpgdi6.drv 。故障得以解决。晕晕

结论:该型号打印机估计出厂没有进行驱动大型软件的驱动测试。唉唉~~~  真搞不懂 惠普 还会搞这些东东出来~~~ 

shelly 发表于  2004-04-15 20:40:08


   部分摘录HTTP状态码。    |   阅读全文   |   评论(0)  |  引用(trackback1)  

七、HTTP应答状态 
 作 者 : 仙人掌工作室
  
  
     7.1 状态代码概述
  
     Web服务器响应浏览器或其他客户程序的请求时,其应答一般由以下几个部分组成:一个状态行,几个应答头,一个空行,内容文档。下面是一个最简单的应答:
  HTTP/1.1 200 OK
  Content-Type: text/plain
  
  Hello World
  
  
  
  
     状态行包含HTTP版本、状态代码、与状态代码对应的简短说明信息。在大多数情况下,除了Content-Type之外的所有应答头都是可选的。但Content-Type是必需的,它描述的是后面文档的MIME类型。虽然大多数应答都包含一个文档,但也有一些不包含,例如对HEAD请求的应答永远不会附带文档。有许多状态代码实际上用来标识一次失败的请求,这些应答也不包含文档(或只包含一个简短的错误信息说明)。
  
     Servlet可以利用状态代码来实现许多功能。例如,可以把用户重定向到另一个网站;可以指示出后面的文档是图片、PDF文件或HTML文件;可以告诉用户必须提供密码才能访问文档;等等。这一部分我们将具体讨论各种状态代码的含义以及利用这些代码可以做些什么。
  
     7.2 设置状态代码
  
     如前所述,HTTP应答状态行包含HTTP版本、状态代码和对应的状态信息。由于状态信息直接和状态代码相关,而HTTP版本又由服务器确定,因此需要Servlet设置的只有一个状态代码。
  
     Servlet设置状态代码一般使用HttpServletResponse的setStatus方法。setStatus方法的参数是一个整数(即状态代码),不过为了使得代码具有更好的可读性,可以用HttpServletResponse中定义的常量来避免直接使用整数。这些常量根据HTTP 1.1中的标准状态信息命名,所有的名字都加上了SC前缀(Status Code的缩写)并大写,同时把空格转换成了下划线。也就是说,与状态代码404对应的状态信息是“Not Found”,则HttpServletResponse中的对应常量名字为SC_NOT_FOUND。但有两个例外:和状态代码302对应的常量根据HTTP 1.0命名,而307没有对应的常量。
  
     设置状态代码并非总是意味着不要再返回文档。例如,虽然大多数服务器返回404应答时会输出简单的“File Not Found”信息,但Servlet也可以定制这个应答。不过,定制应答时应当在通过PrintWriter发送任何内容之前先调用response.setStatus。
  
     虽然设置状态代码一般使用的是response.setStauts(int)方法,但为了简单起见,HttpServletResponse为两种常见的情形提供了专用方法:sendError方法生成一个404应答,同时生成一个简短的HTML错误信息文档;sendRedirect方法生成一个302应答,同时在Location头中指示新文档的URL。
  
     7.3 HTTP 1.1状态代码及其含义
  
     下表显示了常见的HTTP 1.1状态代码以及它们对应的状态信息和含义。
  
     应当谨慎地使用那些只有HTTP 1.1支持的状态代码,因为许多浏览器还只能够支持HTTP 1.0。如果你使用了HTTP 1.1特有的状态代码,最好能够检查一下请求的HTTP版本号(通过HttpServletRequest的getProtocol方法)。 状态代码 状态信息 含义
  100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)
  101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)
  200 OK 一切正常,对GET和POST请求的应答文档跟在后面。如果不用setStatus设置状态代码,Servlet默认使用202状态代码。
  201 Created 服务器已经创建了文档,Location头给出了它的URL。
  202 Accepted 已经接受请求,但处理尚未完成。
  203 Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。
  204 No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。
  205 Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。
  206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。
  300 Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。
  301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
  302 Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”,而HttpServletResponse中相应的常量是SC_MOVED_TEMPORARILY,而不是SC_FOUND。
  出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。为此,Servlet提供了一个专用的方法,即sendRedirect。使用response.sendRedirect(url)比使用response.setStatus(response.SC_MOVED_TEMPORARILY)和response.setHeader("Location",url)更好。这是因为:
  
  首先,代码更加简洁。
  第二,使用sendRedirect,Servlet会自动构造一个包含新链接的页面(用于那些不能自动重定向的老式浏览器)。
  最后,sendRedirect能够处理相对URL,自动把它们转换成绝对URL。
  注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求http://host/~user(缺少了后面的斜杠),有的服务器返回301,有的则返回302。
  
  严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。
  
  303 See Other 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。
  304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
  305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。
  307 Temporary Redirect 和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。
  注意,HttpServletResponse中没有为该状态代码提供相应的常量。(HTTP 1.1新)
  
  400 Bad Request 请求出现语法错误。
  401 Unauthorized 客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。
  403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。
  404 Not Found 无法找到指定位置的资源。这也是一个常用的应答,HttpServletResponse专门提供了相应的方法:sendError(message)。
  405 Method Not Allowed 请求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)对指定的资源不适用。(HTTP 1.1新)
  406 Not Acceptable 指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容(HTTP 1.1新)。
  407 Proxy Authentication Required 类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新)
  408 Request Timeout 在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP 1.1新)
  409 Conflict 通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新)
  410 Gone 所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。(HTTP 1.1新)
  411 Length Required 服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)
  412 Precondition Failed 请求头中指定的一些前提条件失败(HTTP 1.1新)。
  413 Request Entity Too Large 目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头(HTTP 1.1新)。
  414 Request URI Too Long URI太长(HTTP 1.1新)。
  416 Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新)
  500 Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。
  501 Not Implemented 服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。
  502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。
  503 Service Unavailable 服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。
  504 Gateway Timeout 由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新)
  505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新)

shelly 发表于  2004-04-15 15:15:17


   今天发现一个生活常理    |   阅读全文   |   评论(4)  |  引用(trackback1)  

茶泡久了,就会淡!

呵呵,品茶,我想 90% 感受源于心情~~  所以,泡淡的茶一样可以让人体会到它的清香哦。 :D 

PS:泡过的茶还可以晾干,用处多多,好处多多。

shelly 发表于  2004-04-14 10:39:59


   申请到本站顶级域名。/:D 虽然有广告。    |   阅读全文   |   评论(4)  |  引用(trackback1)  

http://www.mrshelly.tk/

呵呵,不错。就是不知道这个顶级域名能有效多久?

shelly 发表于  2004-04-13 07:33:14


   今天发觉GOOGLE收录本站。呵呵~~~    |   阅读全文   |   评论(7)  |  引用(trackback1)  
shelly 发表于  2004-04-12 11:00:49


   查看被锁定源代码的网页~~~    |   阅读全文   |   评论(0)  |  引用(trackback1)  
把网址复制到下面再点击查看源文件即可~~~ FOR 水盟圣诞老人

  看源文件  清除网址
shelly 发表于  2004-04-10 08:04:51