国产亚洲精品自在久久,欧美激情麻豆,免费精品99久久国产综合精品http://www.aygfsteel.com/forget/category/3183.html<h2>能吃能睡是福;能忘是大福......</h2>zh-cnFri, 13 May 2011 13:41:58 GMTFri, 13 May 2011 13:41:58 GMT60SVN完整安裝及簡(jiǎn)略使用http://www.aygfsteel.com/forget/archive/2006/08/08/62304.html橘子橘子Tue, 08 Aug 2006 02:33:00 GMThttp://www.aygfsteel.com/forget/archive/2006/08/08/62304.htmlhttp://www.aygfsteel.com/forget/comments/62304.htmlhttp://www.aygfsteel.com/forget/archive/2006/08/08/62304.html#Feedback0http://www.aygfsteel.com/forget/comments/commentRss/62304.htmlhttp://www.aygfsteel.com/forget/services/trackbacks/62304.html閱讀全文

橘子 2006-08-08 10:33 發(fā)表評(píng)論
]]>
php開發(fā)wap常用技巧http://www.aygfsteel.com/forget/archive/2006/06/17/53462.html橘子橘子Sat, 17 Jun 2006 03:43:00 GMThttp://www.aygfsteel.com/forget/archive/2006/06/17/53462.htmlhttp://www.aygfsteel.com/forget/comments/53462.htmlhttp://www.aygfsteel.com/forget/archive/2006/06/17/53462.html#Feedback1http://www.aygfsteel.com/forget/comments/commentRss/53462.htmlhttp://www.aygfsteel.com/forget/services/trackbacks/53462.html在php中輸出返回上一級(jí)的代碼:
echo "<a href=".$_SERVER["HTTP_REFERER"].">點(diǎn)擊這里返回</a>";
在wap中的代碼是:
<?php
@header("Content-Type:text/vnd.wap.wml");
?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN" "<wml>
<head>
<meta http-equiv="expires" content="0" />
</head>
<card title="輸入標(biāo)題">
<do type="prev" label="返回上頁(yè)">
<prev/>
<!--provide a button you can clink to back a step-->
</do><br/>
<!--<anchor>
<prev/>后退
</anchor>-->?
</card>
</wml>
在wap中打電話的代碼:
<?php
?@header("Content-Type:text/vnd.wap.wml");
?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN" "
<wml>
<head>
<meta http-equiv="expires" content="0" />
</head>
<card title="標(biāo)題">
<p>
<input name="phone_no" format="*m" value="13"/>
<do type="option" >
<go href="wtai://wp/mc;$(phone_no)"/>
</do><br/>
或者
<a href="wtai://wp/mc;13333333333">撥打電話</a>
<br />
</p>
</card>
</wml>

加入WAP書簽

<?xml version="1.0"?>
<!DOCTYPE CHARACTERISTIC-LIST SYSTEM "/DTD/characteristic_list.xml">
<CHARACTERISTIC-LIST>
<CHARACTERISTIC TYPE="ADDRESS">
<PARM NAME="BEARER" VALUE="GPRS"/>
<PARM NAME="PROXY" VALUE="10.0.0.172"/>
<PARM NAME="PORT" VALUE="9201"/>
<PARM NAME="GPRS_ACCESSPOINTNAME" VALUE="wap.02826.com"/>
<PARM NAME="PPP_AUTHTYPE" VALUE="PAP"/>
</CHARACTERISTIC>
<CHARACTERISTIC TYPE="NAME">
<PARM NAME="NAME" VALUE="wmzsoft GPRS"/>
</CHARACTERISTIC>
<CHARACTERISTIC TYPE="BOOKMARK"/>
<PARM NAME="NAME" VALUE="02826"/>
<PARM NAME="URL" VALUE="
http://wap.02826.com "/>
</CHARACTERISTIC>
</CHARACTERISTIC-LIST>


橘子 2006-06-17 11:43 發(fā)表評(píng)論
]]>
點(diǎn)中復(fù)選框使得復(fù)選框后的文本框內(nèi)容顯示出指定的內(nèi)容http://www.aygfsteel.com/forget/archive/2006/06/09/51764.html橘子橘子Fri, 09 Jun 2006 15:08:00 GMThttp://www.aygfsteel.com/forget/archive/2006/06/09/51764.htmlhttp://www.aygfsteel.com/forget/comments/51764.htmlhttp://www.aygfsteel.com/forget/archive/2006/06/09/51764.html#Feedback0http://www.aygfsteel.com/forget/comments/commentRss/51764.htmlhttp://www.aygfsteel.com/forget/services/trackbacks/51764.html<!--
function test(obj) {
??? if (obj.checked) {document.all(obj.name+'_t').value=obj.value}
??? else {document.all(obj.name+'_t').value=''}
}
//-->
</script>
<input type="checkbox" name="cb1" value="aaaa" onClick="test(this)">aaaa
<input type="text" name="cb1_t">
<br>
<input type="checkbox" name="cb2" value="bbbb" onClick="test(this)">bbbb
<input type="text" name="cb2_t">
<br>
<input type="checkbox" name="cb3" value="cccc" onClick="test(this)">cccc
<input type="text" name="cb3_t">
<br>
<input type="checkbox" name="cb4" value="dddd" onClick="test(this)">dddd
<input type="text" name="cb4_t">

這樣一來(lái) 如果想輸入某個(gè)確定的值時(shí)就不用那么辛辛苦苦的復(fù)制了,點(diǎn)擊就自動(dòng)選擇!

橘子 2006-06-09 23:08 發(fā)表評(píng)論
]]>
php上傳多個(gè)文件http://www.aygfsteel.com/forget/archive/2006/06/08/51520.html橘子橘子Thu, 08 Jun 2006 14:31:00 GMThttp://www.aygfsteel.com/forget/archive/2006/06/08/51520.htmlhttp://www.aygfsteel.com/forget/comments/51520.htmlhttp://www.aygfsteel.com/forget/archive/2006/06/08/51520.html#Feedback1http://www.aygfsteel.com/forget/comments/commentRss/51520.htmlhttp://www.aygfsteel.com/forget/services/trackbacks/51520.html前面提到了上傳單個(gè)文件的方法,上傳多個(gè)文件的思想類似
1、在表單頁(yè)面動(dòng)態(tài)生成多個(gè)文件提交框,這里注意一下,多個(gè)文件提交框的名字要設(shè)置為數(shù)組,否則只有一個(gè)文件會(huì)上傳。
此時(shí)在$_FILES數(shù)組構(gòu)造方式是這樣:$_FILES["files"][xxxxfileProperty][xxxcount]; 比如說(shuō)我要知道第一個(gè)文件的error值:$_FILES["userfiles"]["error"][0] ,第一個(gè)文件客戶端名字:$_FILES["userfiles"]["name"][0]等等。
2、接收端接收,操作和單個(gè)的是一樣,只是需要做個(gè)循環(huán),有多少個(gè)文件做多少次循環(huán),以便所有的文件都能正確發(fā)送。
示例代碼:
表單頁(yè)面
<form enctype="multipart/form-data" action="post.php" method="post">
&nbsp;&nbsp;文章標(biāo)題:&nbsp;&nbsp;<input name="title" type="text"/>&nbsp;標(biāo)題不能為空!
<br />&nbsp;&nbsp;淘吧名字:&nbsp;&nbsp;<input name="bar_name" type="text"/>
<?php
echo "請(qǐng)選擇一個(gè)!\t(";
for ($i=0; $i<count($name); $i++ ){
?echo mb_convert_encoding($name[$i]["name"],"UTF-8","GB2312");
?echo "? ";
}
echo ")";
?>
<br />
<textarea name="text" cols="90" rows="20"></textarea>
<?php
for ($i=0;$i<3;$i++){
?echo "<input name=\"userfile[]\" type=\"file\"/>";
}
echo "<input name=\"i\" type=\"hidden\" value=\"$i\" />";
?>
</td></tr>
</table>
<table align="center" cellpadding="0" cellspacing="0"><tr><td>
<input name="submit" type="submit" value="確定提交"/>&nbsp;&nbsp;
<input name="reset" type="reset" value="重新來(lái)過(guò)"/>
</form>
處理頁(yè)面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<html xmlns="<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>提交</title>
</head>

<body>
<?php
$title=$_POST["title"];
$text=$_POST["text"];
$name=$_POST["name"];
$count=$_POST["i"];
include_once("數(shù)據(jù)庫(kù)連接文件");
if (empty($title)||empty($text)||empty($bar_name)){
?echo "標(biāo)題或內(nèi)容不能空
?die("<br /><a href=\"index.php\">重新來(lái)過(guò)</a>");
}

/*這里是數(shù)據(jù)查詢語(yǔ)言取出要用的數(shù)據(jù)*/

if(in_array("0", $_FILES['userfile']['error'])){//上傳文件開始
?$uploaddir= 'attfile/';//設(shè)置上傳的文件夾地址
?$FILES_EXT=array('.gif','.jpg','.mp3','.3gp');//設(shè)置允許上傳文件的類型
?$MAX_SIZE = 20000000;//設(shè)置文件上傳限制20000000byte=2M
?for ($i=0;$i<$count;$i++){
??$FILES_NAME=$_FILES['userfile']['name'][$i];//客戶端文件名
??//取出文件后綴名,strrpos()從標(biāo)記開始前字節(jié)個(gè)數(shù)(不算標(biāo)記),substr()顯示從第strrpos()之后的字符
??$file_ext=substr($FILES_NAME,strrpos($FILES_NAME,"."));
??//檢查文件大小
??if($_FILES['userfile']['size'][$i]>$MAX_SIZE){
???echo "文件大小超程序允許范圍!";
???exit;
??}
??//檢查文件類型
??if(in_array($file_ext, $FILES_EXT)){
???$_FILES['userfile']['name'][$i]=date("YmdHis").rand(10000,1000000).$file_ext;
???//echo $_FILES['userfile']['name'][$i];
???$uploadfile = $uploaddir.$_FILES['userfile']['name'][$i];//上傳后文件的路徑及文件名
???//echo $uploadfile;
???//用move函數(shù)生成臨時(shí)文件名,并按照 $_FILES['userfile']['name']上傳到$uploaddir下
???if (move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $uploadfile)) {
????//將上傳后的路徑寫入到數(shù)據(jù)庫(kù)中
????$post_id=(int)$post_id;
????$uploadfile="attfile/".$_FILES['userfile']['name'][$i];
????$sql=插入語(yǔ)句
????$stmt=$db->prepare($sql);
????$stmt->execute();
????print "<br />文件\n{$FILES_NAME}\n上傳成功!";
???} else {
????print "上傳錯(cuò)誤!? 以下是上傳的信息:\n";
????print_r($_FILES);
???}
??}
??else{
???echo "{$FILES_NAME}\n不是允許上傳的文件類型!";
???exit;
??}
?}
}

?>
</body>
</html>



橘子 2006-06-08 22:31 發(fā)表評(píng)論
]]>
php上傳單個(gè)文件http://www.aygfsteel.com/forget/archive/2006/06/08/51506.html橘子橘子Thu, 08 Jun 2006 14:09:00 GMThttp://www.aygfsteel.com/forget/archive/2006/06/08/51506.htmlhttp://www.aygfsteel.com/forget/comments/51506.htmlhttp://www.aygfsteel.com/forget/archive/2006/06/08/51506.html#Feedback0http://www.aygfsteel.com/forget/comments/commentRss/51506.htmlhttp://www.aygfsteel.com/forget/services/trackbacks/51506.html ??? PHP上傳文件的問(wèn)題:
一:1、上傳單個(gè)文件的時(shí)候。在表單頁(yè)面設(shè)置文件輸入域,<input name="userfile" type="file" />然后表單要加入<form enctype="multipart/form-data" action="post.php" method="post">這個(gè)屬性,這是告訴瀏覽器我要上傳文件的屬性,一定要加上。
??? 2、設(shè)置好了表單,接下來(lái)的事就是讀取表單的變量,如果你還定義了其他的變量,那么php使用$_POST來(lái)讀出,如:$uservar=$_POST["uservar"],然而文件是存在$_FILES中,具體見下面:
?
? * $_FILES['userfile']['name'] 客戶端機(jī)器文件的原名稱。
? ?* $_FILES['userfile']['type'] 文件的 MIME 類型,需要瀏覽器提供該信息的支持,例如“image/gif”。
? ?* $_FILES['userfile']['size'] 已上傳文件的大小,單位為字節(jié)。
? ?* $_FILES['userfile']['tmp_name'] 文件被上傳后在服務(wù)端儲(chǔ)存的臨時(shí)文件名。
? ?* $_FILES['userfile']['error'] 和該文件上傳相關(guān)的錯(cuò)誤代碼

? 1. 值:0; 沒有錯(cuò)誤發(fā)生,文件上傳成功。
? 2. 值:1; 上傳的文件超過(guò)了 php.ini 中 upload_max_filesize 選項(xiàng)限制的值。
? 3. 值:2; 上傳文件的大小超過(guò)了 HTML 表單中 MAX_FILE_SIZE 選項(xiàng)指定的值。
? 4. 值:3; 文件只有部分被上傳。
? 5. 值:4; 沒有文件被上傳。
3、完成上傳過(guò)程。示例代碼:
(1)
<?php
$upload_file=$_FILES['userfile']['tmp_name'];
$upload_file_name=$_FILES['userfile']['name'];
if($upload_file){
?$file_size_max = 20000000;// 1M限制文件上傳最大容量(bytes)
?$store_dir = "attfile/";// 上傳文件的儲(chǔ)存位置
?$accept_overwrite = 1;//是否允許覆蓋相同文件
?// 檢查文件大小
?if ($upload_file_size > $file_size_max) {
??echo "對(duì)不起,你的文件容量大于規(guī)定";
??exit;
?}
?// 檢查讀寫文件
?if (file_exists($store_dir . $upload_file_name) && !$accept_overwrite) {
??echo?? "存在相同文件名的文件";
??exit;
?}
?//復(fù)制文件到指定目錄
?if (!move_uploaded_file($upload_file,$store_dir.$upload_file_name)) {
??echo "復(fù)制文件失敗";
??exit;
?}
}
echo?? "<p>你上傳了文件:";
echo $_FILES['userfile']['name'];
echo "<br>";
//客戶端機(jī)器文件的原名稱。
Echo?? "文件的 MIME 類型為:";
echo $_FILES['userfile']['type'];
//文件的 MIME 類型,需要瀏覽器提供該信息的支持,例如“image/gif”。
echo "<br>";

Echo?? "上傳文件大小:";
echo $_FILES['userfile']['size'];
//已上傳文件的大小,單位為字節(jié)。
echo "<br>";

Echo?? "文件上傳后被臨時(shí)儲(chǔ)存為:";
echo $_FILES['userfile']['tmp_name'];
//文件被上傳后在服務(wù)端儲(chǔ)存的臨時(shí)文件名。
echo "<br>";

$Erroe=$_FILES['userfile']['error'];
switch($Erroe){
?case 0:
?Echo?? "上傳成功"; break;
?case 1:
?Echo?? "上傳的文件超過(guò)了 php.ini 中 upload_max_filesize 選項(xiàng)限制的值."; break;
?case 2:
?Echo?? "上傳文件的大小超過(guò)了 HTML 表單中 MAX_FILE_SIZE 選項(xiàng)指定的值。";?? break;
?case 3:
?Echo?? "文件只有部分被上傳";break;
?case 4:
?Echo?? "沒有文件被上傳";break;
}
?>
(2)<?php
$uploaddir= '../attfile/';//設(shè)置上傳的文件夾地址
$FILES_EXT=array('.gif','.jpg','.bmp');//設(shè)置允許上傳文件的類型
$MAX_SIZE = 20000000;//設(shè)置文件上傳限制20000000byte=2M
for ($i=0;$i<count($userfile);$i++){
?$FILES_NAME=$_FILES['userfile']['name'][$i];//客戶端文件名
}
//echo $FILES_NAME;
//取出文件后綴名,strrpos()從標(biāo)記開始前字節(jié)個(gè)數(shù)(不算標(biāo)記),substr()顯示從第strrpos()之后的字符
$file_ext=substr($FILES_NAME,strrpos($FILES_NAME,"."));
//echo $file_ext;
//檢查文件大小
if($_FILES['userfile']['size']>$MAX_SIZE){
?echo "文件大小超程序允許范圍!";
?exit;
}
//檢查文件類型
if(in_array($file_ext, $FILES_EXT)){
?$_FILES['userfile']['name']=date("YmdHis").rand().$file_ext;
?$uploadfile = $uploaddir.$_FILES['userfile']['name'];//上傳后文件的路徑及文件名
?//將上傳后的路徑寫入到數(shù)據(jù)庫(kù)中

?//用move函數(shù)生成臨時(shí)文件名,并按照 $_FILES['userfile']['name']上傳到$uploaddir下
?if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
??print "\n上傳成功!";
?} else {
??print "上傳錯(cuò)誤!? 以下是上傳的信息:\n";
??print_r($_FILES);
?}
}
else{
?echo "{$file_ext}不是允許上傳的文件類型!";
?exit;
}
?>



小技巧>>1、當(dāng)在提交時(shí),希望確認(rèn)是否要提交可以在<form>里如這樣加入:<form onsubmit="return confirm('你真的要提交嗎?')">
2、在php里希望返回時(shí)所有在文本框里的東西都保留可以這樣:<a href=javascript:history.back(1)>重新來(lái)過(guò)</a>。



橘子 2006-06-08 22:09 發(fā)表評(píng)論
]]>
Java中文問(wèn)題的一般解決辦法http://www.aygfsteel.com/forget/archive/2006/03/29/38006.html橘子橘子Wed, 29 Mar 2006 03:17:00 GMThttp://www.aygfsteel.com/forget/archive/2006/03/29/38006.htmlhttp://www.aygfsteel.com/forget/comments/38006.htmlhttp://www.aygfsteel.com/forget/archive/2006/03/29/38006.html#Feedback0http://www.aygfsteel.com/forget/comments/commentRss/38006.htmlhttp://www.aygfsteel.com/forget/services/trackbacks/38006.html 漢字編碼的常識(shí)

我們知道,英文字符一般是以一個(gè)字節(jié)來(lái)表示的,最常用的編碼方法是 ASCII 。但一個(gè)字節(jié)最多只能區(qū)分256個(gè)字符,而漢字成千上萬(wàn),所以現(xiàn)在都以雙字節(jié)來(lái)表示漢字,為了能夠與英文字符分開,每個(gè)字節(jié)的最高位一定為1,這樣雙字節(jié)最多可以表示64K格字符。我們經(jīng)常碰到的編碼方式有 GB2312、BIG5、UNICODE 等。關(guān)于具體編碼方式的詳細(xì)資料,有興趣的讀者可以查閱相關(guān)資料。我膚淺談一下和我們關(guān)系密切的 GB2312 和 UNICODE。GB2312 碼,中華人民共和國(guó)國(guó)家標(biāo)準(zhǔn)漢字信息交換用編碼,是一個(gè)由中華人民共和國(guó)國(guó)家標(biāo)準(zhǔn)總局發(fā)布的關(guān)于簡(jiǎn)化漢字的編碼,通行于中國(guó)大陸地區(qū)及新加坡,簡(jiǎn)稱國(guó)標(biāo)碼。兩個(gè)字節(jié)中,第一個(gè)字節(jié)(高字節(jié))的值為區(qū)號(hào)值加32(20H),第二個(gè)字節(jié)(低字節(jié))的值為位號(hào)值加32(20H),用這兩個(gè)值來(lái)表示一個(gè)漢字的編碼。UNICODE 碼是微軟提出的解決多國(guó)字符問(wèn)題的多字節(jié)等長(zhǎng)編碼,它對(duì)英文字符采取前面加“0”字節(jié)的策略實(shí)現(xiàn)等長(zhǎng)兼容。如 “A” 的 ASCII 碼為0x41,UNICODE 就為0x00,0x41。利用特殊的工具各種編碼之間可以互相轉(zhuǎn)換。


事實(shí)上,Java的中文問(wèn)題都是由于Java應(yīng)用所采用的缺省編碼格式與目標(biāo)或者應(yīng)用所要讀入字符的編碼格式不同而造成的(具體參見文獻(xiàn)1)。對(duì)于如何解決Java的中文問(wèn)題,通常有四種方法:

1) 選擇JDK的中文本地化版本。盡管Java2 JDK的中文本地化版本(http://java.sun.com/products/jdk/1.2/chinesejdk.html)并不是一個(gè)官方的版本,Sun公司也沒有承諾會(huì)對(duì)該本地化版本進(jìn)行升級(jí),但其仍不失為一個(gè)Java中文問(wèn)題的解決方案。

2) 選擇合適的編譯參數(shù)。對(duì)于Java的國(guó)際版本來(lái)講,我們也可以在編譯Java應(yīng)用的時(shí)候通過(guò)指定確定的編碼機(jī)制來(lái)實(shí)現(xiàn)其編譯結(jié)果對(duì)中文的支持。例如,對(duì)于需要支持繁體中文和簡(jiǎn)體中文應(yīng)用可以通過(guò)javac -encoding big5 sourcefile.java 和javac -encoding gb2312 sourcefile.java來(lái)編譯源程序。

3) 通過(guò)編程的方式實(shí)現(xiàn)字符編碼的轉(zhuǎn)換代碼。通過(guò)編程的方式來(lái)解決Java的中文問(wèn)題,已經(jīng)成為了一種較為普遍的做法。下面就是一種最常見的字符編碼轉(zhuǎn)換函數(shù),其將字符的編碼格式轉(zhuǎn)換為中文Windows系統(tǒng)的GBK編碼形式。

public ? static ?String?toChinese(String?strvalue)
???
{
?????
try {
???????
if (strvalue == null )
?????????
return ? null ;
???????
else
?????????
{
???????????strvalue?
= ? new ?String(strvalue.getBytes( " ISO8859_1 " ),? " GBK " );
???????????
return ?strvalue;
?????????}

?????????}
catch (Exception?e) {
???????????????
return ? null ;
??????}

???}

4) 定義字符輸出集。對(duì)于JSP應(yīng)用,我們可以通過(guò)<%@ page contentType="text/html; charset=GBK" %>或<%@ page contentType="text/html; charset=GB2312" %>來(lái)定義JSP頁(yè)面的字符輸出集。當(dāng)然,我們也可以通過(guò)HTML的標(biāo)記<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">來(lái)定義字符的輸出集。

分析的原則

總的說(shuō)來(lái),所有解決Java中文處理的方法都不是很復(fù)雜。相反的是,由于Java技術(shù)特別是J2EE技術(shù)涉及的內(nèi)容繁多,各種Web服務(wù)器、應(yīng)用服務(wù)器以及JDBC數(shù)據(jù)庫(kù)驅(qū)動(dòng)等參差不齊,所以如何正確而及時(shí)的發(fā)現(xiàn)應(yīng)用的中文處理問(wèn)題則變得相對(duì)復(fù)雜的多。那么我們?nèi)绾蝸?lái)發(fā)現(xiàn)這些問(wèn)題呢?

通常,Java處理中文時(shí)所產(chǎn)生的問(wèn)題都是由于用戶的Java應(yīng)用所采用的缺省編碼格式與目標(biāo)或者應(yīng)用所要讀入字符的編碼格式不同而造成的,而引起這些不同的一個(gè)主要原因就是用戶的Java應(yīng)用與其它應(yīng)用進(jìn)行了編碼格式不匹配的數(shù)據(jù)交換(包括直接或間接的數(shù)據(jù)輸入、輸出)。所以,為了及時(shí)發(fā)現(xiàn)問(wèn)題,我們可以由這一點(diǎn)入手,根據(jù)以下的原則對(duì)應(yīng)用進(jìn)行分析:

  1. 注意字符變量情況。由于變量的字符編碼形式較為隱蔽,多次變量間數(shù)值的改變和運(yùn)算可能會(huì)引起字符集的改變;在變量與頁(yè)面所提交數(shù)據(jù)的各種操作中,較容易發(fā)生不同編碼格式字符進(jìn)行運(yùn)算的情況。
  2. 注意任何形式的字符讀入與輸出。之所以要提到任何形式,是因?yàn)镴ava應(yīng)用大多數(shù)都是作為網(wǎng)絡(luò)應(yīng)用開發(fā)的,所以與其它語(yǔ)言的應(yīng)用相比,Java應(yīng)用需要面對(duì)網(wǎng)絡(luò)世界各種各樣的字符數(shù)據(jù)交換形式。例如各種表單的數(shù)據(jù)提交,URL形式的數(shù)據(jù)讀入,經(jīng)過(guò)加密運(yùn)算的字符數(shù)據(jù)交換,網(wǎng)頁(yè)控件選擇結(jié)果的輸入,控件內(nèi)容的的顯示(如List控件)等等。
  3. 小心使用第三方的組件和應(yīng)用。由于第三方組件和應(yīng)用的實(shí)現(xiàn)是非透明的,所以一般情況下,我們很難判斷這些組件或驅(qū)動(dòng)的缺省編碼格式是什么,也無(wú)法對(duì)其進(jìn)行控制。因此,在使用它們所提供的接口函數(shù)進(jìn)行數(shù)據(jù)交換的時(shí)候要特別注意,如果確實(shí)出現(xiàn)中文無(wú)法正確處理情況,應(yīng)首先檢查我們自己的代碼并調(diào)整相關(guān)代碼以適應(yīng)這些接口,因?yàn)檫@些組件或者應(yīng)用基本上不會(huì)提供調(diào)整編碼機(jī)制的接口。必要時(shí),我們可能需要采用其它可替換的組件或者應(yīng)用。
  4. 注意被請(qǐng)求對(duì)象所含有的數(shù)據(jù)輸入與輸出。這是非常隱蔽的一類情況,當(dāng)我們的應(yīng)用以對(duì)象的方式(例如序列化的對(duì)象)進(jìn)行交互時(shí),如果這個(gè)對(duì)象內(nèi)部含有字符數(shù)據(jù)的處理過(guò)程,或者含有某些數(shù)據(jù)的輸入、輸出,甚至是拋出一段用中文注解的異常,都可能出現(xiàn)中文無(wú)法正確顯示等問(wèn)題。由于這些行為往往被封裝在對(duì)象中,所以我們?cè)诰帉懗绦驎r(shí),很容易忽略這種可能情況。并且這種情況帶有一定的不可預(yù)見性,例如我們可能不清楚這個(gè)對(duì)象會(huì)在什么時(shí)候拋出什么樣的異常,所以這時(shí)我們就需要做一定的測(cè)試工作。
  5. 注意數(shù)據(jù)庫(kù)的數(shù)據(jù)訪問(wèn)過(guò)程。Java通過(guò)JDBC與數(shù)據(jù)庫(kù)建立連接。對(duì)于JDBC驅(qū)動(dòng)程序來(lái)說(shuō),由于目前大部分的JDBC驅(qū)動(dòng)程序并不是針對(duì)中文系統(tǒng)而設(shè)計(jì)的(中文數(shù)據(jù)大都采用ISO-8859-1編碼方式),所以一般情況下在數(shù)據(jù)讀寫過(guò)程中往往都需要字符編碼的轉(zhuǎn)化。但是我們?nèi)越ㄗh用戶在使用這些JDBC驅(qū)動(dòng)時(shí),仔細(xì)閱讀它的說(shuō)明。如果確實(shí)無(wú)法弄清JDBC字符數(shù)據(jù)的編碼到底是什么,我們的建議是做一些必要的測(cè)試。例如下面是一組在簡(jiǎn)體中文Win2000平臺(tái)下,采用Weblogic 6.0所提供的JDBC驅(qū)動(dòng)從MS SQL Server2000中正確讀入中文字符的代碼(例子中進(jìn)行了字符運(yùn)算):
    ????
    Class.forName(
    "weblogic.jdbc.mssqlserver4.Driver").newInstance();
    ??????conn?
    =?myDriver.connect("jdbc:weblogic:mssqlserver4",?props);
    ??????conn.setCatalog(
    "labmanager");
    ?????Statement?st?
    =?conn.createStatement();
    ????????
    //execute?a?query
    ????String??testStr;
    String?testTempStr?
    =?new?String()?;
    ????????testStr?
    =?new?String(testTempStr.getBytes("ISO-8859-1"));//編碼轉(zhuǎn)化
    ????DatabaseMetaData?DBMetaData?=conn.getMetaData();
    ????ResultSet?rs?
    =?DBMetaData.getTables(null,?null,null,new?String[]{"TABLE"}?);
    ????
    while?(rs.next()){
    ????????
    for(int?j=1;?j<=rs.getMetaData().getColumnCount();?j++){
    testStr?
    =?testStr?+String(rs.getObject(j).toString().getBytes("ISO-8859-1"));
    ????????????}

    ????????}
  6. 然而,需要注意的是,不同的JDBC驅(qū)動(dòng)對(duì)相同的數(shù)據(jù)庫(kù)的支持并不同,而同一類JDBC驅(qū)動(dòng)對(duì)不同的??數(shù)據(jù)庫(kù)的支持也不相同,也就是說(shuō)我們的字符轉(zhuǎn)化代碼在JDBC驅(qū)動(dòng)改變甚至是版本變化情況下都有可能無(wú)法正確工作。例如對(duì)于上面的例子,在同樣的環(huán)境下改用i-net 的Una 2000 Driver Version 2.03 for MS SQL Server時(shí),是無(wú)法正確處理中文的。原因很簡(jiǎn)單,這個(gè)JDBC驅(qū)動(dòng)本身支持的就是GBK的編碼機(jī)制,所以根本就不需要做任何的編碼轉(zhuǎn)化。?
  7. ?必要的測(cè)試。由于Java中文問(wèn)題的產(chǎn)生隨著Web服務(wù)器,瀏覽器,運(yùn)行環(huán)境和開發(fā)工具的不同都可能發(fā)生變化,所以為了更好的避免問(wèn)題的發(fā)生,我們必須作一些針對(duì)性的測(cè)試。另外,在我們確實(shí)無(wú)法通過(guò)分析來(lái)確定Java的中文處理問(wèn)題是否可能發(fā)生的情況下或者無(wú)法知道問(wèn)題的發(fā)生是由于哪個(gè)環(huán)節(jié)(是Web服務(wù)器,瀏覽器還是JDBC數(shù)據(jù)驅(qū)動(dòng)等等)引起的時(shí)候,測(cè)試工作則變得非常重要。并且我們可能需要較為全面的測(cè)試,例如對(duì)Web服務(wù)器,瀏覽器和JDBC數(shù)據(jù)驅(qū)動(dòng)等都要做測(cè)試,這樣有利于我們找出那些隱藏在多個(gè)環(huán)節(jié)協(xié)調(diào)過(guò)程中所產(chǎn)生的問(wèn)題。


Java 的基本類也可能存在問(wèn)題。由于國(guó)際化的工作并不是在國(guó)內(nèi)完成的,所以在這些基本類發(fā)布之前,沒有經(jīng)過(guò)嚴(yán)格的測(cè)試,所以對(duì)中文字符的支持并不像 Java Soft 所聲稱的那樣完美。前不久,我的一位技術(shù)上的朋友發(fā)信給我說(shuō),他終于找到了 Java Servlet 中文問(wèn)題的根源。兩周以來(lái),他一直為 Java Servlet 的中文問(wèn)題所困擾,因?yàn)槊棵鎸?duì)一個(gè)含有中文字符的字符串都必須進(jìn)行強(qiáng)制轉(zhuǎn)換才能夠得到正確的結(jié)果(這好象是大家公認(rèn)的唯一的解決辦法)。后來(lái),他確實(shí)不想如此繼續(xù)安分下去了,因?yàn)檫@樣的事情確實(shí)不應(yīng)該是高級(jí)程序員所要做的工作,他就找出 Servlet 解碼的源代碼進(jìn)行分析,因?yàn)樗麘岩蓡?wèn)題就出在解碼這部分。經(jīng)過(guò)四個(gè)小時(shí)的奮斗,他終于找到了問(wèn)題的根源所在。原來(lái)他的懷疑是正確的, Servlet 的解碼部分完全沒有考慮雙字節(jié),直接把 %XX 當(dāng)作一個(gè)字符。(原來(lái) Java Soft 也會(huì)犯這幺低級(jí)的錯(cuò)誤!)

如果你對(duì)這個(gè)問(wèn)題有興趣或者遇到了同樣的煩惱的話,你可以按照他的步驟 對(duì)Servlet.jar 進(jìn)行修改

找到源代碼 HttpUtils 中的 static private String parseName ,在返回前將 sb(StringBuffer) 復(fù)制成 byte bs[] ,然后 return new String(bs,”GB2312”)。作上述修改后就需要自己解碼了:

HashTable form=HttpUtils .parseQueryString(request.getQueryString())或者

form=HttpUtils.parsePostData(……)

千萬(wàn)別忘了編譯后放到 Servlet.jar 里面。


java中文問(wèn)題詳解
http://www.cn-java.com/target/news.php?news_id=210
關(guān)于Java中文問(wèn)題的幾條分析原則http://www-900.ibm.com/developerWorks/cn/java/l-javachinese/index.shtml
全方位解決xml中文問(wèn)題http://www.csdn.net/develop/read_article.asp?id=18901
servlet 中的漢字編碼問(wèn)題http://www-900.ibm.com/developerWorks/cn/java/jsp_dbcsz/index.shtml
Java程序的國(guó)際化和本地化介紹http://www-900.ibm.com/developerWorks/cn/java/joy-i18n/index.shtml
Java 編程技術(shù)中漢字問(wèn)題的分析及解決http://www-900.ibm.com/developerWorks/cn/java/java_chinese/index.shtml
Unicode專題http://www-900.ibm.com/developerWorks/cn/theme/unicode.shtml
這里也有篇專家寫的文章:
http://www.javaworld.com/javaworld/jw-04-2004/jw-0419-multibytes.html



橘子 2006-03-29 11:17 發(fā)表評(píng)論
]]>
網(wǎng)頁(yè)表格深層探密http://www.aygfsteel.com/forget/archive/2006/03/11/34826.html橘子橘子Sat, 11 Mar 2006 06:55:00 GMThttp://www.aygfsteel.com/forget/archive/2006/03/11/34826.htmlhttp://www.aygfsteel.com/forget/comments/34826.htmlhttp://www.aygfsteel.com/forget/archive/2006/03/11/34826.html#Feedback0http://www.aygfsteel.com/forget/comments/commentRss/34826.htmlhttp://www.aygfsteel.com/forget/services/trackbacks/34826.html
  1、用表格做流動(dòng)分割線

  我們知道,在網(wǎng)頁(yè)中可以用
標(biāo)識(shí)來(lái)做分割線,也可以把表格設(shè)置為1個(gè)象素高或?qū)挸洚?dāng)分割線。現(xiàn)在,我們將表格與Javascript結(jié)合,可以做出更生動(dòng)的分割線——流動(dòng)的分割線。加入以下代碼,你就可以看到一條分割線,顏色在不斷的流動(dòng)。



  在上面的代碼中,我們可以通過(guò)修改 標(biāo)識(shí)中的height和width設(shè)置分割線的高度和長(zhǎng)度。

  2、帶滾動(dòng)條的表格



  看看圖一的效果,可千萬(wàn)不要以為是IFRAME,這可是地地道道的表格!其實(shí),這是表格和CSS結(jié)合的效果。當(dāng)網(wǎng)頁(yè)上有大段文字要顯示,而又沒有足夠的空間時(shí),這就派上用場(chǎng)了。雖然用文本框也可以實(shí)現(xiàn)類似效果,但卻遠(yuǎn)沒有用表格靈活。代碼很簡(jiǎn)單,只要在單元格
標(biāo)識(shí)后加上如下代碼就可以了:



  3、帶標(biāo)題的表格



  看看圖二的效果。通常,我們要給表格加標(biāo)題,不是用單元格的方法就是用圖片,很麻煩。其實(shí),我們可以只用很一些很簡(jiǎn)單的HTML標(biāo)識(shí),就可以輕松實(shí)現(xiàn)給表格加標(biāo)題了。這個(gè)標(biāo)識(shí)似乎已被人遺忘,很少看到使用,不過(guò)它實(shí)現(xiàn)的效果還是很不錯(cuò)的。下面就來(lái)看看如何實(shí)現(xiàn):

 



橘子 2006-03-11 14:55 發(fā)表評(píng)論
]]>
表格特效代碼全集中http://www.aygfsteel.com/forget/archive/2006/03/11/34825.html橘子橘子Sat, 11 Mar 2006 06:52:00 GMThttp://www.aygfsteel.com/forget/archive/2006/03/11/34825.htmlhttp://www.aygfsteel.com/forget/comments/34825.htmlhttp://www.aygfsteel.com/forget/archive/2006/03/11/34825.html#Feedback2http://www.aygfsteel.com/forget/comments/commentRss/34825.htmlhttp://www.aygfsteel.com/forget/services/trackbacks/34825.html1. 兩種細(xì)線表格做法



  源碼如下:

<table width="100%" border="1" bordercolor="#000000">
  <tr bordercolor="#FFFFFF">
    <td>表格邊線為1,線色為黑,行線色為白。</td>
  </tr>
</table>
<p>
<table width="100%" border="0" cellspacing="1" bgcolor="#000000">
  <tr>
    <td bgcolor="#FFFFFF">表格邊線為0,間距為1,背景色為黑,行背景色為白。</td>
  </tr>
</table>

  2. 立體表格





  源碼如下:

<table  border=1 cellspacing=0  width=100% bordercolorlight=#333333 bordercolordark=#efefef>
  <tr bgcolor=#cccccc>
    <td>it365cn</td>
    <td>it365cn</td>
    <td>it365cn</td>
    <td>it365cn</td>
  </tr>
  <tr bgcolor=#cccccc>
    <td>cnbruce</td>
    <td>cnbruce</td>
    <td>cnbruce</td>
    <td>cnbruce</td>
  </tr>
</table>
<center>表格邊線為1,間隔為0,左上為#333333,右下為#efefef,行背景色為#cccccc

  3. 另類圓角表格制作





  源碼如下:

原圖:
<table cellpadding=0 cellspacing=0 border=0 width=282 align=center>
  <tr height=1>
    <td rowspan=4 width=1></td>
    <td rowspan=3 width=1></td>
    <td rowspan=2 width=1></td>
    <td width=2></td>
    <td bgcolor=#43B5C9></td>
    <td width=2></td>
    <td rowspan=2 width=1></td>
    <td rowspan=3 width=1></td>
    <td rowspan=4 width=1></td>
  </tr>
  <tr height=1>
    <td bgcolor=#43B5C9></td>
    <td bgcolor=#43B5C9></td>
    <td bgcolor=#43B5C9></td>
  </tr>
  <tr height=1>
    <td bgcolor=#43B5C9></td>
    <td colspan=3 bgcolor=#43B5C9></td>
    <td bgcolor=#43B5C9></td>
  </tr>
  <tr height=2>
    <td bgcolor=#43B5C9></td>
    <td colspan=5 bgcolor=#43B5C9></td>
    <td bgcolor=#43B5C9></td>
  </tr>
</table>
<p>放大
<table cellpadding=0 cellspacing=0 border=1 width=282 align=center>
  <tr height=10>
    <td rowspan=4 width=10></td>
    <td rowspan=3 width=10></td>
    <td rowspan=2 width=10></td>
    <td width=20></td>
    <td bgcolor=#43B5C9></td>
    <td width=20></td>
    <td rowspan=2 width=10></td>
    <td rowspan=3 width=10></td>
    <td rowspan=4 width=10></td>
  </tr>
  <tr height=10>
    <td bgcolor=#43B5C9></td>
    <td bgcolor=#43B5C9></td>
    <td bgcolor=#43B5C9></td>
  </tr>
  <tr height=10>
    <td bgcolor=#43B5C9></td>
    <td colspan=3 bgcolor=#43B5C9></td>
    <td bgcolor=#43B5C9></td>
  </tr>
  <tr height=20>
    <td bgcolor=#43B5C9></td>
    <td colspan=5 bgcolor=#43B5C9></td>
    <td bgcolor=#43B5C9></td>
  </tr>
</table>

  4. 虛線邊框表格





  源碼如下:

<style type="text/css">
.tb{BORDER-BOTTOM: #000000 1px dotted;BORDER-top: #000000 1px dotted;BORDER-LEFT:
#000000 1px dotted;BORDER-RIGHT: #000000 1px dotted;}
</style>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="tb"><center>www.blueidea.com</td>
  </tr>
</table>
<p>
虛線直線1
<hr size=1 style="border:1px dotted #001403;">
虛線直線2
<p size=1 style="border:1px dotted #001403;">

  5. 分類型表格




  源碼如下:

<fieldset>
<legend>item</legend>
content
</fieldset>


  6. 變色的單元格1,通過(guò)a:hover做




  源碼如下:

<style>
a:link,a:visited,a:hover
{width:100%;text-decoration:none;font-family:verdana;font-size:10px;color:white}
a:hover{background:#0099ff;color:black}
td{background:#3366cc;color:white;padding:0px}
</style>


<TABLE width=100% cellspacing=1 bgcolor=black >
  <TR>
    <TD><a href="#">Blueidea
    <TD><a href="#">.com
  <TR>
    <TD><a href="#">CNBruce
    <TD><a href="#">.com
</TABLE>

  7. 變色的單元格2,已經(jīng)做成了CSS,注意還有透明效果

  源碼如下:

<style type="text/css">
.aa
{ background-color:#0000ff; color:#ff0000;filter: alpha(opacity=50)}
.bb 
{ background-color:#3366cc; color:#ffffff}
</style>



<table  width="100%">
  <tr>
    <td  onmouseover="this.className='aa'" onmouseout="this.className='bb'"
class="bb"><center><b>cnbruce</td>
   </tr>
</table>


  8. 變色的單元格3,通過(guò)mouse事件做.有點(diǎn)微軟的味道




  源碼如下:
<table width="100%" border="1" cellpadding="3" cellspacing="0"
bordercolor="#efefef" bgcolor="#efefef">
  <tr>
    <td onMouseOut="this.bgColor='#efefef';this.borderColor='#efefef'";
onMouseOver="this.bgColor='#cccccc'; this.borderColor='#000033'"><div align="left">
Blueidea</div></td>
  </tr>
  <tr>
    <td
onMouseOut="this.bgColor='#efefef';this.borderColor='#efefef'"; onMouseOver="this.bgColor='#cccccc'; this.borderColor='#000033'">
cnbruce</td>
  </tr>
</table>

  9. 透明表格

<table bgcolor=#ececec style="filter:alpha(opacity=50)" width=200 height=100 border=0>
  <tr><td><center>cnbruce</td></tr>
</table>

  10. 表格邊框顯示外陰影



  源碼如下:

<table  align=center  width=200  height=100  bgcolor=#f3f3f3
style="filter:progid:DXImageTransform.Microsoft.Shadow
(Color=#333333,Direction=120,strength=5)">
  <tr>
    <td><center>www.cnbruce.com</td>
  </tr>
</table>

  11. VML代碼實(shí)現(xiàn)的圓角表格
  (1).



  源碼如下:

<html xmlns:v>
<style>
v\:*{behavior:url(#default#VML)}
</style>
<body>
   <v:RoundRect style="position:relative;width:150;height:240px">
    <v:shadow on="T" type="single" color="#b3b3b3" offset="3px,3px"/>
    <v:TextBox style="font-size:10.2pt;">VML</v:TextBox>
    </v:RoundRect>
</body>
</html>

  (2).



  源碼如下:

<html  xmlns:v>
<style>
v\:*{behavior:url(#default#VML)}
</style>
<body>
      <v:RoundRect  style="position:relative;width:150;height:240px">
<v:path  textpathok="true"  />
      <v:textpath  on="true"  string="cnbrucecnbrucecnbrucecnbrucecnbruc
ecnbrucecnbrucecnbrucecnbrucecnbrucecnbrucecnbrucecnbrucecnbrucecnbruce"  />
        <v:shadow  on="T"  type="single"  color="#b3b3b3"  offset="3px,3px"/>
        <v:TextBox  style="font-size:10.2pt;">VML</v:TextBox>
        </v:RoundRect> 
</body>
</html>

  (3).




  源碼如下:

<html xmlns:v>
<style>
v\:*{behavior:url(#default#VML)}
</style>
<body>
   <v:RoundRect style="position:relative;width:150;height:240px" arcsize=0.5>
    <v:shadow on="T" type="single" color="#b3b3b3" offset="3px,3px"/>
    <v:TextBox style="font-size:10.2pt;">VML</v:TextBox>
    </v:RoundRect>
</body>
</html>



橘子 2006-03-11 14:52 發(fā)表評(píng)論
]]>
ASP+Access創(chuàng)建網(wǎng)站RSS格式http://www.aygfsteel.com/forget/archive/2005/11/15/19881.html橘子橘子Tue, 15 Nov 2005 06:35:00 GMThttp://www.aygfsteel.com/forget/archive/2005/11/15/19881.htmlhttp://www.aygfsteel.com/forget/comments/19881.htmlhttp://www.aygfsteel.com/forget/archive/2005/11/15/19881.html#Feedback1http://www.aygfsteel.com/forget/comments/commentRss/19881.htmlhttp://www.aygfsteel.com/forget/services/trackbacks/19881.html其中,變量 sXmlClear 用于聲明產(chǎn)生的文檔是一段 XML 格式的文檔,該聲明是可選的,以保持與舊版本 XML 的向后兼容性。

sRssHead 定義 Rss 的基本元素。RSS feed 通常由 4 個(gè)主要元素構(gòu)成:<channel>,&l t;image>,<item> 和 <textinput>。其中,<channel> 元素是必需的,<item> 元素至少要出現(xiàn)一次。<textinput> 和 <image> 元素是可選的,是否使用要視具體情況而定。
<channel> 元素包含 Channel(RSS feed 的來(lái)源)的一個(gè)簡(jiǎn)單描述。<title> 是頻道的名稱/標(biāo)題;<link> 是與頻道內(nèi)容對(duì)應(yīng)的包含了完整內(nèi)容的那個(gè)網(wǎng)頁(yè)的 URL;<description> 是與 <channel> 的內(nèi)容有關(guān)的簡(jiǎn)單描述;<language> 代表語(yǔ)言。還有一些別的屬性,不是太常用。
<item> 元素用于對(duì)數(shù)據(jù)庫(kù)中的記錄進(jìn)行描述。<item> 一般有若干項(xiàng),對(duì)應(yīng)了一個(gè) Rss feed 的數(shù)據(jù)集合。

<!-Filename:RssFeed_news.asp:-->
<% Option explicit %>
<!-- #include file="./conn.inc" -->

<%
  Dim sSQL, rs, sCrLf, sXmlClear, sRssHead, sRssEnd
  sCrLf = chr(13) & chr(10)  ’回車+換行

  sXmlClear = "<?xml version=’1.0’ encoding=’gb2312’?>" & sCrLf

  sRssHead = "<rss version=’2.0’>" & sCrLf
  sRssHead = sRssHead & "<channel>" & sCrLf
  sRssHead = sRssHead & "<title> Why100000 </title>" & sCrLf
  sRssHead = sRssHead & "<description> Why100000 </description>" & sCrLf
  sRssHead = sRssHead & "<link>http://news.why100000.com/<;/link>" & sCrLf
  sRssHead = sRssHead & "<language>zh-cn</language>" & sCrLf
  sRssHead = sRssHead & "<docs>Why100000.COM News Center</docs>" & sCrLf
  sRssHead = sRssHead & "<generator>Rss Generator By WWW.Why100000.COM</generator>" & sCrLf

  sRssEnd = "</channel></rss>"

  Response.CharSet="gb2312"  ’數(shù)據(jù)集
  Response.ContentType="text/xml"  ’數(shù)據(jù)流格式定義

  ’輸出:
  Response.write sXmlClear
  Response.write sRssHead

  sSQL="select top 15 * from news order by sortid desc"
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs.Open sSQL, s_Conn, 1, 1
  if not (rs.eof and rs.bof) then
    do while not rs.eof
      response.write "<item>" & sCrLf
      response.write "<title> " & rs("f_topic") & " </title>" & sCrLf
      response.write "<link> " & "http://www.why100000.com/_news/show_a_new.asp?autoid="; & 

rs("f_i_autoid") & " </link>" & sCrLf
      response.write "<author> " & rs("f_author") & " </author>" & sCrLf
      response.write "<pubDate> " & rs("f_datetime") & " </pubDate>" & sCrLf
      response.write "</item>" & sCrLf & sCrLf
      rs.movenext
    loop
  end if
  rs.close
  set rs=nothing

  Response.write sRssEnd
%>

IE 中的調(diào)用格式是:<a ;>技術(shù)新聞

RSS</a>。如果用一些客戶端軟件訂閱該 RSS,訂閱的 Url 就是http://www.why100000.com/_news/RssFeed_news.asp。

橘子 2005-11-15 14:35 發(fā)表評(píng)論
]]>
將RSS加進(jìn)個(gè)人主頁(yè)http://www.aygfsteel.com/forget/archive/2005/11/15/19880.html橘子橘子Tue, 15 Nov 2005 06:34:00 GMThttp://www.aygfsteel.com/forget/archive/2005/11/15/19880.htmlhttp://www.aygfsteel.com/forget/comments/19880.htmlhttp://www.aygfsteel.com/forget/archive/2005/11/15/19880.html#Feedback0http://www.aygfsteel.com/forget/comments/commentRss/19880.htmlhttp://www.aygfsteel.com/forget/services/trackbacks/19880.html一、知己知彼,百戰(zhàn)不殆

要想為網(wǎng)站創(chuàng)建RSS,首先我們必須對(duì)RSS進(jìn)行深入的了解。RSS是基于XML(可擴(kuò)展標(biāo)志語(yǔ)言)的一種形式,并且所有的RSS文件都要遵守萬(wàn)維網(wǎng)聯(lián)盟(W3C)站點(diǎn)發(fā)布的XML 1.0規(guī)范。一般來(lái)說(shuō),RSS文檔的最頂層是一個(gè)< rss >元素作為根元素,< rss >元素有一個(gè)強(qiáng)制屬性version,用于指定當(dāng)前RSS文檔的版本,目前常用的RSS版本是2.0。< rss >元素下的子元素是唯一的一個(gè)< channel >元素,它包含了關(guān)于該網(wǎng)站或欄目的信息和內(nèi)容,在下必備的語(yǔ)句有三個(gè):

< title >:網(wǎng)站或欄目的名稱,一般與網(wǎng)站或欄目的頁(yè)面title一致;
< link >:網(wǎng)站或欄目的URL;
< description >:對(duì)網(wǎng)站或欄目的簡(jiǎn)要描述。

還可以使用一些如< language >(語(yǔ)言)、< copyright >(版權(quán)聲明)等可選語(yǔ)句來(lái)豐富< channel >內(nèi)容,具體的新聞提要就要依靠來(lái)體現(xiàn)了。一般一條新聞就是一個(gè)< item >,< item >下至少要存在一個(gè)< title >或< description >,其他語(yǔ)句可以根據(jù)需要進(jìn)行選擇。

提示:更多RSS的語(yǔ)句介紹可參考http://www.donews.net/softbunny/articles/11030.aspx。學(xué)習(xí)RSS語(yǔ)句時(shí)可以使用IE打開一個(gè)XML鏈接進(jìn)行對(duì)照參考,如天極網(wǎng)網(wǎng)絡(luò)通信版塊聚合內(nèi)容http://rss.chinabyte.com/218424581927469056.xml。

二、RSS,手工造

了解了RSS具體的語(yǔ)句結(jié)構(gòu)和用法后,我們就可以按照以下格式在最常用的記事本或網(wǎng)頁(yè)編輯軟件中手工編輯網(wǎng)站的RSS了。

其中中文文字和省略號(hào)部分就是要添加新聞的部分,按照提示依次添加完畢即可保存為.xml文件并在網(wǎng)站的適當(dāng)位置加入“XML”字樣的圖標(biāo),然后鏈接到該    .xml文件,這樣你的網(wǎng)站就擁有了RSS輸出了。

    三、工具編寫,輕松自如

如果網(wǎng)站更新的新聞量大,依靠手工編寫RSS文件就有可能出錯(cuò)。我們可以請(qǐng)RSS生成器(下載地址:http://sq.onlinedown.net/down/rsscreator.rar)來(lái)輔助我們工作。開啟軟件,執(zhí)行“文件→新建→RSS”新建一個(gè)RSS文件(圖1)。首先在上方“必選元素”區(qū)輸入“Description”、“Link”和“Title”三個(gè)必選語(yǔ)句的內(nèi)容,要添加新聞條目就點(diǎn)擊“Items”后的按鈕進(jìn)入新聞添加窗口(圖2),單擊“Add”按鈕增加一個(gè)新聞條目,然后在左邊的語(yǔ)句中根據(jù)提示添加新聞標(biāo)題(Title)、簡(jiǎn)要(Description)和鏈接(Link)等,完畢后返回到軟件主界面,按下工具欄中的保存按鈕將文檔保存為  .xml文件即可。

圖1

圖2

提示:RSS生成器需要.NET Framework的支持,在安裝之前要在http://go.microsoft.com/fwlink/?LinkId=9832處下載安裝.NET Framework組件包。

四、自動(dòng)生成,一勞永逸

對(duì)于靜態(tài)網(wǎng)站我們可以手工或使用工具來(lái)編寫RSS輸出,若是動(dòng)態(tài)網(wǎng)站則要通過(guò)程序來(lái)轉(zhuǎn)換新聞數(shù)據(jù)庫(kù)內(nèi)容輸出RSS了。有興趣的朋友可以在http://www.mh.fy.cn/rss2.rar處下載轉(zhuǎn)換模板,此模板適合ASP+ACCESS類的動(dòng)態(tài)網(wǎng)站更新系統(tǒng),需要修改的是數(shù)據(jù)庫(kù)鏈接部分db=*.mdb。另外在數(shù)據(jù)庫(kù)字段讀取以及給新聞標(biāo)題(Title)和鏈接(Link)等字段賦值也要根據(jù)數(shù)據(jù)庫(kù)的具體情況做一些修改(圖3),使用該模板調(diào)試成功后,網(wǎng)站的RSS輸出地址就是http://你的域名/rss2.asp。



橘子 2005-11-15 14:34 發(fā)表評(píng)論
]]>
RSS 2.0規(guī)范http://www.aygfsteel.com/forget/archive/2005/11/15/19879.html橘子橘子Tue, 15 Nov 2005 06:32:00 GMThttp://www.aygfsteel.com/forget/archive/2005/11/15/19879.htmlhttp://www.aygfsteel.com/forget/comments/19879.htmlhttp://www.aygfsteel.com/forget/archive/2005/11/15/19879.html#Feedback0http://www.aygfsteel.com/forget/comments/commentRss/19879.htmlhttp://www.aygfsteel.com/forget/services/trackbacks/19879.htmlrss2.0而言,是這三個(gè)詞的縮寫,對(duì)rss1.0而言則是RDF Site Summary的縮寫,1.0與2.0走的是兩個(gè)體系)
  RSS 基于XML,所有的 RSS 必須遵循w3c網(wǎng)站上公布的XML 1.0 規(guī)范。
  在一個(gè)RSS文檔中,根元素是<rss>,帶有一個(gè)必備屬性version,用以指明該文檔遵循的rss規(guī)范,如果rss文檔遵循本規(guī)范,則version值必須是2.0。
  <rss>元素只有一個(gè)子元素,包含關(guān)于頻道的一些信息。頻道(channel)是整個(gè)blog,項(xiàng)(item)指一篇文章或日志(也有稱這為post)。

RSS2.0元素channel的子元素列表


元素(Element) 描述(Description) 值域 重要性 舉例(Example)
title 頻道名稱 必備 GoUpstate.com News Headlines
link 頻道的URL 必備 http://www.goupstate.com/
Description 頻道的描述 必備 The latest news from GoUpstate.com, a Spartanburg Herald-Journal Web site.
language 頻道文章所用語(yǔ)言, 可用netscape或w3c推薦的列表 可選 en-us
copyright 頻道內(nèi)容的版權(quán)說(shuō)明 可選 Copyright 2002, Spartanburg Herald-Journal
managingEditor 責(zé)任編輯的email 可選 geo@herald.com (George Matesky)
webMaster 負(fù)責(zé)頻道技術(shù)事務(wù)的網(wǎng)站管理員email 可選 betty@herald.com (Betty Guernsey)
pubDate 頻道內(nèi)容發(fā)布日期,格式遵循RFC822格式(年份可為2們或4位) 可選 Sat, 07 Sep 2002 00:00:01 GMT
lastBuildDate 頻道內(nèi)容最后的修改日期 可選 Sat, 07 Sep 2002 09:42:31 GMT
category 指定頻道所屬的一個(gè)或幾個(gè)類別 可選 <category>Newspapers</category>
generator 生成該頻道的程序名 可選 MightyInHouse Content System v2.3
docs 指向該RSS文件所用格式說(shuō)明的URL 可選 http://blogs.law.harvard.edu/tech/rss
cloud Allows processes to register with a cloud to be notified of updates to the channel, implementing a lightweight publish-subscribe protocol for RSS feeds. More info here. 可選 <cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/>
ttl 有效期,用以指明該頻道可被緩存的最長(zhǎng)時(shí)間 分鐘為單位 可選 <ttl>60</ttl>
image 指定一個(gè) GIF或JPEG或PNG圖片,用以與頻道一起顯示 可選
rating 這個(gè)頻道的分級(jí)(主要指成人、限制、兒童等) 可選
textInput 指定一個(gè)text輸入框供用戶輸入,具體信息及功能未定。 可選
skipHours 提示新聞聚合器,那些小時(shí)時(shí)段它可以跳過(guò)。 可選
skipDays 提示新聞聚合器,那些天它可以跳過(guò)。 可選

RSS2.0元素channel的子元素image的子元素列表


元素(Element) 描述(Description) 值域 重要性 舉例(Example)
url 圖片的url 必備
title 圖片的標(biāo)題,用于http的alt屬性 必備
link 網(wǎng)站的url(實(shí)際中常以頻道的url代替) 必備
width 圖片的寬度(象素為單位) 最大144,默認(rèn)88 可選
height 圖片的高度(象素為單位) 最大400,默認(rèn)31 可選
description 用于link的title屬性 可選

RSS2.0元素channel的子元素cloud的子元素列表


元素(Element) 描述(Description) 值域 重要性 舉例(Example)
domain Cloud程序所在機(jī)器的域名或IP地址 radio.xmlstoragesystem.com
port 訪問(wèn)clound程序所通過(guò)的端口 80
path 程序所在路徑(不一定是真實(shí)路徑) /RPC2
registerProcedure 注冊(cè)的可提供的服務(wù)或過(guò)程 xmlStorageSystem.rssPleaseNotify
protocol 協(xié)議 xml-rpc, soap , http-post 之一 xml-rpc

RSS2.0元素channel的子元素textInput的子元素列表


元素(Element) 描述(Description) 值域 重要性 舉例(Example)
title Submit按鈕的標(biāo)簽 必備
description 解釋text輸入?yún)^(qū) 必備
name Text area對(duì)象的名字 必備
link 處理提交的請(qǐng)求的cgi程序 必備

關(guān)于item的內(nèi)容,請(qǐng)看基于XML-RPC的BloggerAPI學(xué)習(xí).
說(shuō)明:
  rss2.0要求<link>和<url>的值的非常部分開頭,須是在IANA注冊(cè)過(guò)的,如http://或https://或ftp://等。
  一個(gè)rss文件中,可以包括沒有這兒定義的元素,只要它是在某個(gè)命名空間被定義過(guò)。
  一個(gè)常見問(wèn)題是的區(qū)別,兩者在有些情況下是相同的,但前者可指幾某個(gè)長(zhǎng)文中的某個(gè)位置(即所謂的頁(yè)內(nèi)錨點(diǎn)吧)。



橘子 2005-11-15 14:32 發(fā)表評(píng)論
]]>
jar參數(shù)運(yùn)行應(yīng)用時(shí)classpath的設(shè)置http://www.aygfsteel.com/forget/archive/2005/08/26/11240.html橘子橘子Fri, 26 Aug 2005 09:52:00 GMThttp://www.aygfsteel.com/forget/archive/2005/08/26/11240.htmlhttp://www.aygfsteel.com/forget/comments/11240.htmlhttp://www.aygfsteel.com/forget/archive/2005/08/26/11240.html#Feedback0http://www.aygfsteel.com/forget/comments/commentRss/11240.htmlhttp://www.aygfsteel.com/forget/services/trackbacks/11240.html

當(dāng)用java -jar yourJarExe.jar來(lái)運(yùn)行一個(gè)經(jīng)過(guò)打包的應(yīng)用程序的時(shí)候,你會(huì)發(fā)現(xiàn)如何設(shè)置-classpath參數(shù)應(yīng)用程序都找不到相應(yīng)的第三方類,報(bào) ClassNotFound錯(cuò)誤。實(shí)際上這是由于當(dāng)使用-jar參數(shù)運(yùn)行的時(shí)候,java VM會(huì)屏蔽所有的外部classpath,而只以本身yourJarExe.jar的內(nèi)部class作為類的尋找范圍。

**解決方案**

一 BootStrap class擴(kuò)展方案

Java 命令行提供了如何擴(kuò)展bootStrap 級(jí)別class的簡(jiǎn)單方法.
-Xbootclasspath:?????完全取代基本核心的Java class 搜索路徑.
?????????????????????????????????? 不常用,否則要重新寫所有Java 核心class
-Xbootclasspath/a: 后綴在核心class搜索路徑后面.常用!!
-Xbootclasspath/p: 前綴在核心class搜索路徑前面.不常用,避免
?????????????????????????????????? 引起不必要的沖突.

語(yǔ)法如下:
?(分隔符與classpath參數(shù)類似,unix使用:號(hào),windows使用;號(hào),這里以u(píng)nix為例)
?java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar

二 extend class 擴(kuò)展方案

Java exten class 存放在{Java_home}\jre\lib\ext目錄下.當(dāng)調(diào)用Java時(shí),對(duì)擴(kuò)展class路徑的搜索是自動(dòng)的.總會(huì)搜索的.這樣,解決的方案就很簡(jiǎn)單了,將所有要使用的第三方的jar包都復(fù)制到ext 目錄下.

三 User class擴(kuò)展方案

當(dāng)使用-jar執(zhí)行可執(zhí)行Jar包時(shí),JVM將Jar包所在目錄設(shè)置為codebase目錄,所有的class搜索都在這個(gè)目錄下開始.所以如果使用了其他第三方的jar包,一個(gè)比較可以接受的可配置方案,就是利用jar包的Manifest擴(kuò)展機(jī)制.
步驟如下:

?1.將需要的第三方的jar包,復(fù)制在同可執(zhí)行jar所在的目錄或某個(gè)子目錄下.?比如:jar 包在 /usrhome/yourJarExe.jar 那么你可以把所有jar包復(fù)制到/usrhome目錄下或/usrhome/lib 等類似的子目錄下.

?2.修改Manifest 文件

?在Manifest.mf文件里加入如下行

?Class-Path:classes12.jar lib/thirdlib.jar

?Class-Path 是可執(zhí)行jar包運(yùn)行依賴的關(guān)鍵詞.詳細(xì)內(nèi)容可以參考?http://java.sun.com/docs/books/tutorial/ext/index.html


以上三種方法推薦第一種,擴(kuò)展性好,操作起來(lái)也最方便.
另外編寫自己的ClassLoader,來(lái)動(dòng)態(tài)載入class,是更加復(fù)雜和高級(jí)技術(shù).限于篇幅,不贅述.有興趣了解可以去google一下custom classloader

Java的安全機(jī)制隨不同的JDK版本有不同的變化,會(huì)影響很多核心CLASS,比如Thread,所以很多大型商業(yè)軟件,要求JDK的版本很嚴(yán)格.部分原因也在此.這也要求在發(fā)布自己編寫的應(yīng)用時(shí)候,不管大小,都要說(shuō)明開發(fā)和測(cè)試的JDK版本.


本文所述方法測(cè)試基于j2sdk 1.4.2_04-b05

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

附:背景知識(shí)

自JDK 1.2以后,JVM采用了委托(delegate)模式來(lái)載入class.采用這種設(shè)計(jì)的原因可以參考http://java.sun.com/docs/books/tutorial/ext/basics/load.html

歸納來(lái)講:是基于JVM sandbox(沙盒)安裝模型上提供應(yīng)用層的可定制的安全機(jī)制.


Java虛擬機(jī)(JVM)尋找Class的順序

1. Bootstrap classes

屬于Java 平臺(tái)核心的class,比如java.lang.String等.及rt.jar等重要的核心級(jí)別的class.這是由JVM Bootstrap class loader來(lái)載入的.一般是放置在{java_home}\jre\lib目錄下

2. Extension classes

基于Java擴(kuò)展機(jī)制,用來(lái)擴(kuò)展Java核心功能模塊.比如Java串口通訊模塊comm.jar.一般放置在{Java_home}\jre\lib\ext目錄下

3. User classes

開發(fā)人員或其他第三方開發(fā)的Java程序包.通過(guò)命令行的-classpath或-cp,或者通過(guò)設(shè)置CLASSPATH環(huán)境變量來(lái)引用.JVM通 過(guò)放置在{java_home}\lib\tools.jar來(lái)尋找和調(diào)用用戶級(jí)的class.常用的javac也是通過(guò)調(diào)用tools.jar來(lái)尋找用 戶指定的路徑來(lái)編譯Java源程序.這樣就引出了User class路徑搜索的順序或優(yōu)先級(jí)別的問(wèn)題.

?3.1 缺省值:調(diào)用Java或javawa的當(dāng)前路徑(.),是開發(fā)的class所存在的當(dāng)前目錄
?3.2 CLASSPATH環(huán)境變量設(shè)置的路徑.如果設(shè)置了CLASSPATH,則CLASSPATH的值會(huì)覆蓋缺省值
?3.3 執(zhí)行Java的命令行-classpath或-cp的值,如果制定了這兩個(gè)命令行參數(shù)之一,它的值會(huì)覆蓋環(huán)境變量CLASSPATH的值
?3.4 -jar 選項(xiàng):如果通過(guò)java -jar 來(lái)運(yùn)行一個(gè)可執(zhí)行的jar包,這當(dāng)前jar包會(huì)覆蓋上面所有的值.換句話說(shuō),-jar 后面所跟的jar包的優(yōu)先級(jí)別最高,如果指定了-jar選項(xiàng),所有環(huán)境變量和命令行制定的搜索路徑都將被忽略.JVM APPClassloader將只會(huì)以jar包為搜索范圍.
有關(guān)可執(zhí)行jar有許多相關(guān)的安全方面的描述,可以參考http://java.sun.com/docs/books/tutorial/jar/ 來(lái)全面了解.

這也是為什么應(yīng)用程序打包成可執(zhí)行的jar包后,不管你怎么設(shè)置classpath都不能引用到第三方j(luò)ar包的東西了.



橘子 2005-08-26 17:52 發(fā)表評(píng)論
]]>
主站蜘蛛池模板: 四子王旗| 贡嘎县| 喀喇| 临夏县| 平阴县| 聂拉木县| 棋牌| 新河县| 闵行区| 恭城| 伊宁县| 伊宁市| 泸水县| 驻马店市| 峡江县| 隆林| 封丘县| 牡丹江市| 柞水县| 遂昌县| 南岸区| 青冈县| 分宜县| 毕节市| 安西县| 德清县| 霞浦县| 彭山县| 改则县| 灵寿县| 巍山| 南康市| 惠安县| 阿巴嘎旗| 绍兴县| 崇文区| 精河县| 阳东县| 闽清县| 印江| 剑阁县|