﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-forget and forget-随笔分类-WEB开发</title><link>http://www.blogjava.net/forget/category/3183.html</link><description>&lt;h2&gt;能吃能睡是福;能忘是大福......&lt;/h2&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 13 May 2011 13:41:58 GMT</lastBuildDate><pubDate>Fri, 13 May 2011 13:41:58 GMT</pubDate><ttl>60</ttl><item><title>SVN完整安装及简略使用</title><link>http://www.blogjava.net/forget/archive/2006/08/08/62304.html</link><dc:creator>橘子</dc:creator><author>橘子</author><pubDate>Tue, 08 Aug 2006 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/forget/archive/2006/08/08/62304.html</guid><wfw:comment>http://www.blogjava.net/forget/comments/62304.html</wfw:comment><comments>http://www.blogjava.net/forget/archive/2006/08/08/62304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forget/comments/commentRss/62304.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forget/services/trackbacks/62304.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 安装																						一、             																				获取资源																																																						（1）       								apache Http Server 2.0....&nbsp;&nbsp;<a href='http://www.blogjava.net/forget/archive/2006/08/08/62304.html'>阅读全文</a><img src ="http://www.blogjava.net/forget/aggbug/62304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forget/" target="_blank">橘子</a> 2006-08-08 10:33 <a href="http://www.blogjava.net/forget/archive/2006/08/08/62304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>php开发wap常用技巧</title><link>http://www.blogjava.net/forget/archive/2006/06/17/53462.html</link><dc:creator>橘子</dc:creator><author>橘子</author><pubDate>Sat, 17 Jun 2006 03:43:00 GMT</pubDate><guid>http://www.blogjava.net/forget/archive/2006/06/17/53462.html</guid><wfw:comment>http://www.blogjava.net/forget/comments/53462.html</wfw:comment><comments>http://www.blogjava.net/forget/archive/2006/06/17/53462.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/forget/comments/commentRss/53462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forget/services/trackbacks/53462.html</trackback:ping><description><![CDATA[
		<p>在php中输出返回上一级的代码:<br />echo "&lt;a href=".$_SERVER["HTTP_REFERER"]."&gt;点击这里返回&lt;/a&gt;";<br />在wap中的代码是:<br />&lt;?php <br />@header("Content-Type:text/vnd.wap.wml");<br />?&gt;<br />&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN" "<a href="http://www.wapforum.org/DTD/wml13.dtd">http://www.wapforum.org/DTD/wml13.dtd</a>"&gt;<br />&lt;wml&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv="expires" content="0" /&gt;<br />&lt;/head&gt;<br />&lt;card title="输入标题"&gt;<br />&lt;do type="prev" label="返回上页"&gt; <br />&lt;prev/&gt; <br />&lt;!--provide a button you can clink to back a step--&gt; <br />&lt;/do&gt;&lt;br/&gt;<br />&lt;!--&lt;anchor&gt;<br />&lt;prev/&gt;后退<br />&lt;/anchor&gt;--&gt;  <br />&lt;/card&gt;<br />&lt;/wml&gt;<br />在wap中打电话的代码:<br />&lt;?php <br /> @header("Content-Type:text/vnd.wap.wml"); <br />?&gt;<br />&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN" "<a href="http://www.wapforum.org/DTD/wml13.dtd">http://www.wapforum.org/DTD/wml13.dtd</a>"&gt;<br />&lt;wml&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv="expires" content="0" /&gt;<br />&lt;/head&gt;<br />&lt;card title="标题"&gt;<br />&lt;p&gt;<br />&lt;input name="phone_no" format="*m" value="13"/&gt;<br />&lt;do type="option" &gt;<br />&lt;go href="wtai://wp/mc;$(phone_no)"/&gt;<br />&lt;/do&gt;&lt;br/&gt;<br />或者<br />&lt;a href="wtai://wp/mc;13333333333"&gt;拨打电话&lt;/a&gt;<br />&lt;br /&gt;<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;/wml&gt;<br /></p>
		<table cellspacing="0" cellpadding="0" width="514" align="center" border="0">
				<tbody>
						<tr>
								<td style="WORD-BREAK: break-all" width="514">
										<font color="#000000" size="2">
												<div class="ContentFont" id="NewaspContentLabel" style="PADDING-RIGHT: 10px; DISPLAY: block; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px">
														<font id="font_word" style="FONT-SIZE: 12px; FONT-FAMILY: 宋体, Verdana, Arial, Helvetica, sans-serif">
																<font size="3">加入WAP书签<br /><br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE CHARACTERISTIC-LIST SYSTEM "/DTD/characteristic_list.xml"&gt;<br />&lt;CHARACTERISTIC-LIST&gt;<br />&lt;CHARACTERISTIC TYPE="ADDRESS"&gt;<br />&lt;PARM NAME="BEARER" VALUE="GPRS"/&gt;<br />&lt;PARM NAME="PROXY" VALUE="10.0.0.172"/&gt;<br />&lt;PARM NAME="PORT" VALUE="9201"/&gt;<br />&lt;PARM NAME="GPRS_ACCESSPOINTNAME" VALUE="wap.02826.com"/&gt;<br />&lt;PARM NAME="PPP_AUTHTYPE" VALUE="PAP"/&gt;<br />&lt;/CHARACTERISTIC&gt;<br />&lt;CHARACTERISTIC TYPE="NAME"&gt;<br />&lt;PARM NAME="NAME" VALUE="wmzsoft GPRS"/&gt;<br />&lt;/CHARACTERISTIC&gt;<br />&lt;CHARACTERISTIC TYPE="BOOKMARK"/&gt;<br />&lt;PARM NAME="NAME" VALUE="02826"/&gt;<br />&lt;PARM NAME="URL" VALUE="</font>
																<a href="http://wap.02826.com/" target="_blank">
																		<font size="3">http://wap.02826.com</font>
																</a>
																<font size="3">"/&gt;<br />&lt;/CHARACTERISTIC&gt;<br />&lt;/CHARACTERISTIC-LIST&gt; </font>
														</font>
												</div>
										</font>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/forget/aggbug/53462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forget/" target="_blank">橘子</a> 2006-06-17 11:43 <a href="http://www.blogjava.net/forget/archive/2006/06/17/53462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>点中复选框使得复选框后的文本框内容显示出指定的内容</title><link>http://www.blogjava.net/forget/archive/2006/06/09/51764.html</link><dc:creator>橘子</dc:creator><author>橘子</author><pubDate>Fri, 09 Jun 2006 15:08:00 GMT</pubDate><guid>http://www.blogjava.net/forget/archive/2006/06/09/51764.html</guid><wfw:comment>http://www.blogjava.net/forget/comments/51764.html</wfw:comment><comments>http://www.blogjava.net/forget/archive/2006/06/09/51764.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forget/comments/commentRss/51764.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forget/services/trackbacks/51764.html</trackback:ping><description><![CDATA[&lt;script language="JavaScript"&gt;<br />&lt;!--<br />function test(obj) {<br />    if (obj.checked) {document.all(obj.name+'_t').value=obj.value}<br />    else {document.all(obj.name+'_t').value=''}<br />}<br />//--&gt;<br />&lt;/script&gt;<br />&lt;input type="checkbox" name="cb1" value="aaaa" onClick="test(this)"&gt;aaaa<br />&lt;input type="text" name="cb1_t"&gt;<br />&lt;br&gt;<br />&lt;input type="checkbox" name="cb2" value="bbbb" onClick="test(this)"&gt;bbbb<br />&lt;input type="text" name="cb2_t"&gt;<br />&lt;br&gt;<br />&lt;input type="checkbox" name="cb3" value="cccc" onClick="test(this)"&gt;cccc<br />&lt;input type="text" name="cb3_t"&gt;<br />&lt;br&gt;<br />&lt;input type="checkbox" name="cb4" value="dddd" onClick="test(this)"&gt;dddd<br />&lt;input type="text" name="cb4_t"&gt;<br /><br />这样一来 如果想输入某个确定的值时就不用那么辛辛苦苦的复制了，点击就自动选择！<img src ="http://www.blogjava.net/forget/aggbug/51764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forget/" target="_blank">橘子</a> 2006-06-09 23:08 <a href="http://www.blogjava.net/forget/archive/2006/06/09/51764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>php上传多个文件</title><link>http://www.blogjava.net/forget/archive/2006/06/08/51520.html</link><dc:creator>橘子</dc:creator><author>橘子</author><pubDate>Thu, 08 Jun 2006 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/forget/archive/2006/06/08/51520.html</guid><wfw:comment>http://www.blogjava.net/forget/comments/51520.html</wfw:comment><comments>http://www.blogjava.net/forget/archive/2006/06/08/51520.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/forget/comments/commentRss/51520.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forget/services/trackbacks/51520.html</trackback:ping><description><![CDATA[
		<p>前面提到了上传单个文件的方法，上传多个文件的思想类似<br />1、在表单页面动态生成多个文件提交框，这里注意一下，多个文件提交框的名字要设置为数组，否则只有一个文件会上传。<br />此时在$_FILES数组构造方式是这样：$_FILES["files"][xxxxfileProperty][xxxcount]; 比如说我要知道第一个文件的error值:$_FILES["userfiles"]["error"][0] ，第一个文件客户端名字:$_FILES["userfiles"]["name"][0]等等。<br />2、接收端接收，操作和单个的是一样，只是需要做个循环，有多少个文件做多少次循环，以便所有的文件都能正确发送。<br />示例代码：<br /><font color="#0000ff">表单页面</font><br />&lt;form enctype="multipart/form-data" action="post.php" method="post"&gt;<br />&amp;nbsp;&amp;nbsp;文章标题:&amp;nbsp;&amp;nbsp;&lt;input name="title" type="text"/&gt;&amp;nbsp;标题不能为空！<br />&lt;br /&gt;&amp;nbsp;&amp;nbsp;淘吧名字:&amp;nbsp;&amp;nbsp;&lt;input name="bar_name" type="text"/&gt;<br />&lt;?php<br />echo "请选择一个！\t(";<br />for ($i=0; $i&lt;count($name); $i++ ){<br /> echo mb_convert_encoding($name[$i]["name"],"UTF-8","GB2312");<br /> echo "  ";<br />}<br />echo ")";<br />?&gt;<br />&lt;br /&gt;<br />&lt;textarea name="text" cols="90" rows="20"&gt;&lt;/textarea&gt;<br />&lt;?php<br />for ($i=0;$i&lt;3;$i++){<br /> echo "&lt;input name=\"userfile[]\" type=\"file\"/&gt;";<br />}<br />echo "&lt;input name=\"i\" type=\"hidden\" value=\"$i\" /&gt;";<br />?&gt;<br />&lt;/td&gt;&lt;/tr&gt;<br />&lt;/table&gt;<br />&lt;table align="center" cellpadding="0" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;<br />&lt;input name="submit" type="submit" value="确定提交"/&gt;&amp;nbsp;&amp;nbsp;<br />&lt;input name="reset" type="reset" value="重新来过"/&gt;<br />&lt;/form&gt;<br /><font color="#0000ff">处理页面<br /></font>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>"&gt;<br />&lt;html xmlns="<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>"&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;<br />&lt;title&gt;提交&lt;/title&gt;<br />&lt;/head&gt;</p>
		<p>&lt;body&gt;<br />&lt;?php<br />$title=$_POST["title"];<br />$text=$_POST["text"];<br />$name=$_POST["name"];<br />$count=$_POST["i"];<br />include_once("数据库连接文件");<br />if (empty($title)||empty($text)||empty($bar_name)){<br /> echo "标题或内容不能空<br /> die("&lt;br /&gt;&lt;a href=\"index.php\"&gt;重新来过&lt;/a&gt;");<br />}<br /><br />/*这里是数据查询语言取出要用的数据*/<br /><br />if(in_array("0", $_FILES['userfile']['error'])){//上传文件开始<br /> $uploaddir= 'attfile/';//设置上传的文件夹地址<br /> $FILES_EXT=array('.gif','.jpg','.mp3','.3gp');//设置允许上传文件的类型<br /> $MAX_SIZE = 20000000;//设置文件上传限制20000000byte=2M<br /> for ($i=0;$i&lt;$count;$i++){<br />  $FILES_NAME=$_FILES['userfile']['name'][$i];//客户端文件名<br />  //取出文件后缀名，strrpos()从标记开始前字节个数(不算标记),substr()显示从第strrpos()之后的字符<br />  $file_ext=substr($FILES_NAME,strrpos($FILES_NAME,"."));<br />  //检查文件大小<br />  if($_FILES['userfile']['size'][$i]&gt;$MAX_SIZE){<br />   echo "文件大小超程序允许范围！";<br />   exit;<br />  }<br />  //检查文件类型<br />  if(in_array($file_ext, $FILES_EXT)){<br />   $_FILES['userfile']['name'][$i]=date("YmdHis").rand(10000,1000000).$file_ext;<br />   //echo $_FILES['userfile']['name'][$i];<br />   $uploadfile = $uploaddir.$_FILES['userfile']['name'][$i];//上传后文件的路径及文件名<br />   //echo $uploadfile;<br />   //用move函数生成临时文件名，并按照 $_FILES['userfile']['name']上传到$uploaddir下<br />   if (move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $uploadfile)) {<br />    //将上传后的路径写入到数据库中<br />    $post_id=(int)$post_id;<br />    $uploadfile="attfile/".$_FILES['userfile']['name'][$i];<br />    $sql=插入语句<br />    $stmt=$db-&gt;prepare($sql);<br />    $stmt-&gt;execute();<br />    print "&lt;br /&gt;文件\n{$FILES_NAME}\n上传成功!";<br />   } else {<br />    print "上传错误!  以下是上传的信息:\n";<br />    print_r($_FILES);<br />   }<br />  }<br />  else{<br />   echo "{$FILES_NAME}\n不是允许上传的文件类型！";<br />   exit;<br />  }<br /> }<br />}</p>
		<p>?&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></p>
<img src ="http://www.blogjava.net/forget/aggbug/51520.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forget/" target="_blank">橘子</a> 2006-06-08 22:31 <a href="http://www.blogjava.net/forget/archive/2006/06/08/51520.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>php上传单个文件</title><link>http://www.blogjava.net/forget/archive/2006/06/08/51506.html</link><dc:creator>橘子</dc:creator><author>橘子</author><pubDate>Thu, 08 Jun 2006 14:09:00 GMT</pubDate><guid>http://www.blogjava.net/forget/archive/2006/06/08/51506.html</guid><wfw:comment>http://www.blogjava.net/forget/comments/51506.html</wfw:comment><comments>http://www.blogjava.net/forget/archive/2006/06/08/51506.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forget/comments/commentRss/51506.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forget/services/trackbacks/51506.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">    PHP上传文件的问题：<br />一：1、上传单个文件的时候。在表单页面设置文件输入域，&lt;input name="userfile" type="file" /&gt;然后表单要加入&lt;form <font style="BACKGROUND-COLOR: #0000ff">enctype="multipart/form-data"</font> action="post.php" method="post"&gt;这个属性，这是告诉浏览器我要上传文件的属性，一定要加上。<br />    2、设置好了表单，接下来的事就是读取表单的变量，如果你还定义了其他的变量，那么php使用$_POST来读出，如：$uservar=$_POST["uservar"]，然而文件是存在$_FILES中，具体见下面：<br /> <br />  * $_FILES['userfile']['name'] 客户端机器文件的原名称。<br />   * $_FILES['userfile']['type'] 文件的 MIME 类型，需要浏览器提供该信息的支持，例如“image/gif”。<br />   * $_FILES['userfile']['size'] 已上传文件的大小，单位为字节。<br />   * $_FILES['userfile']['tmp_name'] 文件被上传后在服务端储存的临时文件名。<br />   * $_FILES['userfile']['error'] 和该文件上传相关的错误代码 <br /><br />  1. 值：0; 没有错误发生，文件上传成功。<br />  2. 值：1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。<br />  3. 值：2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。<br />  4. 值：3; 文件只有部分被上传。<br />  5. 值：4; 没有文件被上传。 <br />3、完成上传过程。示例代码：<br />（1）<br />&lt;?php<br />$upload_file=$_FILES['userfile']['tmp_name'];<br />$upload_file_name=$_FILES['userfile']['name'];<br />if($upload_file){<br /> $file_size_max = 20000000;// 1M限制文件上传最大容量(bytes)<br /> $store_dir = "attfile/";// 上传文件的储存位置<br /> $accept_overwrite = 1;//是否允许覆盖相同文件<br /> // 检查文件大小<br /> if ($upload_file_size &gt; $file_size_max) {<br />  echo "对不起，你的文件容量大于规定";<br />  exit;<br /> }<br /> // 检查读写文件<br /> if (file_exists($store_dir . $upload_file_name) &amp;&amp; !$accept_overwrite) {<br />  echo   "存在相同文件名的文件";<br />  exit;<br /> }<br /> //复制文件到指定目录<br /> if (!move_uploaded_file($upload_file,$store_dir.$upload_file_name)) {<br />  echo "复制文件失败";<br />  exit;<br /> }<br />}<br />echo   "&lt;p&gt;你上传了文件:";<br />echo $_FILES['userfile']['name'];<br />echo "&lt;br&gt;";<br />//客户端机器文件的原名称。<br />Echo   "文件的 MIME 类型为:";<br />echo $_FILES['userfile']['type'];<br />//文件的 MIME 类型，需要浏览器提供该信息的支持，例如“image/gif”。<br />echo "&lt;br&gt;";</font>
		</p>
		<p>
				<font size="2">Echo   "上传文件大小:";<br />echo $_FILES['userfile']['size'];<br />//已上传文件的大小，单位为字节。<br />echo "&lt;br&gt;";</font>
		</p>
		<p>
				<font size="2">Echo   "文件上传后被临时储存为:";<br />echo $_FILES['userfile']['tmp_name'];<br />//文件被上传后在服务端储存的临时文件名。<br />echo "&lt;br&gt;";</font>
		</p>
		<p>
				<font size="2">$Erroe=$_FILES['userfile']['error'];<br />switch($Erroe){<br /> case 0:<br /> Echo   "上传成功"; break;<br /> case 1:<br /> Echo   "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值."; break;<br /> case 2:<br /> Echo   "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。";   break;<br /> case 3:<br /> Echo   "文件只有部分被上传";break;<br /> case 4:<br /> Echo   "没有文件被上传";break;<br />}<br />?&gt;<br />（2）&lt;?php<br />$uploaddir= '../attfile/';//设置上传的文件夹地址<br />$FILES_EXT=array('.gif','.jpg','.bmp');//设置允许上传文件的类型<br />$MAX_SIZE = 20000000;//设置文件上传限制20000000byte=2M<br />for ($i=0;$i&lt;count($userfile);$i++){<br /> $FILES_NAME=$_FILES['userfile']['name'][$i];//客户端文件名<br />}<br />//echo $FILES_NAME;<br />//取出文件后缀名，strrpos()从标记开始前字节个数(不算标记),substr()显示从第strrpos()之后的字符<br />$file_ext=substr($FILES_NAME,strrpos($FILES_NAME,"."));<br />//echo $file_ext;<br />//检查文件大小<br />if($_FILES['userfile']['size']&gt;$MAX_SIZE){<br /> echo "文件大小超程序允许范围！";<br /> exit;<br />}<br />//检查文件类型<br />if(in_array($file_ext, $FILES_EXT)){<br /> $_FILES['userfile']['name']=date("YmdHis").rand().$file_ext;<br /> $uploadfile = $uploaddir.$_FILES['userfile']['name'];//上传后文件的路径及文件名<br /> //将上传后的路径写入到数据库中</font>
		</p>
		<p>
				<font size="2"> //用move函数生成临时文件名，并按照 $_FILES['userfile']['name']上传到$uploaddir下<br /> if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {<br />  print "\n上传成功!";<br /> } else {<br />  print "上传错误!  以下是上传的信息:\n";<br />  print_r($_FILES);<br /> }<br />}<br />else{<br /> echo "{$file_ext}不是允许上传的文件类型！";<br /> exit;<br />}<br />?&gt;</font>
				<br />
				<br />
				<br />小技巧&gt;&gt;1、当在提交时，希望确认是否要提交可以在&lt;form&gt;里如这样加入：&lt;form onsubmit="return confirm('你真的要提交吗?')"&gt;<br />2、在php里希望返回时所有在文本框里的东西都保留可以这样：&lt;a href=javascript:history.back(1)&gt;重新来过&lt;/a&gt;。</p>
<img src ="http://www.blogjava.net/forget/aggbug/51506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forget/" target="_blank">橘子</a> 2006-06-08 22:09 <a href="http://www.blogjava.net/forget/archive/2006/06/08/51506.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中文问题的一般解决办法</title><link>http://www.blogjava.net/forget/archive/2006/03/29/38006.html</link><dc:creator>橘子</dc:creator><author>橘子</author><pubDate>Wed, 29 Mar 2006 03:17:00 GMT</pubDate><guid>http://www.blogjava.net/forget/archive/2006/03/29/38006.html</guid><wfw:comment>http://www.blogjava.net/forget/comments/38006.html</wfw:comment><comments>http://www.blogjava.net/forget/archive/2006/03/29/38006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forget/comments/commentRss/38006.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forget/services/trackbacks/38006.html</trackback:ping><description><![CDATA[
		<p>
				<a name="1">
						<span class="atitle">
								<strong>
										<font size="4">汉字编码的常识</font>
								</strong>
						</span>
				</a>
		</p>
		<p>我们知道，英文字符一般是以一个字节来表示的，最常用的编码方法是 ASCII 。但一个字节最多只能区分256个字符，而汉字成千上万，所以现在都以双字节来表示汉字，为了能够与英文字符分开，每个字节的最高位一定为1，这样双字节最多可以表示64K格字符。我们经常碰到的编码方式有 GB2312、BIG5、UNICODE 等。关于具体编码方式的详细资料，有兴趣的读者可以查阅相关资料。我肤浅谈一下和我们关系密切的 GB2312 和 UNICODE。GB2312 码，中华人民共和国国家标准汉字信息交换用编码，是一个由中华人民共和国国家标准总局发布的关于简化汉字的编码，通行于中国大陆地区及新加坡，简称国标码。两个字节中，第一个字节（高字节）的值为区号值加32（20H），第二个字节（低字节）的值为位号值加32（20H），用这两个值来表示一个汉字的编码。UNICODE 码是微软提出的解决多国字符问题的多字节等长编码，它对英文字符采取前面加“0”字节的策略实现等长兼容。如 “A” 的 ASCII 码为0x41，UNICODE 就为0x00，0x41。利用特殊的工具各种编码之间可以互相转换。</p>
		<p>
				<br />事实上，Java的中文问题都是由于Java应用所采用的缺省编码格式与目标或者应用所要读入字符的编码格式不同而造成的（具体参见文献1）。对于如何解决Java的中文问题，通常有四种方法：</p>
		<p>1） 选择JDK的中文本地化版本。尽管Java2 JDK的中文本地化版本（http://java.sun.com/products/jdk/1.2/chinesejdk.html）并不是一个官方的版本，Sun公司也没有承诺会对该本地化版本进行升级，但其仍不失为一个Java中文问题的解决方案。</p>
		<p>2） 选择合适的编译参数。对于Java的国际版本来讲，我们也可以在编译Java应用的时候通过指定确定的编码机制来实现其编译结果对中文的支持。例如，对于需要支持繁体中文和简体中文应用可以通过javac -encoding big5 sourcefile.java 和javac -encoding gb2312 sourcefile.java来编译源程序。</p>
		<p>3） 通过编程的方式实现字符编码的转换代码。通过编程的方式来解决Java的中文问题，已经成为了一种较为普遍的做法。下面就是一种最常见的字符编码转换函数，其将字符的编码格式转换为中文Windows系统的GBK编码形式。<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">static</span>
				<span style="COLOR: #000000"> String toChinese(String strvalue)<br /><img id="Codehighlighter1_51_315_Open_Image" onclick="this.style.display='none'; Codehighlighter1_51_315_Open_Text.style.display='none'; Codehighlighter1_51_315_Closed_Image.style.display='inline'; Codehighlighter1_51_315_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_51_315_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_51_315_Closed_Text.style.display='none'; Codehighlighter1_51_315_Open_Image.style.display='inline'; Codehighlighter1_51_315_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />   </span>
				<span id="Codehighlighter1_51_315_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_51_315_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_61_255_Open_Image" onclick="this.style.display='none'; Codehighlighter1_61_255_Open_Text.style.display='none'; Codehighlighter1_61_255_Closed_Image.style.display='inline'; Codehighlighter1_61_255_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_61_255_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_61_255_Closed_Text.style.display='none'; Codehighlighter1_61_255_Open_Image.style.display='inline'; Codehighlighter1_61_255_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />     </span>
						<span style="COLOR: #0000ff">try</span>
						<span id="Codehighlighter1_61_255_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_61_255_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000">(strvalue</span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span>
								<span style="COLOR: #0000ff">else</span>
								<span style="COLOR: #000000">
										<br />
										<img id="Codehighlighter1_132_244_Open_Image" onclick="this.style.display='none'; Codehighlighter1_132_244_Open_Text.style.display='none'; Codehighlighter1_132_244_Closed_Image.style.display='inline'; Codehighlighter1_132_244_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_132_244_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_132_244_Closed_Text.style.display='none'; Codehighlighter1_132_244_Open_Image.style.display='inline'; Codehighlighter1_132_244_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />         </span>
								<span id="Codehighlighter1_132_244_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_132_244_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           strvalue </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> String(strvalue.getBytes(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">ISO8859_1</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">), </span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">GBK</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />           </span>
										<span style="COLOR: #0000ff">return</span>
										<span style="COLOR: #000000"> strvalue;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />         }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img id="Codehighlighter1_274_310_Open_Image" onclick="this.style.display='none'; Codehighlighter1_274_310_Open_Text.style.display='none'; Codehighlighter1_274_310_Closed_Image.style.display='inline'; Codehighlighter1_274_310_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_274_310_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_274_310_Closed_Text.style.display='none'; Codehighlighter1_274_310_Open_Image.style.display='inline'; Codehighlighter1_274_310_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />         }</span>
						</span>
						<span style="COLOR: #0000ff">catch</span>
						<span style="COLOR: #000000">(Exception e)</span>
						<span id="Codehighlighter1_274_310_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_274_310_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />               </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />      }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />   }</span>
				</span>
		</div>
		<p>4） 定义字符输出集。对于JSP应用，我们可以通过&lt;%@ page contentType="text/html; charset=GBK" %&gt;或&lt;%@ page contentType="text/html; charset=GB2312" %&gt;来定义JSP页面的字符输出集。当然，我们也可以通过HTML的标记&lt;META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"&gt;来定义字符的输出集。<br /></p>
		<p>
				<a name="4">
						<span class="atitle">
								<font face="Arial" size="4">分析的原则</font>
						</span>
				</a>
		</p>
		<p>
				<font face="Arial" size="4">
				</font>
		</p>
		<p>总的说来，所有解决Java中文处理的方法都不是很复杂。相反的是，由于Java技术特别是J2EE技术涉及的内容繁多，各种Web服务器、应用服务器以及JDBC数据库驱动等参差不齐，所以如何正确而及时的发现应用的中文处理问题则变得相对复杂的多。那么我们如何来发现这些问题呢？</p>
		<p>通常，Java处理中文时所产生的问题都是由于用户的Java应用所采用的缺省编码格式与目标或者应用所要读入字符的编码格式不同而造成的，而引起这些不同的一个主要原因就是用户的Java应用与其它应用进行了编码格式不匹配的数据交换（包括直接或间接的数据输入、输出）。所以，为了及时发现问题，我们可以由这一点入手，根据以下的原则对应用进行分析：</p>
		<ol>
				<li>
						<b>注意字符变量情况</b>。由于变量的字符编码形式较为隐蔽，多次变量间数值的改变和运算可能会引起字符集的改变；在变量与页面所提交数据的各种操作中，较容易发生不同编码格式字符进行运算的情况。 
</li>
				<li>
						<b>注意任何形式的字符读入与输出</b>。之所以要提到任何形式，是因为Java应用大多数都是作为网络应用开发的，所以与其它语言的应用相比，Java应用需要面对网络世界各种各样的字符数据交换形式。例如各种表单的数据提交，URL形式的数据读入，经过加密运算的字符数据交换，网页控件选择结果的输入，控件内容的的显示（如List控件）等等。 
</li>
				<li>
						<b>小心使用第三方的组件和应用</b>。由于第三方组件和应用的实现是非透明的，所以一般情况下，我们很难判断这些组件或驱动的缺省编码格式是什么，也无法对其进行控制。因此，在使用它们所提供的接口函数进行数据交换的时候要特别注意，如果确实出现中文无法正确处理情况，应首先检查我们自己的代码并调整相关代码以适应这些接口，因为这些组件或者应用基本上不会提供调整编码机制的接口。必要时，我们可能需要采用其它可替换的组件或者应用。 
</li>
				<li>
						<b>注意被请求对象所含有的数据输入与输出</b>。这是非常隐蔽的一类情况，当我们的应用以对象的方式（例如序列化的对象）进行交互时，如果这个对象内部含有字符数据的处理过程，或者含有某些数据的输入、输出，甚至是抛出一段用中文注解的异常，都可能出现中文无法正确显示等问题。由于这些行为往往被封装在对象中，所以我们在编写程序时，很容易忽略这种可能情况。并且这种情况带有一定的不可预见性，例如我们可能不清楚这个对象会在什么时候抛出什么样的异常，所以这时我们就需要做一定的测试工作。 
</li>
				<li>
						<b>注意数据库的数据访问过程</b>。Java通过JDBC与数据库建立连接。对于JDBC驱动程序来说，由于目前大部分的JDBC驱动程序并不是针对中文系统而设计的(中文数据大都采用ISO-8859-1编码方式)，所以一般情况下在数据读写过程中往往都需要字符编码的转化。但是我们仍建议用户在使用这些JDBC驱动时，仔细阅读它的说明。如果确实无法弄清JDBC字符数据的编码到底是什么，我们的建议是做一些必要的测试。例如下面是一组在简体中文Win2000平台下，采用Weblogic 6.0所提供的JDBC驱动从MS SQL Server2000中正确读入中文字符的代码（例子中进行了字符运算）： <br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">    <img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Class.forName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">weblogic.jdbc.mssqlserver4.Driver</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).newInstance();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      conn </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> myDriver.connect(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">jdbc:weblogic:mssqlserver4</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, props);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      conn.setCatalog(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">labmanager</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     Statement st </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> conn.createStatement();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">execute a query</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    String  testStr;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />String testTempStr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String() ;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        testStr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String(testTempStr.getBytes(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ISO-8859-1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">编码转化</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    DatabaseMetaData DBMetaData </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">conn.getMetaData();<br /><img id="Codehighlighter1_475_483_Open_Image" onclick="this.style.display='none'; Codehighlighter1_475_483_Open_Text.style.display='none'; Codehighlighter1_475_483_Closed_Image.style.display='inline'; Codehighlighter1_475_483_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_475_483_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_475_483_Closed_Text.style.display='none'; Codehighlighter1_475_483_Open_Image.style.display='inline'; Codehighlighter1_475_483_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />    ResultSet rs </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> DBMetaData.getTables(</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String[]</span><span id="Codehighlighter1_475_483_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_475_483_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">TABLE</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"> );<br /><img id="Codehighlighter1_506_652_Open_Image" onclick="this.style.display='none'; Codehighlighter1_506_652_Open_Text.style.display='none'; Codehighlighter1_506_652_Closed_Image.style.display='inline'; Codehighlighter1_506_652_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_506_652_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_506_652_Closed_Text.style.display='none'; Codehighlighter1_506_652_Open_Image.style.display='inline'; Codehighlighter1_506_652_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> (rs.next())</span><span id="Codehighlighter1_506_652_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_506_652_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_565_648_Open_Image" onclick="this.style.display='none'; Codehighlighter1_565_648_Open_Text.style.display='none'; Codehighlighter1_565_648_Closed_Image.style.display='inline'; Codehighlighter1_565_648_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_565_648_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_565_648_Closed_Text.style.display='none'; Codehighlighter1_565_648_Open_Image.style.display='inline'; Codehighlighter1_565_648_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">; j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">rs.getMetaData().getColumnCount(); j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id="Codehighlighter1_565_648_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_565_648_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />testStr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> testStr </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">String(rs.getObject(j).toString().getBytes(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ISO-8859-1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span></span></div></li>
				<li>然而，需要注意的是，不同的JDBC驱动对相同的数据库的支持并不同，而同一类JDBC驱动对不同的  数据库的支持也不相同，也就是说我们的字符转化代码在JDBC驱动改变甚至是版本变化情况下都有可能无法正确工作。例如对于上面的例子，在同样的环境下改用i-net 的Una 2000 Driver Version 2.03 for MS SQL Server时，是无法正确处理中文的。原因很简单，这个JDBC驱动本身支持的就是GBK的编码机制，所以根本就不需要做任何的编码转化。 
</li>
				<li> <b>必要的测试</b>。由于Java中文问题的产生随着Web服务器，浏览器，运行环境和开发工具的不同都可能发生变化，所以为了更好的避免问题的发生，我们必须作一些针对性的测试。另外，在我们确实无法通过分析来确定Java的中文处理问题是否可能发生的情况下或者无法知道问题的发生是由于哪个环节（是Web服务器，浏览器还是JDBC数据驱动等等）引起的时候，测试工作则变得非常重要。并且我们可能需要较为全面的测试，例如对Web服务器，浏览器和JDBC数据驱动等都要做测试，这样有利于我们找出那些隐藏在多个环节协调过程中所产生的问题。 </li>
		</ol>
		<p>
				<br />Java 的基本类也可能存在问题。由于国际化的工作并不是在国内完成的，所以在这些基本类发布之前，没有经过严格的测试，所以对中文字符的支持并不像 Java Soft 所声称的那样完美。前不久，我的一位技术上的朋友发信给我说，他终于找到了 <b>Java Servlet 中文问题的根源</b>。两周以来，他一直为 Java Servlet 的中文问题所困扰，因为每面对一个含有中文字符的字符串都必须进行强制转换才能够得到正确的结果（这好象是大家公认的唯一的解决办法）。后来，他确实不想如此继续安分下去了，因为这样的事情确实不应该是高级程序员所要做的工作，他就找出 Servlet 解码的源代码进行分析，因为他怀疑问题就出在解码这部分。经过四个小时的奋斗，他终于找到了问题的根源所在。原来他的怀疑是正确的， Servlet 的解码部分完全没有考虑双字节，直接把 %XX 当作一个字符。（原来 Java Soft 也会犯这幺低级的错误！） </p>
		<p>如果你对这个问题有兴趣或者遇到了同样的烦恼的话，你可以按照他的步骤 <b>对Servlet.jar 进行修改</b>： </p>
		<p>找到源代码 HttpUtils 中的 static private String parseName ，在返回前将 sb（StringBuffer） 复制成 byte bs[] ，然后 return new String(bs,”GB2312”)。作上述修改后就需要自己解码了：</p>
		<p>HashTable form=HttpUtils .parseQueryString(request.getQueryString())或者</p>
		<p>form=HttpUtils.parsePostData(……)</p>
		<p>千万别忘了编译后放到 Servlet.jar 里面。<br /><br /><br />java中文问题详解<br /><b><span><a href="http://www.cn-java.com/target/news.php?news_id=210" target="_blank">http://www.cn-java.com/target/news.php?news_id=210</a></span></b><br />关于Java中文问题的几条分析原则<b><span><a href="http://www-900.ibm.com/developerWorks/cn/java/l-javachinese/index.shtml" target="_blank">http://www-900.ibm.com/developerWorks/cn/java/l-javachinese/index.shtml</a></span></b><br />全方位解决xml中文问题<b><span><a href="http://www.csdn.net/develop/read_article.asp?id=18901" target="_blank">http://www.csdn.net/develop/read_article.asp?id=18901</a></span></b><br />servlet 中的汉字编码问题<b><span><a href="http://www-900.ibm.com/developerWorks/cn/java/jsp_dbcsz/index.shtml" target="_blank">http://www-900.ibm.com/developerWorks/cn/java/jsp_dbcsz/index.shtml</a></span></b><br />Java程序的国际化和本地化介绍<b><span><a href="http://www-900.ibm.com/developerWorks/cn/java/joy-i18n/index.shtml" target="_blank">http://www-900.ibm.com/developerWorks/cn/java/joy-i18n/index.shtml</a></span></b><br />Java 编程技术中汉字问题的分析及解决<b><span><a href="http://www-900.ibm.com/developerWorks/cn/java/java_chinese/index.shtml" target="_blank">http://www-900.ibm.com/developerWorks/cn/java/java_chinese/index.shtml</a></span></b><br />Unicode专题<b><span><a href="http://www-900.ibm.com/developerWorks/cn/theme/unicode.shtml" target="_blank">http://www-900.ibm.com/developerWorks/cn/theme/unicode.shtml</a></span></b><br />这里也有篇专家写的文章:<br /><b><span><a href="http://www.javaworld.com/javaworld/jw-04-2004/jw-0419-multibytes.html" target="_blank">http://www.javaworld.com/javaworld/jw-04-2004/jw-0419-multibytes.html </a></span></b><!-- the post be hidden --></p>
<img src ="http://www.blogjava.net/forget/aggbug/38006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forget/" target="_blank">橘子</a> 2006-03-29 11:17 <a href="http://www.blogjava.net/forget/archive/2006/03/29/38006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网页表格深层探密</title><link>http://www.blogjava.net/forget/archive/2006/03/11/34826.html</link><dc:creator>橘子</dc:creator><author>橘子</author><pubDate>Sat, 11 Mar 2006 06:55:00 GMT</pubDate><guid>http://www.blogjava.net/forget/archive/2006/03/11/34826.html</guid><wfw:comment>http://www.blogjava.net/forget/comments/34826.html</wfw:comment><comments>http://www.blogjava.net/forget/archive/2006/03/11/34826.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forget/comments/commentRss/34826.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forget/services/trackbacks/34826.html</trackback:ping><description><![CDATA[网页制作中表格扮演了很重要的角色。你是否知道，表格还有很多的秘密呢？通过与Javascript、CSS等的结合，表格还有很多巧妙的用处。<BR><BR>　　1、用表格做流动分割线<BR><BR>　　我们知道，在网页中可以用 
<HR>
标识来做分割线，也可以把表格设置为1个象素高或宽充当分割线。现在，我们将表格与Javascript结合，可以做出更生动的分割线——流动的分割线。加入以下代码，你就可以看到一条分割线，颜色在不断的流动。<BR><BR><IMG height=191 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/2003711102034.gif" width=442 border=0><BR><BR>　　在上面的代码中，我们可以通过修改 
<TABLE>标识中的height和width设置分割线的高度和长度。<BR><BR>　　2、带滚动条的表格<BR><BR><IMG height=199 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/2003711101651.gif" width=264 border=0><BR><BR>　　看看图一的效果，可千万不要以为是IFRAME，这可是地地道道的表格！其实，这是表格和CSS结合的效果。当网页上有大段文字要显示，而又没有足够的空间时，这就派上用场了。虽然用文本框也可以实现类似效果，但却远没有用表格灵活。代码很简单，只要在单元格 
<TBODY>
<TR>
<TD>标识后加上如下代码就可以了：<BR><BR><IMG height=275 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/2003711102126.gif" width=572 border=0><BR><BR>　　3、带标题的表格<BR><BR><IMG height=303 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/2003711101748.gif" width=352 border=0><BR><BR>　　看看图二的效果。通常，我们要给表格加标题，不是用单元格的方法就是用图片，很麻烦。其实，我们可以只用很一些很简单的HTML标识，就可以轻松实现给表格加标题了。这个标识似乎已被人遗忘，很少看到使用，不过它实现的效果还是很不错的。下面就来看看如何实现：<BR><BR><IMG height=174 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/2003711102234.gif" width=578 border=0> 
<P></P>
<P></P></TD></TR>
<TR>
<TD>
<P align=right><SPAN class=copyright>&nbsp;</SPAN></P></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/forget/aggbug/34826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forget/" target="_blank">橘子</a> 2006-03-11 14:55 <a href="http://www.blogjava.net/forget/archive/2006/03/11/34826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>表格特效代码全集中</title><link>http://www.blogjava.net/forget/archive/2006/03/11/34825.html</link><dc:creator>橘子</dc:creator><author>橘子</author><pubDate>Sat, 11 Mar 2006 06:52:00 GMT</pubDate><guid>http://www.blogjava.net/forget/archive/2006/03/11/34825.html</guid><wfw:comment>http://www.blogjava.net/forget/comments/34825.html</wfw:comment><comments>http://www.blogjava.net/forget/archive/2006/03/11/34825.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/forget/comments/commentRss/34825.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forget/services/trackbacks/34825.html</trackback:ping><description><![CDATA[<STRONG>1. 两种细线表格做法<BR><BR></STRONG>
<P align=center><STRONG><IMG height=93 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/20041593528.gif" width=434 border=0></STRONG></P><BR>
<P><BR>　　源码如下：<BR><BR>&lt;table width="100%" border="1" bordercolor="#000000"&gt;<BR>&nbsp; &lt;tr bordercolor="#FFFFFF"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td&gt;表格边线为1，线色为黑，行线色为白。&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&lt;/table&gt;<BR>&lt;p&gt;<BR>&lt;table width="100%" border="0" cellspacing="1" bgcolor="#000000"&gt;<BR>&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor="#FFFFFF"&gt;表格边线为0，间距为1，背景色为黑，行背景色为白。&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&lt;/table&gt;<BR><BR><STRONG>　　2. 立体表格<BR><BR></P><BR>
<P align=center><IMG height=87 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/2004159357.gif" width=550 border=0></P><BR>
<P><BR></STRONG><BR>　　源码如下：<BR><BR>&lt;table&nbsp; border=1 cellspacing=0&nbsp; width=100% bordercolorlight=#333333 bordercolordark=#efefef&gt;<BR>&nbsp; &lt;tr bgcolor=#cccccc&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td&gt;it365cn&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td&gt;it365cn&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td&gt;it365cn&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td&gt;it365cn&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&nbsp; &lt;tr bgcolor=#cccccc&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td&gt;cnbruce&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td&gt;cnbruce&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td&gt;cnbruce&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td&gt;cnbruce&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&lt;/table&gt;<BR>&lt;center&gt;表格边线为1，间隔为0，左上为#333333，右下为#efefef,行背景色为#cccccc<BR><BR><STRONG>　　3. 另类圆角表格制作<BR></STRONG></P><BR>
<P></P><BR>
<P align=center><STRONG><IMG height=125 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/20041593438.gif" width=425 border=0></STRONG></P><BR>
<P><BR><STRONG>　　</STRONG>源码如下：<BR><BR>原图：<BR>&lt;table cellpadding=0 cellspacing=0 border=0 width=282 align=center&gt;<BR>&nbsp; &lt;tr height=1&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td rowspan=4 width=1&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td rowspan=3 width=1&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td rowspan=2 width=1&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td width=2&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td width=2&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td rowspan=2 width=1&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td rowspan=3 width=1&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td rowspan=4 width=1&gt;&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&nbsp; &lt;tr height=1&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&nbsp; &lt;tr height=1&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td colspan=3 bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&nbsp; &lt;tr height=2&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td colspan=5 bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&lt;/table&gt;<BR>&lt;p&gt;放大<BR>&lt;table cellpadding=0 cellspacing=0 border=1 width=282 align=center&gt;<BR>&nbsp; &lt;tr height=10&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td rowspan=4 width=10&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td rowspan=3 width=10&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td rowspan=2 width=10&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td width=20&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td width=20&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td rowspan=2 width=10&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td rowspan=3 width=10&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td rowspan=4 width=10&gt;&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&nbsp; &lt;tr height=10&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&nbsp; &lt;tr height=10&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td colspan=3 bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&nbsp; &lt;tr height=20&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td colspan=5 bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td bgcolor=#43B5C9&gt;&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&lt;/table&gt;<BR><BR><STRONG>　　4. 虚线边框表格<BR></P><BR>
<P align=center><IMG height=137 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/20041593414.gif" width=497 border=0></P><BR>
<P><BR><BR></STRONG>　　源码如下：<BR><BR>&lt;style type="text/css"&gt;<BR>.tb{BORDER-BOTTOM: #000000 1px dotted;BORDER-top: #000000 1px dotted;BORDER-LEFT:<BR>#000000 1px dotted;BORDER-RIGHT: #000000 1px dotted;}<BR>&lt;/style&gt;<BR>&lt;table width="100%" border="0" cellspacing="0" cellpadding="0"&gt;<BR>&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td class="tb"&gt;&lt;center&gt;www.blueidea.com&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&lt;/table&gt;<BR>&lt;p&gt;<BR>虚线直线1<BR>&lt;hr size=1 style="border:1px dotted #001403;"&gt;<BR>虚线直线2<BR>&lt;p size=1 style="border:1px dotted #001403;"&gt;<BR><BR><STRONG>　　5. 分类型表格<BR></P></STRONG><BR>
<P></P><BR>
<P align=center><STRONG><IMG height=51 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/20041593357.gif" width=497 border=0></STRONG></P><BR>
<P><STRONG>　　</STRONG>源码如下：<BR><BR>&lt;fieldset&gt;<BR>&lt;legend&gt;item&lt;/legend&gt;<BR>content<BR>&lt;/fieldset&gt;<BR><BR><BR><STRONG>　　6. 变色的单元格1，通过a:hover做</STRONG><BR></P><BR>
<P align=center><IMG height=44 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/20041593337.gif" width=500 border=0></P><BR>
<P><BR>　　源码如下：<BR><BR>&lt;style&gt;<BR>a:link,a:visited,a:hover<BR>{width:100%;text-decoration:none;font-family:verdana;font-size:10px;color:white}<BR>a:hover{background:#0099ff;color:black}<BR>td{background:#3366cc;color:white;padding:0px}<BR>&lt;/style&gt;</P><BR>
<P>&lt;TABLE width=100% cellspacing=1 bgcolor=black &gt;<BR>&nbsp; &lt;TR&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;TD&gt;&lt;a href="#"&gt;Blueidea<BR>&nbsp;&nbsp;&nbsp; &lt;TD&gt;&lt;a href="#"&gt;.com<BR>&nbsp; &lt;TR&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;TD&gt;&lt;a href="#"&gt;CNBruce<BR>&nbsp;&nbsp;&nbsp; &lt;TD&gt;&lt;a href="#"&gt;.com<BR>&lt;/TABLE&gt;<BR><BR clear=all><STRONG>　　7. 变色的单元格2，已经做成了CSS，注意还有透明效果<BR><BR></STRONG>　　源码如下：<BR><BR>&lt;style type="text/css"&gt;<BR>.aa<BR>{ background-color:#0000ff; color:#ff0000;filter: alpha(opacity=50)}<BR>.bb&nbsp;<BR>{ background-color:#3366cc; color:#ffffff}<BR>&lt;/style&gt; </P><BR>
<P></P><BR>
<P>&lt;table&nbsp; width="100%"&gt;<BR>&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td&nbsp; onmouseover="this.className='aa'" onmouseout="this.className='bb'"<BR>class="bb"&gt;&lt;center&gt;&lt;b&gt;cnbruce&lt;/td&gt;<BR>&nbsp;&nbsp; &lt;/tr&gt;<BR>&lt;/table&gt;<BR><BR><BR><STRONG>　　8. 变色的单元格3，通过mouse事件做.有点微软的味道</STRONG><BR></P><BR>
<P align=center><IMG height=71 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/20041593310.gif" width=496 border=0></P><BR>
<P><BR>　　源码如下：<BR>&lt;table width="100%" border="1" cellpadding="3" cellspacing="0"<BR>bordercolor="#efefef" bgcolor="#efefef"&gt;<BR>&nbsp; &lt;tr&gt; <BR>&nbsp;&nbsp;&nbsp; &lt;td onMouseOut="this.bgColor='#efefef';this.borderColor='#efefef'";<BR>onMouseOver="this.bgColor='#cccccc'; this.borderColor='#000033'"&gt;&lt;div align="left"&gt;<BR>Blueidea&lt;/div&gt;&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&nbsp; &lt;tr&gt; <BR>&nbsp;&nbsp;&nbsp; &lt;td <BR>onMouseOut="this.bgColor='#efefef';this.borderColor='#efefef'"; onMouseOver="this.bgColor='#cccccc'; this.borderColor='#000033'"&gt;<BR>cnbruce&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&lt;/table&gt;<BR><BR><STRONG>　　9. 透明表格</STRONG><BR><BR>&lt;table bgcolor=#ececec style="filter:alpha(opacity=50)" width=200 height=100 border=0&gt;<BR>&nbsp; &lt;tr&gt;&lt;td&gt;&lt;center&gt;cnbruce&lt;/td&gt;&lt;/tr&gt;<BR>&lt;/table&gt;<BR><BR><STRONG>　　10. 表格边框显示外阴影</STRONG><BR></P><BR>
<P align=center><IMG height=130 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/20041593246.gif" width=230 border=0></P><BR>
<P>　　源码如下：<BR><BR>&lt;table&nbsp; align=center&nbsp; width=200&nbsp; height=100&nbsp; bgcolor=#f3f3f3<BR>style="filter:progid:DXImageTransform.Microsoft.Shadow<BR>(Color=#333333,Direction=120,strength=5)"&gt;<BR>&nbsp; &lt;tr&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;center&gt;www.cnbruce.com&lt;/td&gt;<BR>&nbsp; &lt;/tr&gt;<BR>&lt;/table&gt;<BR><BR><STRONG>　　11. VML代码实现的圆角表格<BR>　　(1).<BR></STRONG></P><BR>
<P align=center><IMG height=266 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/20041593223.gif" width=172 border=0></P><BR>
<P>　　源码如下：<BR><BR>&lt;html xmlns:v&gt;<BR>&lt;style&gt;<BR>v\:*{behavior:url(#default#VML)}<BR>&lt;/style&gt;<BR>&lt;body&gt;<BR>&nbsp;&nbsp; &lt;v:RoundRect style="position:relative;width:150;height:240px"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;v:shadow on="T" type="single" color="#b3b3b3" offset="3px,3px"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;v:TextBox style="font-size:10.2pt;"&gt;VML&lt;/v:TextBox&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/v:RoundRect&gt; <BR>&lt;/body&gt;<BR>&lt;/html&gt;<BR><BR><STRONG>　　(2).<BR></P></STRONG><BR>
<P align=center><IMG height=278 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/2004159321.gif" width=183 border=0></P><BR>
<P>　　源码如下：<BR><BR>&lt;html&nbsp; xmlns:v&gt;<BR>&lt;style&gt;<BR>v\:*{behavior:url(#default#VML)}<BR>&lt;/style&gt;<BR>&lt;body&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;v:RoundRect&nbsp; style="position:relative;width:150;height:240px"&gt;<BR>&lt;v:path&nbsp; textpathok="true"&nbsp; /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;v:textpath&nbsp; on="true"&nbsp; string="cnbrucecnbrucecnbrucecnbrucecnbruc<BR>ecnbrucecnbrucecnbrucecnbrucecnbrucecnbrucecnbrucecnbrucecnbrucecnbruce"&nbsp; /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;v:shadow&nbsp; on="T"&nbsp; type="single"&nbsp; color="#b3b3b3"&nbsp; offset="3px,3px"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;v:TextBox&nbsp; style="font-size:10.2pt;"&gt;VML&lt;/v:TextBox&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/v:RoundRect&gt;&nbsp; <BR>&lt;/body&gt;<BR>&lt;/html&gt;<BR><BR><STRONG>　　(3).</STRONG><BR></P><BR>
<P align=center><IMG height=264 src="http://www.6to23.com/s15/s15d1/s15d1d6/s15d1d6d5/s15d1d6d5d5/autopostimg/20041593140.gif" width=174 border=0></P><BR>
<P><BR>　　源码如下：<BR><BR>&lt;html xmlns:v&gt;<BR>&lt;style&gt;<BR>v\:*{behavior:url(#default#VML)}<BR>&lt;/style&gt;<BR>&lt;body&gt;<BR>&nbsp;&nbsp; &lt;v:RoundRect style="position:relative;width:150;height:240px" arcsize=0.5&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;v:shadow on="T" type="single" color="#b3b3b3" offset="3px,3px"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;v:TextBox style="font-size:10.2pt;"&gt;VML&lt;/v:TextBox&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/v:RoundRect&gt; <BR>&lt;/body&gt;<BR>&lt;/html&gt;</P><img src ="http://www.blogjava.net/forget/aggbug/34825.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forget/" target="_blank">橘子</a> 2006-03-11 14:52 <a href="http://www.blogjava.net/forget/archive/2006/03/11/34825.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP+Access创建网站RSS格式</title><link>http://www.blogjava.net/forget/archive/2005/11/15/19881.html</link><dc:creator>橘子</dc:creator><author>橘子</author><pubDate>Tue, 15 Nov 2005 06:35:00 GMT</pubDate><guid>http://www.blogjava.net/forget/archive/2005/11/15/19881.html</guid><wfw:comment>http://www.blogjava.net/forget/comments/19881.html</wfw:comment><comments>http://www.blogjava.net/forget/archive/2005/11/15/19881.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/forget/comments/commentRss/19881.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forget/services/trackbacks/19881.html</trackback:ping><description><![CDATA[以下程序段是创建网站“十万个为什么”(http://www.why100000.com/)上的“技术新闻”栏目的&nbsp;RSS&nbsp;feed&nbsp;的源代码，文件名为&nbsp;RssFeed_news.asp。 <BR>其中，变量&nbsp;sXmlClear&nbsp;用于声明产生的文档是一段&nbsp;XML&nbsp;格式的文档，该声明是可选的，以保持与旧版本&nbsp;XML&nbsp;的向后兼容性。<BR><BR>sRssHead&nbsp;定义&nbsp;Rss&nbsp;的基本元素。RSS&nbsp;feed&nbsp;通常由&nbsp;4&nbsp;个主要元素构成：&lt;channel&gt;，&amp;l<!--<TABLE align=left border=0 cellPadding=0 cellSpacing=0 height=310 width=370>
  <TBODY>
    <TR>
      <TD vAlign=center>
        <SCRIPT LANGUAGE="JavaScript1.1" SRC="http://ad.ccw.com.cn/adshow.asp?positionID=35&js=1&innerJs=1"></SCRIPT>
      </TD>
    </TR>
  </TBODY>
</TABLE>--> t;image&gt;，&lt;item&gt;&nbsp;和&nbsp;&lt;textinput&gt;。其中，&lt;channel&gt;&nbsp;元素是必需的，&lt;item&gt;&nbsp;元素至少要出现一次。&lt;textinput&gt;&nbsp;和&nbsp;&lt;image&gt;&nbsp;元素是可选的，是否使用要视具体情况而定。 <BR>&lt;channel&gt;&nbsp;元素包含&nbsp;Channel(RSS&nbsp;feed&nbsp;的来源)的一个简单描述。&lt;title&gt;&nbsp;是频道的名称/标题；&lt;link&gt;&nbsp;是与频道内容对应的包含了完整内容的那个网页的&nbsp;URL；&lt;description&gt;&nbsp;是与&nbsp;&lt;channel&gt;&nbsp;的内容有关的简单描述；&lt;language&gt;&nbsp;代表语言。还有一些别的属性，不是太常用。 <BR>&lt;item&gt;&nbsp;元素用于对数据库中的记录进行描述。&lt;item&gt;&nbsp;一般有若干项，对应了一个&nbsp;Rss&nbsp;feed&nbsp;的数据集合。 <BR><BR>&lt;!-Filename：RssFeed_news.asp:--&gt; <BR>&lt;%&nbsp;Option&nbsp;explicit&nbsp;%&gt; <BR>&lt;!--&nbsp;#include&nbsp;file="./conn.inc"&nbsp;--&gt; <BR><BR>&lt;% <BR>&nbsp;&nbsp;Dim&nbsp;sSQL,&nbsp;rs,&nbsp;sCrLf,&nbsp;sXmlClear,&nbsp;sRssHead,&nbsp;sRssEnd <BR>&nbsp;&nbsp;sCrLf&nbsp;=&nbsp;chr(13)&nbsp;&amp;&nbsp;chr(10)&nbsp;&nbsp;’回车+换行 <BR><BR>&nbsp;&nbsp;sXmlClear&nbsp;=&nbsp;"&lt;?xml&nbsp;version=’1.0’&nbsp;encoding=’gb2312’?&gt;"&nbsp;&amp;&nbsp;sCrLf <BR><BR>&nbsp;&nbsp;sRssHead&nbsp;=&nbsp;"&lt;rss&nbsp;version=’2.0’&gt;"&nbsp;&amp;&nbsp;sCrLf <BR>&nbsp;&nbsp;sRssHead&nbsp;=&nbsp;sRssHead&nbsp;&amp;&nbsp;"&lt;channel&gt;"&nbsp;&amp;&nbsp;sCrLf <BR>&nbsp;&nbsp;sRssHead&nbsp;=&nbsp;sRssHead&nbsp;&amp;&nbsp;"&lt;title&gt;&nbsp;Why100000&nbsp;&lt;/title&gt;"&nbsp;&amp;&nbsp;sCrLf <BR>&nbsp;&nbsp;sRssHead&nbsp;=&nbsp;sRssHead&nbsp;&amp;&nbsp;"&lt;description&gt;&nbsp;Why100000&nbsp;&lt;/description&gt;"&nbsp;&amp;&nbsp;sCrLf <BR>&nbsp;&nbsp;sRssHead&nbsp;=&nbsp;sRssHead&nbsp;&amp;&nbsp;"&lt;link&gt;http://news.why100000.com/&lt;;/link&gt;"&nbsp;&amp;&nbsp;sCrLf <BR>&nbsp;&nbsp;sRssHead&nbsp;=&nbsp;sRssHead&nbsp;&amp;&nbsp;"&lt;language&gt;zh-cn&lt;/language&gt;"&nbsp;&amp;&nbsp;sCrLf <BR>&nbsp;&nbsp;sRssHead&nbsp;=&nbsp;sRssHead&nbsp;&amp;&nbsp;"&lt;docs&gt;Why100000.COM&nbsp;News&nbsp;Center&lt;/docs&gt;"&nbsp;&amp;&nbsp;sCrLf <BR>&nbsp;&nbsp;sRssHead&nbsp;=&nbsp;sRssHead&nbsp;&amp;&nbsp;"&lt;generator&gt;Rss&nbsp;Generator&nbsp;By&nbsp;WWW.Why100000.COM&lt;/generator&gt;"&nbsp;&amp;&nbsp;sCrLf <BR><BR>&nbsp;&nbsp;sRssEnd&nbsp;=&nbsp;"&lt;/channel&gt;&lt;/rss&gt;" <BR><BR>&nbsp;&nbsp;Response.CharSet="gb2312"&nbsp;&nbsp;’数据集 <BR>&nbsp;&nbsp;Response.ContentType="text/xml"&nbsp;&nbsp;’数据流格式定义 <BR><BR>&nbsp;&nbsp;’输出： <BR>&nbsp;&nbsp;Response.write&nbsp;sXmlClear <BR>&nbsp;&nbsp;Response.write&nbsp;sRssHead <BR><BR>&nbsp;&nbsp;sSQL="select&nbsp;top&nbsp;15&nbsp;*&nbsp;from&nbsp;news&nbsp;order&nbsp;by&nbsp;sortid&nbsp;desc" <BR>&nbsp;&nbsp;Set&nbsp;rs&nbsp;=&nbsp;Server.CreateObject("ADODB.Recordset") <BR>&nbsp;&nbsp;rs.Open&nbsp;sSQL,&nbsp;s_Conn,&nbsp;1,&nbsp;1 <BR>&nbsp;&nbsp;if&nbsp;not&nbsp;(rs.eof&nbsp;and&nbsp;rs.bof)&nbsp;then <BR>&nbsp;&nbsp;&nbsp;&nbsp;do&nbsp;while&nbsp;not&nbsp;rs.eof <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"&lt;item&gt;"&nbsp;&amp;&nbsp;sCrLf <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"&lt;title&gt;&nbsp;"&nbsp;&amp;&nbsp;rs("f_topic")&nbsp;&amp;&nbsp;"&nbsp;&lt;/title&gt;"&nbsp;&amp;&nbsp;sCrLf <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"&lt;link&gt;&nbsp;"&nbsp;&amp;&nbsp;"http://www.why100000.com/_news/show_a_new.asp?autoid=";&nbsp;&amp;&nbsp; <BR><BR>rs("f_i_autoid")&nbsp;&amp;&nbsp;"&nbsp;&lt;/link&gt;"&nbsp;&amp;&nbsp;sCrLf <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"&lt;author&gt;&nbsp;"&nbsp;&amp;&nbsp;rs("f_author")&nbsp;&amp;&nbsp;"&nbsp;&lt;/author&gt;"&nbsp;&amp;&nbsp;sCrLf <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"&lt;pubDate&gt;&nbsp;"&nbsp;&amp;&nbsp;rs("f_datetime")&nbsp;&amp;&nbsp;"&nbsp;&lt;/pubDate&gt;"&nbsp;&amp;&nbsp;sCrLf <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"&lt;/item&gt;"&nbsp;&amp;&nbsp;sCrLf&nbsp;&amp;&nbsp;sCrLf <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.movenext <BR>&nbsp;&nbsp;&nbsp;&nbsp;loop <BR>&nbsp;&nbsp;end&nbsp;if <BR>&nbsp;&nbsp;rs.close <BR>&nbsp;&nbsp;set&nbsp;rs=nothing <BR><BR>&nbsp;&nbsp;Response.write&nbsp;sRssEnd <BR>%&gt; <BR><BR>IE&nbsp;中的调用格式是：&lt;a&nbsp;href="http://www.why100000.com/_news/RssFeed_news.asp";&gt;技术新闻 <BR><BR>RSS&lt;/a&gt;。如果用一些客户端软件订阅该&nbsp;RSS，订阅的&nbsp;Url&nbsp;就是http://www.why100000.com/_news/RssFeed_news.asp。<img src ="http://www.blogjava.net/forget/aggbug/19881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forget/" target="_blank">橘子</a> 2005-11-15 14:35 <a href="http://www.blogjava.net/forget/archive/2005/11/15/19881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将RSS加进个人主页</title><link>http://www.blogjava.net/forget/archive/2005/11/15/19880.html</link><dc:creator>橘子</dc:creator><author>橘子</author><pubDate>Tue, 15 Nov 2005 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/forget/archive/2005/11/15/19880.html</guid><wfw:comment>http://www.blogjava.net/forget/comments/19880.html</wfw:comment><comments>http://www.blogjava.net/forget/archive/2005/11/15/19880.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forget/comments/commentRss/19880.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forget/services/trackbacks/19880.html</trackback:ping><description><![CDATA[<STRONG>一、知己知彼，百战不殆</STRONG>
<P>要想为网站创建RSS，首先我们必须对RSS进行深入的了解。RSS是基于XML(可扩展标志语言)的一种形式，并且所有的RSS文件都要遵守万维网联盟(W3C)站点发布的XML 1.0规范。一般来说，RSS文档的最顶层是一个&lt; rss &gt;元素作为根元素，&lt; rss &gt;元素有一个强制属性version，用于指定当前RSS文档的版本，目前常用的RSS版本是2.0。&lt; rss &gt;元素下的子元素是唯一的一个&lt; channel &gt;元素，它包含了关于该网站或栏目的信息和内容，在<CHANNEL>下必备的语句有三个：</P>
<P>&lt; title &gt;：网站或栏目的名称，一般与网站或栏目的页面title一致；<BR>&lt; link &gt;：网站或栏目的URL；<BR>&lt; description &gt;：对网站或栏目的简要描述。</P>
<P>还可以使用一些如&lt; language &gt;(语言)、&lt; copyright &gt;(版权声明)等可选语句来丰富&lt; channel &gt;内容，具体的新闻提要就要依靠<ITEM>来体现了。一般一条新闻就是一个&lt; item &gt;，&lt; item &gt;下至少要存在一个&lt; title &gt;或&lt; description &gt;，其他语句可以根据需要进行选择。</P>
<P>提示：更多RSS的语句介绍可参考http://www.donews.net/softbunny/articles/11030.aspx。学习RSS语句时可以使用IE打开一个XML链接进行对照参考，如天极网网络通信版块聚合内容http://rss.chinabyte.com/218424581927469056.xml。</P>
<P><STRONG>二、RSS，手工造</STRONG></P>
<P>了解了RSS具体的语句结构和用法后，我们就可以按照以下格式在最常用的记事本或网页编辑软件中手工编辑网站的RSS了。</P>
<P align=center><TEXTAREA style="WIDTH: 544px; HEIGHT: 292px" rows=1 cols=27>&lt;?xml version=“1.0” encoding=“gb2312”?&gt;
&lt;!return_edit&gt;&lt;rss version=“2.0”&gt;
&lt;!return_edit&gt;&lt;channel&gt;
&lt;!return_edit&gt;&lt;title&gt;网站或栏目的名称&lt;/title&gt;
&lt;!return_edit&gt;&lt;link&gt;网站或栏目的URL地址&lt;/link&gt;
&lt;!return_edit&gt;&lt;description&gt;网站或栏目的简要介绍&lt;/description&gt;
&lt;!return_edit&gt;&lt;item&gt;
&lt;!return_edit&gt;&lt;title&gt;新闻标题&lt;/title&gt;
&lt;!return_edit&gt;&lt;link&gt;新闻的链接地址&lt;/link&gt;
&lt;!return_edit&gt;&lt;description&gt;新闻简要介绍&lt;/description&gt;
&lt;!return_edit&gt;&lt;pubDate&gt;新闻发布时间&lt;/pubDate&gt;
&lt;!return_edit&gt;&lt;author&gt;新闻作者名称&lt;/author&gt;
&lt;!return_edit&gt;&lt;/item&gt;
&lt;!return_edit&gt;&lt;item&gt;
&lt;!return_edit&gt;……
&lt;!return_edit&gt;&lt;/item&gt;
&lt;!return_edit&gt;&lt;/channel&gt;
&lt;!return_edit&gt;&lt;/rss&gt;</TEXTAREA></P>
<P>其中中文文字和省略号部分就是要添加新闻的部分，按照提示依次添加完毕即可保存为.xml文件并在网站的适当位置加入“XML”字样的图标，然后链接到该&nbsp;&nbsp;&nbsp; .xml文件，这样你的网站就拥有了RSS输出了。</P>
<P>&nbsp;&nbsp;&nbsp;<STRONG> 三、工具编写，轻松自如</STRONG></P>
<P>如果网站更新的新闻量大，依靠手工编写RSS文件就有可能出错。我们可以请RSS生成器(下载地址：http://sq.onlinedown.net/down/rsscreator.rar)来辅助我们工作。开启软件，执行“文件→新建→RSS”新建一个RSS文件(图1)。首先在上方“必选元素”区输入“Description”、“Link”和“Title”三个必选语句的内容，要添加新闻条目就点击“Items”后的按钮进入新闻添加窗口(图2)，单击“Add”按钮增加一个新闻条目，然后在左边的语句中根据提示添加新闻标题(Title)、简要(Description)和链接(Link)等，完毕后返回到软件主界面，按下工具栏中的保存按钮将文档保存为&nbsp; .xml文件即可。</P>
<CENTER><IMG src="http://www.it.com.cn/f/edu/051/26/012705.jpg"></CENTER>
<P align=center>图1</P>
<CENTER><IMG src="http://www.it.com.cn/f/edu/051/26/012706.jpg"></CENTER>
<P align=center>图2</P>
<P>提示：RSS生成器需要.NET Framework的支持，在安装之前要在http://go.microsoft.com/fwlink/?LinkId=9832处下载安装.NET Framework组件包。</P>
<P><STRONG>四、自动生成，一劳永逸</STRONG></P>
<P>对于静态网站我们可以手工或使用工具来编写RSS输出，若是动态网站则要通过程序来转换新闻数据库内容输出RSS了。有兴趣的朋友可以在http://www.mh.fy.cn/rss2.rar处下载转换模板，此模板适合ASP+ACCESS类的动态网站更新系统，需要修改的是数据库链接部分db=*.mdb。另外在数据库字段读取以及给新闻标题(Title)和链接(Link)等字段赋值也要根据数据库的具体情况做一些修改(图3)，使用该模板调试成功后，网站的RSS输出地址就是http://你的域名/rss2.asp。</P>
<CENTER><IMG src="http://www.it.com.cn/f/edu/051/26/012707.gif"></CENTER><img src ="http://www.blogjava.net/forget/aggbug/19880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forget/" target="_blank">橘子</a> 2005-11-15 14:34 <a href="http://www.blogjava.net/forget/archive/2005/11/15/19880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RSS 2.0规范</title><link>http://www.blogjava.net/forget/archive/2005/11/15/19879.html</link><dc:creator>橘子</dc:creator><author>橘子</author><pubDate>Tue, 15 Nov 2005 06:32:00 GMT</pubDate><guid>http://www.blogjava.net/forget/archive/2005/11/15/19879.html</guid><wfw:comment>http://www.blogjava.net/forget/comments/19879.html</wfw:comment><comments>http://www.blogjava.net/forget/archive/2005/11/15/19879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forget/comments/commentRss/19879.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forget/services/trackbacks/19879.html</trackback:ping><description><![CDATA[RSS是 Really Simple Syndication的缩写（对<A href="http://blogs.law.harvard.edu/tech/rss"><FONT color=#003366>rss2.0</FONT></A>而言，是这三个词的缩写，对<A href="http://web.resource.org/rss/1.0/"><FONT color=#003366>rss1.0</FONT></A>而言则是RDF Site Summary的缩写，1.0与2.0走的是两个体系）<BR>　　RSS 基于XML，所有的 RSS 必须遵循w3c网站上公布的XML 1.0 规范。<BR>　　在一个RSS文档中，根元素是&lt;rss&gt;，带有一个必备属性version，用以指明该文档遵循的rss规范，如果rss文档遵循本规范，则version值必须是2.0。<BR>　　&lt;rss&gt;元素只有一个子元素，包含关于频道的一些信息。频道(channel)是整个blog，项(item)指一篇文章或日志(也有称这为post)。<BR><A name=more></A>
<P>
<CENTER>
<H4>RSS2.0元素channel的子元素列表</H4><BR>
<TABLE border=1>
<TBODY>
<TR>
<TD>元素(Element)</TD>
<TD>描述(Description)</TD>
<TD>值域</TD>
<TD>重要性</TD>
<TD>举例(Example)</TD></TR>
<TR>
<TD>title</TD>
<TD>频道名称</TD>
<TD></TD>
<TD>必备</TD>
<TD>GoUpstate.com News Headlines</TD></TR>
<TR>
<TD>link</TD>
<TD>频道的URL</TD>
<TD></TD>
<TD>必备</TD>
<TD>http://www.goupstate.com/</TD></TR>
<TR>
<TD>Description</TD>
<TD>频道的描述</TD>
<TD></TD>
<TD>必备</TD>
<TD>The latest news from GoUpstate.com, a Spartanburg Herald-Journal Web site.</TD></TR>
<TR>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD></TR>
<TR>
<TD>language</TD>
<TD>频道文章所用语言，</TD>
<TD>可用netscape或w3c推荐的列表</TD>
<TD>可选</TD>
<TD>en-us</TD></TR>
<TR>
<TD>copyright</TD>
<TD>频道内容的版权说明</TD>
<TD></TD>
<TD>可选</TD>
<TD>Copyright 2002, Spartanburg Herald-Journal</TD></TR>
<TR>
<TD>managingEditor</TD>
<TD>责任编辑的email</TD>
<TD></TD>
<TD>可选</TD>
<TD>geo@herald.com (George Matesky)</TD></TR>
<TR>
<TD>webMaster</TD>
<TD>负责频道技术事务的网站管理员email</TD>
<TD></TD>
<TD>可选</TD>
<TD>betty@herald.com (Betty Guernsey)</TD></TR>
<TR>
<TD>pubDate</TD>
<TD>频道内容发布日期，格式遵循RFC822格式（年份可为2们或4位）</TD>
<TD></TD>
<TD>可选</TD>
<TD>Sat, 07 Sep 2002 00:00:01 GMT</TD></TR>
<TR>
<TD>lastBuildDate</TD>
<TD>频道内容最后的修改日期</TD>
<TD></TD>
<TD>可选</TD>
<TD>Sat, 07 Sep 2002 09:42:31 GMT</TD></TR>
<TR>
<TD>category</TD>
<TD>指定频道所属的一个或几个类别</TD>
<TD></TD>
<TD>可选</TD>
<TD>&lt;category&gt;Newspapers&lt;/category&gt;</TD></TR>
<TR>
<TD>generator</TD>
<TD>生成该频道的程序名</TD>
<TD></TD>
<TD>可选</TD>
<TD>MightyInHouse Content System v2.3</TD></TR>
<TR>
<TD>docs</TD>
<TD>指向该RSS文件所用格式说明的URL</TD>
<TD></TD>
<TD>可选</TD>
<TD>http://blogs.law.harvard.edu/tech/rss</TD></TR>
<TR>
<TD>cloud</TD>
<TD>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.</TD>
<TD></TD>
<TD>可选</TD>
<TD>&lt;cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/&gt;</TD></TR>
<TR>
<TD>ttl</TD>
<TD>有效期，用以指明该频道可被缓存的最长时间</TD>
<TD>分钟为单位</TD>
<TD>可选</TD>
<TD>&lt;ttl&gt;60&lt;/ttl&gt;</TD></TR>
<TR>
<TD>image</TD>
<TD>指定一个 GIF或JPEG或PNG图片，用以与频道一起显示</TD>
<TD></TD>
<TD>可选</TD>
<TD></TD></TR>
<TR>
<TD>rating</TD>
<TD>这个频道的分级（主要指成人、限制、儿童等）</TD>
<TD></TD>
<TD>可选</TD>
<TD></TD></TR>
<TR>
<TD>textInput</TD>
<TD>指定一个text输入框供用户输入，具体信息及功能未定。</TD>
<TD></TD>
<TD>可选</TD>
<TD></TD></TR>
<TR>
<TD>skipHours</TD>
<TD>提示新闻聚合器，那些小时时段它可以跳过。</TD>
<TD></TD>
<TD>可选</TD>
<TD></TD></TR>
<TR>
<TD>skipDays</TD>
<TD>提示新闻聚合器，那些天它可以跳过。</TD>
<TD></TD>
<TD>可选</TD>
<TD></TD></TR></TBODY></TABLE>
<P></P>
<P>
<H4>RSS2.0元素channel的子元素image的子元素列表</H4><BR>
<TABLE border=1>
<TBODY>
<TR>
<TD>元素(Element)</TD>
<TD>描述(Description)</TD>
<TD>值域</TD>
<TD>重要性</TD>
<TD>举例(Example)</TD></TR>
<TR>
<TD>url</TD>
<TD>图片的url</TD>
<TD></TD>
<TD>必备</TD>
<TD></TD></TR>
<TR>
<TD>title</TD>
<TD>图片的标题，用于http的alt属性</TD>
<TD></TD>
<TD>必备</TD>
<TD></TD></TR>
<TR>
<TD>link</TD>
<TD>网站的url(实际中常以频道的url代替)</TD>
<TD></TD>
<TD>必备</TD>
<TD></TD></TR>
<TR>
<TD>width</TD>
<TD>图片的宽度(象素为单位)</TD>
<TD>最大144,默认88</TD>
<TD>可选</TD>
<TD></TD></TR>
<TR>
<TD>height</TD>
<TD>图片的高度(象素为单位)</TD>
<TD>最大400，默认31</TD>
<TD>可选</TD>
<TD></TD></TR>
<TR>
<TD>description</TD>
<TD>用于link的title属性</TD>
<TD></TD>
<TD>可选</TD>
<TD></TD></TR></TBODY></TABLE><BR>
<H4>RSS2.0元素channel的子元素cloud的子元素列表</H4><BR>
<TABLE border=1>
<TBODY>
<TR>
<TD>元素(Element)</TD>
<TD>描述(Description)</TD>
<TD>值域</TD>
<TD>重要性</TD>
<TD>举例(Example)</TD></TR>
<TR>
<TD>domain</TD>
<TD>Cloud程序所在机器的域名或IP地址</TD>
<TD></TD>
<TD></TD>
<TD>radio.xmlstoragesystem.com</TD></TR>
<TR>
<TD>port</TD>
<TD>访问clound程序所通过的端口</TD>
<TD></TD>
<TD></TD>
<TD>80</TD></TR>
<TR>
<TD>path</TD>
<TD>程序所在路径（不一定是真实路径）</TD>
<TD></TD>
<TD></TD>
<TD>/RPC2</TD></TR>
<TR>
<TD>registerProcedure</TD>
<TD>注册的可提供的服务或过程</TD>
<TD></TD>
<TD></TD>
<TD>xmlStorageSystem.rssPleaseNotify</TD></TR>
<TR>
<TD>protocol</TD>
<TD>协议</TD>
<TD>xml-rpc, soap , http-post 之一</TD>
<TD></TD>
<TD>xml-rpc</TD></TR></TBODY></TABLE><BR>
<H4>RSS2.0元素channel的子元素textInput的子元素列表</H4><BR>
<TABLE border=1>
<TBODY>
<TR>
<TD>元素(Element)</TD>
<TD>描述(Description)</TD>
<TD>值域</TD>
<TD>重要性</TD>
<TD>举例(Example)</TD></TR>
<TR>
<TD>title</TD>
<TD>Submit按钮的标签</TD>
<TD></TD>
<TD>必备</TD>
<TD></TD></TR>
<TR>
<TD>description</TD>
<TD>解释text输入区</TD>
<TD></TD>
<TD>必备</TD>
<TD></TD></TR>
<TR>
<TD>name</TD>
<TD>Text area对象的名字</TD>
<TD></TD>
<TD>必备</TD>
<TD></TD></TR>
<TR>
<TD>link</TD>
<TD>处理提交的请求的cgi程序</TD>
<TD></TD>
<TD>必备</TD>
<TD></TD></TR></TBODY></TABLE>
<P></P>
<P>关于item的内容，请看<A href="http://hedong.3322.org/archives/000268.html"><FONT color=#003366>基于XML-RPC的BloggerAPI学习</FONT></A>.<BR>说明：<BR>　　rss2.0要求&lt;link&gt;和&lt;url&gt;的值的非常部分开头，须是在IANA注册过的，如http://或https://或ftp://等。<BR>　　一个rss文件中，可以包括没有这儿定义的元素，只要它是在某个命名空间被定义过。<BR>　　一个常见问题是<GUID>与<LINK>的区别，两者在有些情况下是相同的，但前者可指几某个长文中的某个位置（即所谓的页内锚点吧）。</P></CENTER><img src ="http://www.blogjava.net/forget/aggbug/19879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forget/" target="_blank">橘子</a> 2005-11-15 14:32 <a href="http://www.blogjava.net/forget/archive/2005/11/15/19879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jar参数运行应用时classpath的设置</title><link>http://www.blogjava.net/forget/archive/2005/08/26/11240.html</link><dc:creator>橘子</dc:creator><author>橘子</author><pubDate>Fri, 26 Aug 2005 09:52:00 GMT</pubDate><guid>http://www.blogjava.net/forget/archive/2005/08/26/11240.html</guid><wfw:comment>http://www.blogjava.net/forget/comments/11240.html</wfw:comment><comments>http://www.blogjava.net/forget/archive/2005/08/26/11240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forget/comments/commentRss/11240.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forget/services/trackbacks/11240.html</trackback:ping><description><![CDATA[<div id="entryBody">
<p>当用java -jar
yourJarExe.jar来运行一个经过打包的应用程序的时候，你会发现如何设置-classpath参数应用程序都找不到相应的第三方类，报
ClassNotFound错误。实际上这是由于当使用-jar参数运行的时候，java
VM会屏蔽所有的外部classpath,而只以本身yourJarExe.jar的内部class作为类的寻找范围。</p>
<p>**解决方案**</p>
<p>一 BootStrap class扩展方案</p>
<p>Java 命令行提供了如何扩展bootStrap 级别class的简单方法.<br>-Xbootclasspath:     完全取代基本核心的Java class 搜索路径.<br>                                  
不常用,否则要重新写所有Java 核心class<br>-Xbootclasspath/a: 后缀在核心class搜索路径后面.常用!!<br>-Xbootclasspath/p: 前缀在核心class搜索路径前面.不常用,避免<br>                                  
引起不必要的冲突.</p>
<p>语法如下:<br> (分隔符与classpath参数类似，unix使用:号,windows使用;号，这里以unix为例)<br><strong> java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar</strong></p>
<p>二 extend class 扩展方案</p>
<p>Java exten class 存放在{Java_home}\jre\lib\ext目录下.当调用Java时,对扩展class路径的搜索是自动的.总会搜索的.这样,解决的方案就很简单了,将所有要使用的第三方的jar包都复制到ext 目录下.</p>
<p>三 User class扩展方案</p>
<p>当使用-jar执行可执行Jar包时,JVM将Jar包所在目录设置为codebase目录,所有的class搜索都在这个目录下开始.所以如果使用了其他第三方的jar包,一个比较可以接受的可配置方案,就是利用jar包的Manifest扩展机制.<br>步骤如下:</p>
<p> 1.将需要的第三方的jar包,复制在同可执行jar所在的目录或某个子目录下. 比如:jar 包在
/usrhome/yourJarExe.jar 那么你可以把所有jar包复制到/usrhome目录下或/usrhome/lib
等类似的子目录下.</p>
<p> 2.修改Manifest 文件</p>
<p> 在Manifest.mf文件里加入如下行</p>
<p> Class-Path:classes12.jar lib/thirdlib.jar</p>
<p> Class-Path 是可执行jar包运行依赖的关键词.详细内容可以参考 <a href="http://java.sun.com/docs/books/tutorial/ext/index.html" target="_blank">http://java.sun.com/docs/books/tutorial/ext/index.html</a></p>
<p><br>以上三种方法<strong>推荐第一种</strong>，扩展性好，操作起来也最方便.<br>另外编写自己的ClassLoader,来动态载入class,是更加复杂和高级技术.限于篇幅,不赘述.有兴趣了解可以去google一下custom classloader</p>
<p>Java的安全机制随不同的JDK版本有不同的变化,会影响很多核心CLASS,比如Thread,所以很多大型商业软件,要求JDK的版本很严格.部分原因也在此.这也要求在发布自己编写的应用时候,不管大小,都要说明开发和测试的JDK版本.</p>
<p><br>本文所述方法测试基于j2sdk 1.4.2_04-b05 </p>
<p>----------------------------------------------------------------------------------------------</p>
<p>附:背景知识</p>
<p>自JDK 1.2以后,JVM采用了委托(delegate)模式来载入class．采用这种设计的原因可以参考<a href="http://java.sun.com/docs/books/tutorial/ext/basics/load.html" target="_blank">http://java.sun.com/docs/books/tutorial/ext/basics/load.html</a> </p>
<p>归纳来讲:是基于JVM sandbox(沙盒)安装模型上提供应用层的可定制的安全机制.</p>
<p><br>Java虚拟机(JVM)寻找Class的顺序</p>
<p>1. Bootstrap classes</p>
<p>属于Java 平台核心的class,比如java.lang.String等.及rt.jar等重要的核心级别的class.这是由JVM Bootstrap class loader来载入的.一般是放置在{java_home}\jre\lib目录下</p>
<p>2. Extension classes</p>
<p>基于Java扩展机制,用来扩展Java核心功能模块.比如Java串口通讯模块comm.jar.一般放置在{Java_home}\jre\lib\ext目录下</p>
<p>3. User classes</p>
<p>开发人员或其他第三方开发的Java程序包.通过命令行的-classpath或-cp,或者通过设置CLASSPATH环境变量来引用.JVM通
过放置在{java_home}\lib\tools.jar来寻找和调用用户级的class.常用的javac也是通过调用tools.jar来寻找用
户指定的路径来编译Java源程序.这样就引出了User class路径搜索的顺序或优先级别的问题.</p>
<p> 3.1 缺省值:调用Java或javawa的当前路径(.),是开发的class所存在的当前目录<br> 3.2 CLASSPATH环境变量设置的路径.如果设置了CLASSPATH,则CLASSPATH的值会覆盖缺省值<br> 3.3 执行Java的命令行-classpath或-cp的值,如果制定了这两个命令行参数之一,它的值会覆盖环境变量CLASSPATH的值<br> 3.4
-jar 选项:如果通过java -jar 来运行一个可执行的jar包,这当前jar包会覆盖上面所有的值.换句话说,-jar
后面所跟的jar包的优先级别最高,如果指定了-jar选项,所有环境变量和命令行制定的搜索路径都将被忽略.JVM
APPClassloader将只会以jar包为搜索范围.<br>有关可执行jar有许多相关的安全方面的描述,可以参考<a href="http://java.sun.com/docs/books/tutorial/jar/" target="_blank">http://java.sun.com/docs/books/tutorial/jar/</a> 来全面了解.</p>
<p>这也是为什么应用程序打包成可执行的jar包后,不管你怎么设置classpath都不能引用到第三方jar包的东西了.</p></div><img src ="http://www.blogjava.net/forget/aggbug/11240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forget/" target="_blank">橘子</a> 2005-08-26 17:52 <a href="http://www.blogjava.net/forget/archive/2005/08/26/11240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>