﻿<?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-下载记忆-随笔分类-学习</title><link>http://www.blogjava.net/jjunix/category/8604.html</link><description>Download my Memory</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:24:57 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:24:57 GMT</pubDate><ttl>60</ttl><item><title>实习日志7 －结束试用－转正！</title><link>http://www.blogjava.net/jjunix/archive/2006/09/06/68115.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Wed, 06 Sep 2006 12:10:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/09/06/68115.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/68115.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/09/06/68115.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/68115.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/68115.html</trackback:ping><description><![CDATA[
		<p>被搞了几个月，终于TMD的转正了！！前两个月没给1分钱！！让人发指！<br />虽然人事在TX，福利是TX给的，工资是TX的，人也在TX，也直接给TX做事情，但签约的公司不是TX，说什么大家一家人都TM的扯淡，一样的话工资怎么两套标准，招聘的时候说的真好听，实际证明：骗人！！<br />不就电信的项目多点吗？名气大了点而已，没啥了不起的，开发照样一团糟，文档照样是开发完再补，流程一条腿，实际开发另一条腿。卖了一年，一年之后肯定走人了，讲的政策一天变N次！这种公司谁敢长期呆下去？今天本来很高兴，签完后告诉俺工资多少就有点郁闷了，和当初在俺学校讲的完全不是一回事！！这还是有点名气的公司，不知道小点的公司是不是比他们要好。虽然感觉这里能学到东西，即使现在也这么感觉，但是2个月过去了，心里还是空荡荡的，没觉得有多大收获。在这里面搞Java的被成为搞“页面”的！！！真是伤自尊啊，不过这里有的人确实强，不过他们大部分都是搞C的，虽然这里搞Java的人多。<br />俺是应届的，大学4年没吃一次生日蛋糕，今天公司还让俺惊喜了一下，居然还记得通知俺下班领生日蛋糕和小礼品！哎。。。。</p>
<img src ="http://www.blogjava.net/jjunix/aggbug/68115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-09-06 20:10 <a href="http://www.blogjava.net/jjunix/archive/2006/09/06/68115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实习日志6 － 这个项目很烦人！！</title><link>http://www.blogjava.net/jjunix/archive/2006/08/31/66947.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Thu, 31 Aug 2006 13:13:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/08/31/66947.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/66947.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/08/31/66947.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/66947.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/66947.html</trackback:ping><description><![CDATA[      接触的第一个项目是一个小模块，主要用Java客户端Socket 和C服务器端Socket通信，服务器是Linux系统。之前什么都没有做，突然老大让我们几个新人做这样一个东西，而且没有一个人带我们搞，前前后后用了两周时间才算基本搞定了。最大的体会是：原来在学校里搞东西，写到八九成就觉的完成了，即使哪里有点小问题也从来不管，觉得那里不值得花费精神去深究，但是现在是所有的问题(已知的)都必须解决，一个都不能留！！比如说如果维持接收报警信息的Socket连接有时候会断，如果在学校我肯定不管他，大不了重启服务器从头运行！！功能实现了就OK啦，但是现在这是商用软件，用户是肯定不会去重启服务器，出了问题就是经济损失！现在不去做是不行的了，最起码一旦用户用了两天打电话回来，开人都有可能。哎，版本都已经提交了，但是心里还是不踏实，总感觉不定哪天那边会打电话回来说：系统报错了！！<br />      第一个是小了点，但是最底层的转换都要手写的，现在这个和上面一个很相似，但是底层是人家实现好的东西，只是数据太多了，copy，paste都得好几天，上面每天催老大，老大每天催我们，哎，都是copy，paste，没有什么意思，还要天天加班，真是烦人！！！<img src ="http://www.blogjava.net/jjunix/aggbug/66947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-08-31 21:13 <a href="http://www.blogjava.net/jjunix/archive/2006/08/31/66947.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实习日志5 － 误人子弟！！！</title><link>http://www.blogjava.net/jjunix/archive/2006/08/12/63115.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Sat, 12 Aug 2006 00:47:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/08/12/63115.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/63115.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/08/12/63115.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/63115.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/63115.html</trackback:ping><description><![CDATA[无缘无故被转到另一家公司，虽然是进入“TX”里面做事情，但这一个月实在是无聊，没有什么东西做，一天到晚都是看项目代码，当时应聘是明明搞的Java，现在做的虽然是Java后台处理，但是一句Java代码也不会让你去写。更可怕的事情是一周后有一个考核，决定去留的考核，如果过了就可以签约，进入试用期，如果过不了也就意味着从4月底到现在没有一分钱的工资，还倒贴了几个月的生活费。这就是“TX”吗？感觉这几个月就是在被人玩，根本就没有要的意思，既然不想要又何必招聘呢？？误人子弟！！！！！！！！！！<img src ="http://www.blogjava.net/jjunix/aggbug/63115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-08-12 08:47 <a href="http://www.blogjava.net/jjunix/archive/2006/08/12/63115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>毕业答辩结束了.哎....</title><link>http://www.blogjava.net/jjunix/archive/2006/06/21/54368.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Wed, 21 Jun 2006 14:03:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/06/21/54368.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/54368.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/06/21/54368.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/54368.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/54368.html</trackback:ping><description><![CDATA[大学里最后一件事就是答辩了,都结束了.答辩不是滋味,哎,老师们心情好就给高分,凭感觉给分,凭感觉让谁挂就谁就得挂,还好我当时忍住了没和他争,居然说只用Struts的Action而不用Struts其他的组件就不能实现MVC!!<img height="20" src="http://www.blogjava.net/Emoticons/hitwall.gif" width="25" border="0" />哎,如果和他争辩一下真后果可能和我那个考上研的同学后果一样了!!哎,他也够可怜的,考上了很好的一个大学的跨专业的研居然这里栽倒了,真TMD让人看不惯!!!<img src ="http://www.blogjava.net/jjunix/aggbug/54368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-06-21 22:03 <a href="http://www.blogjava.net/jjunix/archive/2006/06/21/54368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全国公共图书馆</title><link>http://www.blogjava.net/jjunix/archive/2006/06/15/52890.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Thu, 15 Jun 2006 00:35:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/06/15/52890.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/52890.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/06/15/52890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/52890.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/52890.html</trackback:ping><description><![CDATA[
		<span style="FONT-SIZE: 12px">
				<a href="http://www.nlc.gov.cn/" target="_blank">
						<font color="#003366">·中国国家图书馆</font>
				</a>
				<br />
				<a href="http://www.clcn.cn.net/" target="_blank">
						<font color="#003366">·首都图书馆</font>
				</a>
				<br />
				<a href="http://www.gxstlib.org.cn/" target="_blank">
						<font color="#003366">·广西科技图书馆</font>
				</a>
				<br />
				<a href="http://www.hkpl.gov.hk/hkcl/" target="_blank">
						<font color="#003366">·香港中央图书馆</font>
				</a>
				<br />
				<a href="http://lib.sx.cn/" target="_blank">
						<font color="#003366">·山西省图书馆</font>
				</a>
				<br />
				<a href="http://www.helib.net/" target="_blank">
						<font color="#003366">·河北省图书馆</font>
				</a>
				<br />
				<a href="http://www.cqlib.cn/" target="_blank">
						<font color="#003366">·重庆图书馆</font>
				</a>
				<br />
				<a href="http://www.tjl.tj.cn/" target="_blank">
						<font color="#003366">·天津图书馆</font>
				</a>
				<br />
				<a href="http://www.digilib.sh.cn/" target="_blank">
						<font color="#003366">·上海数字图书馆</font>
				</a>
				<br />
				<a href="http://www.library.sh.cn/" target="_blank">
						<font color="#003366">·上海图书馆</font>
				</a>
				<br />
				<a href="http://www.nlc.gov.cn/" target="_blank">
						<font color="#003366">·中国国家图书馆</font>
				</a>
				<br />
				<a href="http://www.szlib.gov.cn/" target="_blank">
						<font color="#003366">·深圳图书馆</font>
				</a>
				<br />
				<a href="http://www.bookb2b.com/" target="_blank">
						<font color="#003366">·图书交易网</font>
				</a>
				<br />
				<a href="http://www.hkpl.gov.hk/" target="_blank">
						<font color="#003366">·香港公共图书馆</font>
				</a>
				<br />
				<a href="http://www.sylib.net/" target="_blank">
						<font color="#003366">·沈阳图书馆</font>
				</a>
				<br />
				<a href="http://www.metalinfo.net.cn/" target="_blank">
						<font color="#003366">·国家工程技术图书馆</font>
				</a>
				<br />
				<a href="http://www.jlplib.com.cn/" target="_blank">
						<font color="#003366">·吉林省图书馆</font>
				</a>
				<br />
				<a href="http://lib.nanhai.gd.cn/" target="_blank">
						<font color="#003366">·南海图书馆</font>
				</a>
				<br />
				<a href="http://www.sxlib.org.cn/" target="_blank">
						<font color="#003366">·陕西省图书馆</font>
				</a>
				<br />
				<a href="http://www.lzlib.gov.cn/" target="_blank">
						<font color="#003366">·广西柳州图书馆</font>
				</a>
				<br />
				<a href="http://www.gll-gx.org.cn/" target="_blank">
						<font color="#003366">·广西桂林图书馆</font>
				</a>
				<br />
				<a href="http://www.gxlib.org.cn/" target="_blank">
						<font color="#003366">·广西图书馆</font>
				</a>
				<br />
				<a href="http://www.sclib.org/" target="_blank">
						<font color="#003366">·四川省图书馆</font>
				</a>
				<br />
				<a href="http://www.fslib.com.cn/" target="_blank">
						<font color="#003366">·佛山图书馆</font>
				</a>
				<br />
				<a href="http://159.226.100.40:8080/las/index.jsp" target="_blank">
						<font color="#003366">·中科院文献情报中心</font>
				</a>
				<br />
				<a href="http://www.d-library.com.cn/" target="_blank">
						<font color="#003366">·中国数字图书馆</font>
				</a>
				<br />
				<a href="http://www.ssreader.com/" target="_blank">
						<font color="#003366">·超星数字图书馆</font>
				</a>
				<br />
				<a href="http://www.bjdclib.com/" target="_blank">
						<font color="#003366">·北京市东城区图书馆</font>
				</a>
				<br />
				<a href="http://www.wxlib.cn/" target="_blank">
						<font color="#003366">·无锡市图书馆</font>
				</a>
				<br />
				<a href="http://www.zhongshan-lib.com.cn/" target="_blank">
						<font color="#003366">·中山图书馆</font>
				</a>
				<br />
				<a href="http://265.com/2650329/广东广州图书馆" target="_blank">
						<font color="#003366">·广东广州图书馆</font>
				</a>
				<br />
				<a href="http://www.library.hn.cn/" target="_blank">
						<font color="#003366">·湖南图书馆</font>
				</a>
				<br />
				<a href="http://www.whlib.gov.cn/" target="_blank">
						<font color="#003366">·湖北武汉图书馆</font>
				</a>
				<br />
				<a href="http://www.zzlib.org.cn/" target="_blank">
						<font color="#003366">·郑州市图书馆</font>
				</a>
				<br />
				<a href="http://www.henanlib.gov.cn/" target="_blank">
						<font color="#003366">·河南省图书馆</font>
				</a>
				<br />
				<a href="http://www.qzlib.com.cn/" target="_blank">
						<font color="#003366">·福建省泉州市图书馆</font>
				</a>
				<br />
				<a href="http://www.xmst.org/" target="_blank">
						<font color="#003366">·厦门少儿图书馆</font>
				</a>
				<br />
				<a href="http://www.fjlib.fz.fj.cn/" target="_blank">
						<font color="#003366">·福建省图书馆</font>
				</a>
				<br />
				<a href="http://www.jxlib.gov.cn/" target="_blank">
						<font color="#003366">·江西省图书馆</font>
				</a>
				<br />
				<a href="http://www.hflib.gov.cn/" target="_blank">
						<font color="#003366">·合肥市图书馆</font>
				</a>
				<br />
				<a href="http://www.lnlib.com/" target="_blank">
						<font color="#003366">·辽宁省图书馆</font>
				</a>
				<br />
				<a href="http://www.jllib.cn/" target="_blank">
						<font color="#003366">·江苏金陵图书馆</font>
				</a>
				<br />
				<a href="http://www.stlib.gd.cn/" target="_blank">
						<font color="#003366">·广东省科技图书馆</font>
				</a>
				<br />
				<a href="http://www.czlib.net/" target="_blank">
						<font color="#003366">·常州图书馆</font>
				</a>
				<br />
				<a href="http://www.szlib.com/" target="_blank">
						<font color="#003366">·苏州图书馆</font>
				</a>
				<br />
				<a href="http://www.jslib.org.cn/" target="_blank">
						<font color="#003366">·南京图书馆</font>
				</a>
				<br />
				<a href="http://www.hangtu.com/" target="_blank">
						<font color="#003366">·杭州图书馆</font>
				</a>
				<br />
				<a href="http://lib.hu.zj.cninfo.net/" target="_blank">
						<font color="#003366">·湖州图书馆</font>
				</a>
				<br />
				<a href="http://www.zjlib.net.cn/1024.htm" target="_blank">
						<font color="#003366">·浙江图书馆</font>
				</a>
				<br />
				<a href="http://www.hrblib.net.cn/" target="_blank">
						<font color="#003366">·黑龙江哈尔滨市图书馆</font>
				</a>
				<br />
				<a href="http://www.library.gov.mo/" target="_blank">
						<font color="#003366">·澳门中央图书馆</font>
				</a>
				<br />
				<a href="http://www.ytlib.sd.cn/" target="_blank">
						<font color="#003366">·烟台图书馆</font>
				</a>
				<br />
				<a href="http://www.sdlib.com/" target="_blank">
						<font color="#003366">·山东省图书馆</font>
				</a>
				<br />
				<a href="http://www.nmglib.com.cn/" target="_blank">
						<font color="#003366">·内蒙古图书馆</font>
				</a>
				<br />
				<a href="http://www.lib.cc.jl.cn/" target="_blank">
						<font color="#003366">·长春图书馆</font>
				</a>
				<br />
				<a href="http://www.ahlib.com/" target="_blank">
						<font color="#003366">·安徽省图书馆</font>
				</a>
		</span>
<img src ="http://www.blogjava.net/jjunix/aggbug/52890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-06-15 08:35 <a href="http://www.blogjava.net/jjunix/archive/2006/06/15/52890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java文件操作大全</title><link>http://www.blogjava.net/jjunix/archive/2006/06/01/49486.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Thu, 01 Jun 2006 03:07:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/06/01/49486.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/49486.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/06/01/49486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/49486.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/49486.html</trackback:ping><description><![CDATA[
		<div class="diaryContent" id="diary879164" style="DISPLAY: block">
				<p>文件的建立/检查与删除<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="java.io.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;文件的建立、检查与删除&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />String path=request.getRealPath("");<br />//out.println(path);<br />File f=new File(path,"File.txt");<br />//out.println(f);<br />//out.println(f.exists());</p>
				<p>if(f.exists()){//检查File.txt是否存在<br />f.delete();//删除File.txt文件<br />out.println(path + "存在，已删除。");<br />}else{<br />f.createNewFile();//在当前目录下建立一个名为File.txt的文件<br />out.println(path + "\\File.txt 不存在，已建立。");//输出目前所在的目录路径<br />}<br />%&gt;</p>
				<p>目录的建立/检查与删除<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="java.io.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;目录的建立/检查与删除&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />String path=request.getRealPath("");<br />path=path + "\\Sub";//将要建立的目录路径<br />File d=new File(path);//建立代表Sub目录的File对象，并得到它的一个引用<br />if(d.exists()){//检查Sub目录是否存在<br />d.delete();<br />out.println("Sub目录存在，已删除");<br />}else{<br />d.mkdir();//建立Sub目录<br />out.println("Sub目录不存在，已建立");<br />}<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
				<p>
						<br />如何在JSP中处理虚拟目录<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="java.io.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;JSP中如何处理虚拟目录&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />取得虚拟目录对应的磁盘路径&lt;br&gt;<br />Web站点主目录的位置为&lt;font color=#ff0000&gt;&lt;%=request.getRealPath("/")%&gt;&lt;/font&gt;&lt;br&gt;<br />JSP网页所在的目录位置&lt;font color=#ff0000&gt;&lt;%=request.getRealPath("./")%&gt;&lt;/font&gt;&lt;br&gt;<br />JSP网页所在目录上一层目录的位置&lt;font color=#ff0000&gt;&lt;%=request.getRealPath("../")%&gt;&lt;/font&gt;&lt;br&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
				<p>
						<br />文件属性的取得<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="java.util.Date,java.io.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;文件属性的取得&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />String path=request.getRealPath("/");<br />File f=new File(path,"ReadData.txt");<br />if(f.exists()){<br />%&gt;<br />&lt;%=f.getName()%&gt;的属性如下：&lt;br&gt;&lt;br&gt;<br />文件长度为：&lt;%=f.length()%&gt;<br />&lt;%=f.isFile()?"是文件":"不是文件"%&gt;&lt;br&gt;<br />&lt;%=f.isDirectory()?"是目录":"不是目录"%&gt;&lt;br&gt;<br />&lt;%=f.canRead()?"可读取":"不可读取"%&gt;&lt;br&gt;<br />&lt;%=f.canWrite()?"可写入":"不可写入"%&gt;&lt;br&gt;<br />&lt;%=f.isHidden()?"是隐藏文件":"不是隐藏文件"%&gt;&lt;br&gt;<br />文件的最后修改日期为：&lt;%=new Date(f.lastModified())%&gt;&lt;br&gt;<br />&lt;%<br />}else{<br />f.createNewFile();//在当前目录下建立一个名为ReaData.txt的文件<br />%&gt; <br />&lt;%=f.getName()%&gt;的属性如下：&lt;br&gt;&lt;br&gt;<br />文件长度为：&lt;%=f.length()%&gt;<br />&lt;%=f.isFile()?"是文件":"不是文件"%&gt;&lt;br&gt;<br />&lt;%=f.isDirectory()?"是目录":"不是目录"%&gt;&lt;br&gt;<br />&lt;%=f.canRead()?"可读取":"不可读取"%&gt;&lt;br&gt;<br />&lt;%=f.canWrite()?"可写入":"不可写入"%&gt;&lt;br&gt;<br />&lt;%=f.isHidden()?"是隐藏文件":"不是隐藏文件"%&gt;&lt;br&gt;<br />文件的最后修改日期为：&lt;%=new Date(f.lastModified())%&gt;&lt;br&gt;<br />&lt;%<br />}<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
				<p>
						<br />取出目录中文件的方法<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="java.io.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;取出目录中文件的方法--列出目录中的文件&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />String path=request.getRealPath("/");<br />File d=new File(path);//建立当前目录中文件的File对象<br />File list[]=d.listFiles();//取得代表目录中所有文件的File对象数组<br />out.println("&lt;font color=#ff0000&gt;" + path + "目录下的文件：&lt;/font&gt;&lt;br&gt;");<br />for(int i=0;i&lt;list.length;i++){<br />if(list&lt;I&gt;.isFile()){<br />out.println(list&lt;I&gt;.getName() + "&lt;br&gt;");<br />}<br />}<br />out.println("&lt;br&gt;&lt;font color=#ff0000&gt;" + path + "目录下的目录：&lt;/font&gt;&lt;br&gt;");<br />for(int i=0;i&lt;list.length;i++){<br />if(list&lt;I&gt;.isDirectory()){<br />out.println(list&lt;I&gt;.getName() + "&lt;br&gt;");<br />}<br />}<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
				<p>
						<br />判断是否为空白文件<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="java.io.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;判断是否为空白文件&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />String path=request.getRealPath("/");<br />out.println(path);<br />FileReader fr=new FileReader(path + "\\AtEnd.txt");//建立FileReader对象，并实例化为fr<br />//对FileReader类生成的对象使用read()方法，可以从字符流中读取下一个字符。<br />if(fr.read()==-1)//判断是否已读到文件的结尾<br />{<br />out.print("AtEnd.txt文件中没有数据&lt;br&gt;");<br />}else{<br />out.println("AtEnd.txt文件中有数据");<br />}<br />fr.close();<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
				<p>
						<br />读取所有的文件数据<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="java.io.*,java.lang.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;读取所有的文件数据&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />String path=request.getRealPath(".");<br />FileReader fr=new FileReader(path + "\\ReadData.txt");<br />//关键在于读取过程中，要判断所读取的字符是否已经到了文件的末尾，并且这个字符是不是文件中的断行符，即判断该字符值是否为13。<br />int c=fr.read();//从文件中读取一个字符<br />//判断是否已读到文件结尾<br />while(c!=-1){<br />out.print((char)c);//输出读到的数据<br />c=fr.read();//从文件中继续读取数据<br />if(c==13){//判断是否为断行字符<br />out.print("&lt;br&gt;");//输出分行标签<br />fr.skip(1);//略过一个字符<br />//c=fr.read();//读取一个字符<br />}<br />}<br />fr.close();<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
				<p>
						<br />一行一行读取数据<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="java.io.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;文件读取&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />String path=request.getRealPath("");//取得当前目录的路径<br />FileReader fr=new FileReader(path + "\\file\\inc\\t.txt");//建立FileReader对象，并实例化为fr<br />BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象，并实例化为br<br />String Line=br.readLine();//从文件读取一行字符串<br />//判断读取到的字符串是否不为空<br />while(Line!=null){<br />out.println(Line + "&lt;br&gt;");//输出从文件中读取的数据<br />Line=br.readLine();//从文件中继续读取一行数据<br />}<br />br.close();//关闭BufferedReader对象<br />fr.close();//关闭文件<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
				<p>
						<br />略过文件中的字符不读取<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="java.io.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;略过字节不读取&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />String path=request.getRealPath(".");<br />FileReader fr=new FileReader(path + "\\ReadData.txt");<br />fr.skip(2);//跳过2个字节<br />int c=fr.read();//读取一个字节<br />while(c!=-1){<br />out.print((char)c);<br />c=fr.read();<br />}<br />fr.close();<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
				<p>
						<br />将数据写入文件<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="java.io.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;将数据写入文件&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />String path=request.getRealPath(".");<br />FileWriter fw=new FileWriter(path + "\\WriteData.txt");//建立FileWriter对象，并实例化fw<br />//将字符串写入文件<br />fw.write("大家好！");<br />fw.write("本书是《JSP编程技巧》");<br />fw.write("请多多指教！");<br />fw.write("email:stride@sina.com");<br />fw.close();</p>
				<p>FileReader fr=new FileReader(path + "\\WriteData.txt");<br />BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象，并实例化为br<br />String Line=br.readLine();<br />//读取一行数据<br />out.println(Line + "&lt;br&gt;");<br />br.close();//关闭BufferedReader对象<br />fr.close();<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
				<p>
						<br />将写入文件的数据分行<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="java.io.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;将写入文件的数据分行&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />String path=request.getRealPath(".");<br />FileWriter fw=new FileWriter(path + "\\WriteData.txt");<br />BufferedWriter bw=new BufferedWriter(fw);<br />bw.write("大家好！");<br />bw.write("本书是《JSP编程技巧》。");<br />bw.newLine();//断行<br />bw.write("请多多指教！");<br />bw.newLine();//断行<br />bw.write("email: stride@sina.com");<br />bw.flush();//将数据更新至文件<br />fw.close();//关闭文件流<br />out.println("写入文件内容为：&lt;br&gt;");<br />FileReader fr=new FileReader(path + "\\WriteData.txt");<br />BufferedReader br=new BufferedReader(fr);<br />String Line=br.readLine();//读取一行数据<br />while(Line!=null){<br />out.println(Line + "&lt;br&gt;");<br />Line=br.readLine();<br />}<br />fr.close();<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br />如何将数据追加写入到文件<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="java.io.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;将写入文件的数据分行&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />String path=request.getRealPath(".");<br />RandomAccessFile rf=new RandomAccessFile(path + "\\WriteData.txt","rw");//定义一个类RandomAccessFile的对象，并实例化<br />rf.seek(rf.length());//将指针移动到文件末尾<br />rf.writeBytes("\nAppend a line to the file!");<br />rf.close();//关闭文件流<br />out.println("写入文件内容为：&lt;br&gt;");<br />FileReader fr=new FileReader(path + "\\WriteData.txt");<br />BufferedReader br=new BufferedReader(fr);//读取文件的BufferedRead对象<br />String Line=br.readLine();<br />while(Line!=null){<br />out.println(Line + "&lt;br&gt;");<br />Line=br.readLine();<br />}<br />fr.close();//关闭文件<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;</p>
		</div>
<img src ="http://www.blogjava.net/jjunix/aggbug/49486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-06-01 11:07 <a href="http://www.blogjava.net/jjunix/archive/2006/06/01/49486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Java 中文问题</title><link>http://www.blogjava.net/jjunix/archive/2006/05/26/48410.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Fri, 26 May 2006 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/05/26/48410.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/48410.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/05/26/48410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/48410.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/48410.html</trackback:ping><description><![CDATA[
		<p id="fp">
				<font color="#808080">
						<font size="2">(本文来自网络)<br /></font>
						<br />
				</font>Java中文问题一直困扰着很多初学者，如果了解了Java系统的中文问题原理，我们就可以对中文问题能够采取根本的解决之道。<br /><br />　　最古老的解决方案是使用String的字节码转换，这种方案问题是不方便，我们需要破坏对象封装性，进行字节码转换。<br /><br />　　还有一种方式是对J2EE容器进行编码设置，如果J2EE应用系统脱离该容器，则会发生乱码，而且指定容器配置不符合J2EE应用和容器分离的原则。<br /><br />　　在Java内部运算中，涉及到的所有字符串都会被转化为UTF-8编码来进行运算。那么，在被Java转化之前，字符串是什么样的字符集？ Java总是根据操作系统的默认编码字符集来决定字符串的初始编码，而且Java系统的输入和输出的都是采取操作系统的默认编码。<br /><br />　　因此，如果能统一Java系统的输入、输出和操作系统3者的编码字符集合，将能够使Java系统正确处理和显示汉字。这是处理Java系统汉字的一个原则，但是在实际项目中，能够正确抓住和控制住Java系统的输入和输出部分是比较难的。J2EE中，由于涉及到外部浏览器和数据库等，所以中文问题乱码显得非常突出。<br /><br />　　J2EE应用程序是运行在J2EE容器中。在这个系统中，输入途径有很多种：一种是通过页面表单打包成请求（request）发往服务器的；第二种是通过数据库读入；还有第3种输入比较复杂，JSP在第一次运行时总是被编译成Servlet，JSP中常常包含中文字符，那么编译使用javac时，Java将根据默认的操作系统编码作为初始编码。除非特别指定，如在Jbuilder/eclipse中可以指定默认的字符集。<br /><br />　　输出途径也有几种：第一种是JSP页面的输出。由于JSP页面已经被编译成Servlet，那么在输出时，也将根据操作系统的默认编码来选择输出编码，除非指定输出编码方式；还有输出途径是数据库，将字符串输出到数据库。<br /><br />　　由此看来，一个J2EE系统的输入输出是非常复杂，而且是动态变化的，而Java是跨平台运行的，在实际编译和运行中，都可能涉及到不同的操作系统，如果任由Java自由根据操作系统来决定输入输出的编码字符集，这将不可控制地出现乱码。<br /><br />　　正是由于Java的跨平台特性，使得字符集问题必须由具体系统来统一解决，所以在一个Java应用系统中，解决中文乱码的根本办法是明确指定整个应用系统统一字符集。<br /><br />　　指定统一字符集时，到底是指定ISO8859_1 、GBK还是UTF-8呢？<br /><br />　　（1）如统一指定为ISO8859_1，因为目前大多数软件都是西方人编制的，他们默认的字符集就是ISO8859_1，包括操作系统Linux和数据库MySQL等。这样，如果指定Jive统一编码为ISO8859_1，那么就有下面3个环节必须把握：<br /><br />　　开发和编译代码时指定字符集为ISO8859_1。<br /><br />　　运行操作系统的默认编码必须是ISO8859_1，如Linux。<br /><br />　　在JSP头部声明：&lt;%@ page contentType="text/html;charset=ISO8859_1" %&gt;。<br /><br />　　（2）如果统一指定为GBK中文字符集，上述3个环节同样需要做到，不同的是只能运行在默认编码为GBK的操作系统，如中文Windows。<br /><br />　　统一编码为ISO8859_1和GBK虽然带来编制代码的方便，但是各自只能在相应的操作系统上运行。但是也破坏了Java跨平台运行的优越性，只在一定范围内行得通。例如，为了使得GBK编码在linux上运行，设置Linux编码为GBK。<br /><br />　　那么有没有一种除了应用系统以外不需要进行任何附加设置的中文编码根本解决方案呢？<br /><br />　　将Java/J2EE系统的统一编码定义为UTF-8。UTF-8编码是一种兼容所有语言的编码方式，惟一比较麻烦的就是要找到应用系统的所有出入口，然后使用UTF-8去“结扎”它。<br /><br />　　一个J2EE应用系统需要做下列几步工作：<br /><br />开发和编译代码时指定字符集为UTF-8。JBuilder和Eclipse都可以在项目属性中设置。<br />使用过滤器，如果所有请求都经过一个Servlet控制分配器，那么使用Servlet的filter执行语句，将所有来自浏览器的请求（request）转换为UTF-8，因为浏览器发过来的请求包根据浏览器所在的操作系统编码，可能是各种形式编码。关键一句：<br />request.setCharacterEncoding("UTF-8")。<br />网上有此filter的源码，Jdon框架源码中com.jdon.util.SetCharacterEncodingFilter<br />需要配置web.xml 激活该Filter。<br />在JSP头部声明：&lt;%@ page contentType="text/html;charset= UTF-8" %&gt;。<br />在Jsp的html代码中，声明UTF-8:<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;<br />设定数据库连接方式是UTF-8。例如连接MYSQL时配置URL如下：<br />jdbc:mysql://localhost:3306/test?useUnicode=true&amp;amp;characterEncoding=UTF-8<br />一般数据库都可以通过管理设置设定UTF-8<br />其他和外界交互时能够设定编码时就设定UTF-8，例如读取文件，操作XML等。<br />　　以前在Jsp/Servlet时就采取这个原则，后来使用Struts、Tapestry、EJB、Hibernate、Jdon等框架时，从未被乱码困扰过，可以说适合各种架构。希望本方案供更多初学者分享，减少Java/J2EE的第一个拦路虎，也避免因为采取一些临时解决方案，导致中文问题一直出现在新的技术架构中。<br /><br /><a href="http://www.jdon.com/jive/thread.jsp?forum=62&amp;thread=21140" target="_blank">http://www.jdon.com/jive/thread.jsp?forum=62&amp;thread=21140</a></p>
<img src ="http://www.blogjava.net/jjunix/aggbug/48410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-05-26 21:04 <a href="http://www.blogjava.net/jjunix/archive/2006/05/26/48410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[TOMCAT]用web.xml控制Web应用的行为(upd:6.3)</title><link>http://www.blogjava.net/jjunix/archive/2006/05/24/47753.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Wed, 24 May 2006 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/05/24/47753.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/47753.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/05/24/47753.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/47753.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/47753.html</trackback:ping><description><![CDATA[
		<font size="2">
				<p align="left">来自sun:<br /><font color="#000080">注意：描述符元素必须在部署描述文件中按照下列顺序出现：icon,display,description,distributable,context-param,filter,filter-mapping,listener,servlet,servlet-mapping,session-config,mime-mapping,welcome-file-list,error-page,taglib,resource-env-ref,resource-ref,security-contraint,login-config,seurity-role,env-entry.</font></p>
				<a href="http://blog.csdn.net/lgcheng/" target="_blank">
						<font color="#808080">
								<br />以下转载自 lgcheng 的 Blog</font>
				</a>
				<br />
				<br />
				<br />
				<br />1 定义头和根元素<br /><br />部署描述符文件就像所有XML文件一样，必须以一个XML头开始。这个头声明可以使用的XML版本并给出文件的字符编码。<br />DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本（如2.2或2.3）并指定管理此文件其余部分内容的语法的DTD(Document Type Definition，文档类型定义)。<br />所有部署描述符文件的顶层（根）元素为web-app。请注意，XML元素不像HTML，他们是大小写敏感的。因此，web-App和WEB-APP都是不合法的，web-app必须用小写。<br /><br />2 部署描述符文件内的元素次序<br /><br />XML 元素不仅是大小写敏感的，而且它们还对出现在其他元素中的次序敏感。例如，XML头必须是文件中的第一项，DOCTYPE声明必须是第二项，而web- app元素必须是第三项。在web-app元素内，元素的次序也很重要。服务器不一定强制要求这种次序，但它们允许（实际上有些服务器就是这样做的）完全拒绝执行含有次序不正确的元素的Web应用。这表示使用非标准元素次序的web.xml文件是不可移植的。<br />下面的列表给出了所有可直接出现在web-app元素内的合法元素所必需的次序。例如，此列表说明servlet元素必须出现在所有servlet-mapping元素之前。请注意，所有这些元素都是可选的。因此，可以省略掉某一元素，但不能把它放于不正确的位置。<br />l icon icon元素指出IDE和GUI工具用来表示Web应用的一个和两个图像文件的位置。<br />l display-name display-name元素提供GUI工具可能会用来标记这个特定的Web应用的一个名称。<br />l description description元素给出与此有关的说明性文本。<br />l context-param context-param元素声明应用范围内的初始化参数。<br />l filter 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。<br />l filter-mapping 一旦命名了一个过滤器，就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。<br />l listener servlet API的版本2.3增加了对事件监听程序的支持，事件监听程序在建立、修改和删除会话或servlet环境时得到通知。Listener元素指出事件监听程序类。<br />l servlet 在向servlet或JSP页面制定初始化参数或定制URL时，必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。<br />l servlet-mapping 服务器一般为servlet提供一个缺省的URL：</font>
		<a href="http://host/webAppPrefix/servlet/ServletName" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/ServletName</font>
		</a>
		<font size="2">。但是，常常会更改这个URL，以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时，使用servlet-mapping元素。<br />l session-config 如果某个会话在一定时间内未被访问，服务器可以抛弃它以节省内存。可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值，或者可利用session-config元素制定缺省超时值。<br />l mime-mapping 如果Web应用具有想到特殊的文件，希望能保证给他们分配特定的MIME类型，则mime-mapping元素提供这种保证。<br />l welcom-file-list welcome-file-list元素指示服务器在收到引用一个目录名而不是文件名的URL时，使用哪个文件。<br />l error-page error-page元素使得在返回特定HTTP状态代码时，或者特定类型的异常被抛出时，能够制定将要显示的页面。<br />l taglib taglib元素对标记库描述符文件（Tag Libraryu Descriptor file）指定别名。此功能使你能够更改TLD文件的位置，而不用编辑使用这些文件的JSP页面。<br />l resource-env-ref resource-env-ref元素声明与资源相关的一个管理对象。<br />l resource-ref resource-ref元素声明一个资源工厂使用的外部资源。<br />l security-constraint security-constraint元素制定应该保护的URL。它与login-config元素联合使用<br />l login-config 用login-config元素来指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。<br />l security-role security-role元素给出安全角色的一个列表，这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。<br />l env-entry env-entry元素声明Web应用的环境项。<br />l ejb-ref ejb-ref元素声明一个EJB的主目录的引用。<br />l ejb-local-ref ejb-local-ref元素声明一个EJB的本地主目录的应用。<br /><br />3 分配名称和定制的UL<br /><br />在web.xml中完成的一个最常见的任务是对servlet或JSP页面给出名称和定制的URL。用servlet元素分配名称，使用servlet-mapping元素将定制的URL与刚分配的名称相关联。<br />3.1 分配名称<br />为了提供初始化参数，对servlet或JSP页面定义一个定制URL或分配一个安全角色，必须首先给servlet或JSP页面一个名称。可通过 servlet元素分配一个名称。最常见的格式包括servlet-name和servlet-class子元素（在web-app元素内），如下所示：<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;moreservlets.TestServlet&lt;/servlet-class&gt;<br />&lt;/servlet&gt; <br />这表示位于WEB-INF/classes/moreservlets/TestServlet的servlet已经得到了注册名Test。给 servlet一个名称具有两个主要的含义。首先，初始化参数、定制的URL模式以及其他定制通过此注册名而不是类名引用此servlet。其次,可在 URL而不是类名中使用此名称。因此，利用刚才给出的定义，URL </font>
		<a href="http://host/webAppPrefix/servlet/Test" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/Test</font>
		</a>
		<font size="2">可用于 </font>
		<a href="http://host/webAppPrefix/servlet/moreservlets.TestServlet" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/moreservlets.TestServlet</font>
		</a>
		<font size="2">的场所。<br />请记住：XML元素不仅是大小写敏感的，而且定义它们的次序也很重要。例如，web-app元素内所有servlet元素必须位于所有servlet- mapping元素（下一小节介绍）之前，而且还要位于5.6节和5.11节讨论的与过滤器或文档相关的元素（如果有的话）之前。类似地，servlet 的servlet-name子元素也必须出现在servlet-class之前。5.2节"部署描述符文件内的元素次序"将详细介绍这种必需的次序。<br />例如，程序清单5-1给出了一个名为TestServlet的简单servlet，它驻留在moreservlets程序包中。因为此servlet是扎根在一个名为deployDemo的目录中的Web应用的组成部分，所以TestServlet.class放在deployDemo/WEB- INF/classes/moreservlets中。程序清单5-2给出将放置在deployDemo/WEB-INF/内的web.xml文件的一部分。此web.xml文件使用servlet-name和servlet-class元素将名称Test与TestServlet.class相关联。图 5-1和图5-2分别显示利用缺省URL和注册名调用TestServlet时的结果。<br /><br />程序清单5-1 TestServlet.java<br />package moreservlets;<br /><br />import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br /><br />/** Simple servlet used to illustrate servlet naming<br />* and custom URLs.<br />* &lt;P&gt;<br />* Taken from More Servlets and JavaServer Pages<br />* from Prentice Hall and Sun Microsystems Press,<br />* </font>
		<a href="http://www.moreservlets.com/." target="_blank">
				<font size="2">http://www.moreservlets.com/.</font>
		</a>
		<br />
		<font size="2">* © 2002 Marty Hall; may be freely used or adapted.<br />*/<br /><br />public class TestServlet extends HttpServlet {<br />public void doGet(HttpServletRequest request,<br />HttpServletResponse response)<br />throws ServletException, IOException {<br />response.setContentType("text/html");<br />PrintWriter out = response.getWriter();<br />String uri = request.getRequestURI();<br />out.println(ServletUtilities.headWithTitle("Test Servlet") +<br />"&lt;BODY BGCOLOR=\"#FDF5E6\"&gt;\n" +<br />"&lt;H2&gt;URI: " + uri + "&lt;/H2&gt;\n" +<br />"&lt;/BODY&gt;&lt;/HTML&gt;");<br />}<br />}<br /><br /><br />程序清单5-2 web.xml（说明servlet名称的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
		<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target="_blank">
				<font size="2">http://java.sun.com/dtd/web-app_2_3.dtd</font>
		</a>
		<font size="2">"&gt;<br /><br />&lt;web-app&gt;<br />&lt;!-- … --&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;moreservlets.TestServlet&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;!-- … --&gt;<br />&lt;/web-app&gt;<br /><br />3.2 定义定制的URL<br />大多数服务器具有一个缺省的serlvet URL：<br /></font>
		<a href="http://host/webAppPrefix/servlet/packageName.ServletName" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/packageName.ServletName</font>
		</a>
		<font size="2">。虽然在开发中使用这个URL很方便，但是我们常常会希望另一个URL用于部署。例如，可能会需要一个出现在Web应用顶层的URL（如，http: //host/webAppPrefix/Anyname），并且在此URL中没有servlet项。位于顶层的URL简化了相对URL的使用。此外，对许多开发人员来说，顶层URL看上去比更长更麻烦的缺省URL更简短。<br />事实上，有时需要使用定制的URL。比如，你可能想关闭缺省URL映射，以便更好地强制实施安全限制或防止用户意外地访问无初始化参数的servlet。如果你禁止了缺省的URL，那么你怎样访问servlet呢？这时只有使用定制的URL了。<br />为了分配一个定制的URL，可使用servlet-mapping元素及其servlet-name和url-pattern子元素。Servlet- name元素提供了一个任意名称，可利用此名称引用相应的servlet；url-pattern描述了相对于Web应用的根目录的URL。url- pattern元素的值必须以斜杠（/）起始。<br />下面给出一个简单的web.xml摘录，它允许使用URL </font>
		<a href="http://host/webAppPrefix/UrlTest" target="_blank">
				<font size="2">http://host/webAppPrefix/UrlTest</font>
		</a>
		<font size="2">而不是</font>
		<a href="http://host/webAppPrefix/servlet/Test" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/Test</font>
		</a>
		<font size="2">或<br />http: //host/webAppPrefix/servlet/moreservlets.TestServlet。请注意，仍然需要XML头、 DOCTYPE声明以及web-app封闭元素。此外，可回忆一下，XML元素出现地次序不是随意的。特别是，需要把所有servlet元素放在所有 servlet-mapping元素之前。<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;moreservlets.TestServlet&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/UrlTest&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />URL模式还可以包含通配符。例如，下面的小程序指示服务器发送所有以Web应用的URL前缀开始，以..asp结束的请求到名为BashMS的servlet。<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;BashMS&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;msUtils.ASPTranslator&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;BashMS&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/*.asp&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />3.3 命名JSP页面<br />因为JSP页面要转换成sevlet，自然希望就像命名servlet一样命名JSP页面。毕竟，JSP页面可能会从初始化参数、安全设置或定制的URL中受益，正如普通的serlvet那样。虽然JSP页面的后台实际上是servlet这句话是正确的，但存在一个关键的猜疑：即，你不知道JSP页面的实际类名（因为系统自己挑选这个名字）。因此，为了命名JSP页面，可将jsp-file元素替换为servlet-calss元素，如下所示：<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;jsp-file&gt;/TestPage.jsp&lt;/jsp-file&gt;<br />&lt;/servlet&gt;<br />命名JSP页面的原因与命名servlet的原因完全相同：即为了提供一个与定制设置（如，初始化参数和安全设置）一起使用的名称，并且，以便能更改激活 JSP页面的URL（比方说，以便多个URL通过相同页面得以处理，或者从URL中去掉.jsp扩展名）。但是，在设置初始化参数时，应该注意，JSP页面是利用jspInit方法，而不是init方法读取初始化参数的。<br />例如，程序清单5-3给出一个名为TestPage.jsp的简单JSP页面，它的工作只是打印出用来激活它的URL的本地部分。TestPage.jsp放置在deployDemo应用的顶层。程序清单5-4给出了用来分配一个注册名PageName，然后将此注册名与</font>
		<a href="http://host/webAppPrefix/UrlTest2/anything" target="_blank">
				<font size="2">http://host/webAppPrefix/UrlTest2/anything</font>
		</a>
		<font size="2">形式的URL相关联的web.xml文件（即，deployDemo/WEB-INF/web.xml）的一部分。<br /><br />程序清单5-3 TestPage.jsp<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;<br />&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;TITLE&gt;<br />JSP Test Page<br />&lt;/TITLE&gt;<br />&lt;/HEAD&gt;<br />&lt;BODY BGCOLOR="#FDF5E6"&gt;<br />&lt;H2&gt;URI: &lt;%= request.getRequestURI() %&gt;&lt;/H2&gt;<br />&lt;/BODY&gt;<br />&lt;/HTML&gt;<br /><br /><br />程序清单5-4 web.xml（说明JSP页命名的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
		<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target="_blank">
				<font size="2">http://java.sun.com/dtd/web-app_2_3.dtd</font>
		</a>
		<font size="2">"&gt;<br /><br />&lt;web-app&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br />&lt;jsp-file&gt;/TestPage.jsp&lt;/jsp-file&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt; PageName &lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/UrlTest2/*&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;!-- ... --&gt;<br />&lt;/web-app&gt;<br /><br /><br />4 禁止激活器servlet<br /><br />对servlet或JSP页面建立定制URL的一个原因是，这样做可以注册从 init（servlet）或jspInit（JSP页面）方法中读取得初始化参数。但是，初始化参数只在是利用定制URL模式或注册名访问 servlet或JSP页面时可以使用，用缺省URL </font>
		<a href="http://host/webAppPrefix/servlet/ServletName" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/ServletName</font>
		</a>
		<font size="2">访问时不能使用。因此，你可能会希望关闭缺省URL，这样就不会有人意外地调用初始化servlet了。这个过程有时称为禁止激活器servlet，因为多数服务器具有一个用缺省的servlet URL注册的标准servlet，并激活缺省的URL应用的实际servlet。<br />有两种禁止此缺省URL的主要方法：<br />l 在每个Web应用中重新映射/servlet/模式。<br />l 全局关闭激活器servlet。<br />重要的是应该注意到，虽然重新映射每个Web应用中的/servlet/模式比彻底禁止激活servlet所做的工作更多，但重新映射可以用一种完全可移植的方式来完成。相反，全局禁止激活器servlet完全是针对具体机器的，事实上有的服务器（如ServletExec）没有这样的选择。下面的讨论对每个Web应用重新映射/servlet/ URL模式的策略。后面提供在Tomcat中全局禁止激活器servlet的详细内容。<br />4.1 重新映射/servlet/URL模式<br />在一个特定的Web应用中禁止以</font>
		<a href="http://host/webAppPrefix/servlet/" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/</font>
		</a>
		<font size="2">开始的URL的处理非常简单。所需做的事情就是建立一个错误消息servlet，并使用前一节讨论的url-pattern元素将所有匹配请求转向该 servlet。只要简单地使用：<br />&lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br />作为servlet-mapping元素中的模式即可。<br />例如，程序清单5-5给出了将SorryServlet servlet（程序清单5-6）与所有以</font>
		<a href="http://host/webAppPrefix/servlet/" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/</font>
		</a>
		<font size="2">开头的URL相关联的部署描述符文件的一部分。<br /><br />程序清单5-5 web.xml（说明JSP页命名的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
		<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target="_blank">
				<font size="2">http://java.sun.com/dtd/web-app_2_3.dtd</font>
		</a>
		<font size="2">"&gt;<br /><br />&lt;web-app&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Sorry&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;moreservlets.SorryServlet&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt; Sorry &lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;!-- ... --&gt;<br />&lt;/web-app&gt;<br /><br /><br />程序清单5-6 SorryServlet.java<br />package moreservlets;<br /><br />import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br /><br />/** Simple servlet used to give error messages to<br />* users who try to access default servlet URLs<br />* (i.e., </font>
		<a href="http://host/webAppPrefix/servlet/ServletName" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/ServletName</font>
		</a>
		<font size="2">)<br />* in Web applications that have disabled this<br />* behavior.<br />* &lt;P&gt;<br />* Taken from More Servlets and JavaServer Pages<br />* from Prentice Hall and Sun Microsystems Press,<br />* </font>
		<a href="http://www.moreservlets.com/." target="_blank">
				<font size="2">http://www.moreservlets.com/.</font>
		</a>
		<br />
		<font size="2">* © 2002 Marty Hall; may be freely used or adapted.<br />*/<br /><br />public class SorryServlet extends HttpServlet {<br />public void doGet(HttpServletRequest request,<br />HttpServletResponse response)<br />throws ServletException, IOException {<br />response.setContentType("text/html");<br />PrintWriter out = response.getWriter();<br />String title = "Invoker Servlet Disabled.";<br />out.println(ServletUtilities.headWithTitle(title) +<br />"&lt;BODY BGCOLOR=\"#FDF5E6\"&gt;\n" +<br />"&lt;H2&gt;" + title + "&lt;/H2&gt;\n" +<br />"Sorry, access to servlets by means of\n" +<br />"URLs that begin with\n" +<br />"</font>
		<a href="http://host/webAppPrefix/servlet/" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/</font>
		</a>
		<font size="2">\n" +<br />"has been disabled.\n" + <br />"&lt;/BODY&gt;&lt;/HTML&gt;");<br />}<br /><br />public void doPost(HttpServletRequest request,<br />HttpServletResponse response)<br />throws ServletException, IOException {<br />doGet(request, response);<br />}<br />}<br /><br /><br />4.2 全局禁止激活器：Tomcat<br />Tomcat 4中用来关闭缺省URL的方法与Tomcat 3中所用的很不相同。下面介绍这两种方法：<br />1．禁止激活器： Tomcat 4<br />Tomcat 4用与前面相同的方法关闭激活器servlet，即利用web.xml中的url-mapping元素进行关闭。不同之处在于Tomcat使用了放在 install_dir/conf中的一个服务器专用的全局web.xml文件，而前面使用的是存放在每个Web应用的WEB-INF目录中的标准 web.xml文件。<br />因此，为了在Tomcat 4中关闭激活器servlet，只需在install_dir/conf/web.xml中简单地注释出/servlet/* URL映射项即可，如下所示：<br />&lt;!-- <br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;invoker&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />--&gt;<br />再次提醒，应该注意这个项是位于存放在install_dir/conf的Tomcat专用的web.xml文件中的，此文件不是存放在每个Web应用的WEB-INF目录中的标准web.xml。<br />2．禁止激活器：Tomcat3<br />在Apache Tomcat的版本3中，通过在install_dir/conf/server.xml中注释出InvokerInterceptor项全局禁止缺省 servlet URL。例如，下面是禁止使用缺省servlet URL的server.xml文件的一部分。<br />&lt;!-- <br />&lt;RequsetInterceptor <br />className="org.apache.tomcat.request.InvokerInterceptor"<br />debug="0" prefix="/servlet/" /&gt;<br />--&gt;<br /><br />5 初始化和预装载servlet与JSP页面<br /><br />这里讨论控制servlet和JSP页面的启动行为的方法。特别是，说明了怎样分配初始化参数以及怎样更改服务器生存期中装载servlet和JSP页面的时刻。<br />5.1 分配servlet初始化参数<br />利用init-param元素向servlet提供初始化参数，init-param元素具有param-name和param-value子元素。例如，在下面的例子中，如果initServlet servlet是利用它的注册名（InitTest）访问的，它将能够从其方法中调用getServletConfig(). getInitParameter("param1")获得"Value 1"，调用getServletConfig().getInitParameter("param2")获得"2"。<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;InitTest&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;moreservlets.InitServlet&lt;/servlet-class&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;param1&lt;/param-name&gt;<br />&lt;param-value&gt;value1&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;param2&lt;/param-name&gt;<br />&lt;param-value&gt;2&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;/servlet&gt;<br />在涉及初始化参数时，有几点需要注意：<br />l 返回值。GetInitParameter的返回值总是一个String。因此，在前一个例子中，可对param2使用Integer.parseInt获得一个int。<br />l JSP中的初始化。JSP页面使用jspInit而不是init。JSP页面还需要使用jsp-file元素代替servlet-class。<br />l 缺省URL。初始化参数只在通过它们的注册名或与它们注册名相关的定制URL模式访问Servlet时可以使用。因此，在这个例子中，param1和 param2初始化参数将能够在使用URL </font>
		<a href="http://host/webAppPrefix/servlet/InitTest" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/InitTest</font>
		</a>
		<font size="2">时可用，但在使用URL </font>
		<a href="http://host/webAppPrefix/servlet/myPackage.InitServlet" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/myPackage.InitServlet</font>
		</a>
		<font size="2">时不能使用。<br />例如，程序清单5-7给出一个名为InitServlet的简单servlet，它使用init方法设置firstName和emailAddress字段。程序清单5-8给出分配名称InitTest给servlet的web.xml文件。<br />程序清单5-7 InitServlet.java<br />package moreservlets;<br /><br />import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br /><br />/** Simple servlet used to illustrate servlet<br />* initialization parameters.<br />* &lt;P&gt;<br />* Taken from More Servlets and JavaServer Pages<br />* from Prentice Hall and Sun Microsystems Press,<br />* </font>
		<a href="http://www.moreservlets.com/." target="_blank">
				<font size="2">http://www.moreservlets.com/.</font>
		</a>
		<br />
		<font size="2">* © 2002 Marty Hall; may be freely used or adapted.<br />*/<br /><br />public class InitServlet extends HttpServlet {<br />private String firstName, emailAddress;<br /><br />public void init() {<br />ServletConfig config = getServletConfig();<br />firstName = config.getInitParameter("firstName");<br />emailAddress = config.getInitParameter("emailAddress");<br />}<br /><br />public void doGet(HttpServletRequest request,<br />HttpServletResponse response)<br />throws ServletException, IOException {<br />response.setContentType("text/html");<br />PrintWriter out = response.getWriter();<br />String uri = request.getRequestURI();<br />out.println(ServletUtilities.headWithTitle("Init Servlet") +<br />"&lt;BODY BGCOLOR=\"#FDF5E6\"&gt;\n" +<br />"&lt;H2&gt;Init Parameters:&lt;/H2&gt;\n" +<br />"&lt;UL&gt;\n" +<br />"&lt;LI&gt;First name: " + firstName + "\n" +<br />"&lt;LI&gt;Email address: " + emailAddress + "\n" +<br />"&lt;/UL&gt;\n" + <br />"&lt;/BODY&gt;&lt;/HTML&gt;");<br />}<br />}<br /><br /><br />程序清单5-8 web.xml（说明初始化参数的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
		<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target="_blank">
				<font size="2">http://java.sun.com/dtd/web-app_2_3.dtd</font>
		</a>
		<font size="2">"&gt;<br /><br />&lt;web-app&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;InitTest&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;moreservlets.InitServlet&lt;/servlet-class&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;firstName&lt;/param-name&gt;<br />&lt;param-value&gt;Larry&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;emailAddress&lt;/param-name&gt;<br />&lt;param-value&gt;</font>
		<a href="mailto:Ellison@Microsoft.com">
				<font size="2">Ellison@Microsoft.com</font>
		</a>
		<font size="2">&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;/web-app&gt;<br /><br />5.2 分配JSP初始化参数<br />给JSP页面提供初始化参数在三个方面不同于给servlet提供初始化参数。<br />1）使用jsp-file而不是servlet-class。因此，WEB-INF/web.xml文件的servlet元素如下所示：<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br />&lt;jsp-file&gt;/RealPage.jsp&lt;/jsp-file&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;...&lt;/param-name&gt;<br />&lt;param-value&gt;...&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />...<br />&lt;/servlet&gt;<br />2) 几乎总是分配一个明确的URL模式。对servlet，一般相应地使用以</font>
		<a href="http://host/webAppPrefix/servlet/" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/</font>
		</a>
		<font size="2">开始的缺省URL。只需记住，使用注册名而不是原名称即可。这对于JSP页面在技术上也是合法的。例如，在上面给出的例子中，可用URL </font>
		<a href="http://host/webAppPrefix/servlet/PageName" target="_blank">
				<font size="2">http://host/webAppPrefix/servlet/PageName</font>
		</a>
		<font size="2">访问RealPage.jsp的对初始化参数具有访问权的版本。但在用于JSP页面时，许多用户似乎不喜欢应用常规的servlet的URL。此外，如果 JSP页面位于服务器为其提供了目录清单的目录中（如，一个既没有index.html也没有index.jsp文件的目录），则用户可能会连接到此 JSP页面，单击它，从而意外地激活未初始化的页面。因此，好的办法是使用url-pattern（5.3节）将JSP页面的原URL与注册的 servlet名相关联。这样，客户机可使用JSP页面的普通名称，但仍然激活定制的版本。例如，给定来自项目1的servlet定义，可使用下面的 servlet-mapping定义：<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/RealPage.jsp&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />3）JSP页使用jspInit而不是init。自动从JSP页面建立的servlet或许已经使用了inti方法。因此，使用JSP声明提供一个init方法是不合法的，必须制定jspInit方法。<br />为了说明初始化JSP页面的过程，程序清单5-9给出了一个名为InitPage.jsp的JSP页面，它包含一个jspInit方法且放置于 deployDemo Web应用层次结构的顶层。一般，</font>
		<a href="http://host/deployDemo/InitPage.jsp" target="_blank">
				<font size="2">http://host/deployDemo/InitPage.jsp</font>
		</a>
		<font size="2">形式的URL将激活此页面的不具有初始化参数访问权的版本，从而将对firstName和emailAddress变量显示null。但是， web.xml文件（程序清单5-10）分配了一个注册名，然后将该注册名与URL模式/InitPage.jsp相关联。<br /><br />程序清单5-9 InitPage.jsp<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;<br />&lt;HTML&gt;<br />&lt;HEAD&gt;&lt;TITLE&gt;JSP Init Test&lt;/TITLE&gt;&lt;/HEAD&gt;<br />&lt;BODY BGCOLOR="#FDF5E6"&gt;<br />&lt;H2&gt;Init Parameters:&lt;/H2&gt;<br />&lt;UL&gt;<br />&lt;LI&gt;First name: &lt;%= firstName %&gt;<br />&lt;LI&gt;Email address: &lt;%= emailAddress %&gt;<br />&lt;/UL&gt;<br />&lt;/BODY&gt;&lt;/HTML&gt;<br />&lt;%!<br />private String firstName, emailAddress;<br /><br />public void jspInit() {<br />ServletConfig config = getServletConfig();<br />firstName = config.getInitParameter("firstName");<br />emailAddress = config.getInitParameter("emailAddress");<br />}<br />%&gt;<br /><br /><br />程序清单5-10 web.xml（说明JSP页面的init参数的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
		<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target="_blank">
				<font size="2">http://java.sun.com/dtd/web-app_2_3.dtd</font>
		</a>
		<font size="2">"&gt;<br /><br />&lt;web-app&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;InitPage&lt;/servlet-name&gt;<br />&lt;jsp-file&gt;/InitPage.jsp&lt;/jsp-file&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;firstName&lt;/param-name&gt;<br />&lt;param-value&gt;Bill&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;emailAddress&lt;/param-name&gt;<br />&lt;param-value&gt;</font>
		<a href="mailto:gates@oracle.com">
				<font size="2">gates@oracle.com</font>
		</a>
		<font size="2">&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt; <br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt; InitPage&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/InitPage.jsp&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;!-- ... --&gt;<br />&lt;/web-app&gt;<br /><br /><br />5.3 提供应用范围内的初始化参数<br />一般，对单个地servlet或JSP页面分配初始化参数。指定的servlet或JSP页面利用ServletConfig的getInitParameter方法读取这些参数。但是，在某些情形下，希望提供可由任意servlet或JSP页面借助ServletContext的getInitParameter方法读取的系统范围内的初始化参数。<br />可利用context-param元素声明这些系统范围内的初始化值。context-param元素应该包含param-name、param-value以及可选的description子元素，如下所示：<br />&lt;context-param&gt;<br />&lt;param-name&gt;support-email&lt;/param-name&gt;<br />&lt;param-value&gt;</font>
		<a href="mailto:blackhole@mycompany.com">
				<font size="2">blackhole@mycompany.com</font>
		</a>
		<font size="2">&lt;/param-value&gt;<br />&lt;/context-param&gt;<br />可回忆一下，为了保证可移植性，web.xml内的元素必须以正确的次序声明。但这里应该注意，context-param元素必须出现任意与文档有关的元素（icon、display-name或description）之后及filter、filter-mapping、listener或 servlet元素之前。<br />5.4 在服务器启动时装载servlet<br />假如servlet或JSP页面有一个要花很长时间执行的init （servlet）或jspInit（JSP）方法。例如，假如init或jspInit方法从某个数据库或ResourceBundle查找产量。这种情况下，在第一个客户机请求时装载servlet的缺省行为将对第一个客户机产生较长时间的延迟。因此，可利用servlet的load-on- startup元素规定服务器在第一次启动时装载servlet。下面是一个例子。<br />&lt;servlet&gt;<br />&lt;servlet-name&gt; … &lt;/servlet-name&gt;<br />&lt;servlet-class&gt; … &lt;/servlet-class&gt; &lt;!-- Or jsp-file --&gt;<br />&lt;load-on-startup/&gt;<br />&lt;/servlet&gt;<br />可以为此元素体提供一个整数而不是使用一个空的load-on-startup。想法是服务器应该在装载较大数目的servlet或JSP页面之前装载较少数目的servlet或JSP页面。例如，下面的servlet项（放置在Web应用的WEB-INF目录下的web.xml文件中的web-app元素内）将指示服务器首先装载和初始化SearchServlet，然后装载和初始化由位于Web应用的result目录中的index.jsp文件产生的 servlet。<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Search&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;myPackage.SearchServlet&lt;/servlet-class&gt; &lt;!-- Or jsp-file --&gt;<br />&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />&lt;/servlet&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Results&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;/results/index.jsp&lt;/servlet-class&gt; &lt;!-- Or jsp-file --&gt;<br />&lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br />&lt;/servlet&gt;<br /><br />6 声明过滤器<br /><br />servlet版本2.3引入了过滤器的概念。虽然所有支持servlet API版本2.3的服务器都支持过滤器，但为了使用与过滤器有关的元素，必须在web.xml中使用版本2.3的DTD。<br />过滤器可截取和修改进入一个servlet或JSP页面的请求或从一个servlet或JSP页面发出的相应。在执行一个servlet或JSP页面之前，必须执行第一个相关的过滤器的doFilter方法。在该过滤器对其FilterChain对象调用doFilter时，执行链中的下一个过滤器。如果没有其他过滤器，servlet或JSP页面被执行。过滤器具有对到来的ServletRequest对象的全部访问权，因此，它们可以查看客户机名、查找到来的cookie等。为了访问servlet或JSP页面的输出，过滤器可将响应对象包裹在一个替身对象（stand-in object）中，比方说把输出累加到一个缓冲区。在调用FilterChain对象的doFilter方法之后，过滤器可检查缓冲区，如有必要，就对它进行修改，然后传送到客户机。<br />例如，程序清单5-11帝国难以了一个简单的过滤器，只要访问相关的servlet或JSP页面，它就截取请求并在标准输出上打印一个报告（开发过程中在桌面系统上运行时，大多数服务器都可以使用这个过滤器）。<br /><br />程序清单5-11 ReportFilter.java<br />package moreservlets;<br /><br />import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br />import java.util.*;<br /><br />/** Simple filter that prints a report on the standard output <br />* whenever the associated servlet or JSP page is accessed.<br />* &lt;P&gt;<br />* Taken from More Servlets and JavaServer Pages<br />* from Prentice Hall and Sun Microsystems Press,<br />* </font>
		<a href="http://www.moreservlets.com/." target="_blank">
				<font size="2">http://www.moreservlets.com/.</font>
		</a>
		<br />
		<font size="2">* © 2002 Marty Hall; may be freely used or adapted.<br />*/<br /><br />public class ReportFilter implements Filter {<br />public void doFilter(ServletRequest request,<br />ServletResponse response,<br />FilterChain chain)<br />throws ServletException, IOException {<br />HttpServletRequest req = (HttpServletRequest)request;<br />System.out.println(req.getRemoteHost() +<br />" tried to access " +<br />req.getRequestURL() +<br />" on " + new Date() + ".");<br />chain.doFilter(request,response);<br />}<br /><br />public void init(FilterConfig config)<br />throws ServletException {<br />}<br /><br />public void destroy() {}<br />}<br /><br />一旦建立了一个过滤器，可以在web.xml中利用filter元素以及filter-name（任意名称）、file-class（完全限定的类名）和（可选的）init-params子元素声明它。请注意，元素在web.xml的web-app元素中出现的次序不是任意的；允许服务器（但不是必需的）强制所需的次序，并且实际中有些服务器也是这样做的。但这里要注意，所有filter元素必须出现在任意filter-mapping元素之前， filter-mapping元素又必须出现在所有servlet或servlet-mapping元素之前。<br />例如，给定上述的ReportFilter类，可在web.xml中作出下面的filter声明。它把名称Reporter与实际的类ReportFilter（位于moreservlets程序包中）相关联。<br />&lt;filter&gt;<br />&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br />&lt;filter-class&gt;moresevlets.ReportFilter&lt;/filter-class&gt;<br />&lt;/filter&gt;<br />一旦命名了一个过滤器，可利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。关于此项工作有两种选择。<br />首先，可使用filter-name和servlet-name子元素把此过滤器与一个特定的servlet名（此servlet名必须稍后在相同的 web.xml文件中使用servlet元素声明）关联。例如，下面的程序片断指示系统只要利用一个定制的URL访问名为SomeServletName 的servlet或JSP页面，就运行名为Reporter的过滤器。<br />&lt;filter-mapping&gt;<br />&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br />&lt;servlet-name&gt;SomeServletName&lt;/servlet-name&gt;<br />&lt;/filter-mapping&gt;<br />其次，可利用filter-name和url-pattern子元素将过滤器与一组servlet、JSP页面或静态内容相关联。例如，相面的程序片段指示系统只要访问Web应用中的任意URL，就运行名为Reporter的过滤器。<br />&lt;filter-mapping&gt;<br />&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br />&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br />例如，程序清单5-12给出了将ReportFilter过滤器与名为PageName的servlet相关联的web.xml文件的一部分。名字 PageName依次又与一个名为TestPage.jsp的JSP页面以及以模式http: //host/webAppPrefix/UrlTest2/ 开头的URL相关联。TestPage.jsp的源代码已经JSP页面命名的谈论在前面的3节"分配名称和定制的URL"中给出。事实上，程序清单5- 12中的servlet和servlet-name项从该节原封不动地拿过来的。给定这些web.xml项，可看到下面的标准输出形式的调试报告（换行是为了容易阅读）。<br />audit.irs.gov tried to access <br /></font>
		<a href="http://mycompany.com/deployDemo/UrlTest2/business/tax-plan.html" target="_blank">
				<font size="2">http://mycompany.com/deployDemo/UrlTest2/business/tax-plan.html</font>
		</a>
		<br />
		<font size="2">on Tue Dec 25 13:12:29 EDT 2001.<br /><br />程序清单5-12 Web.xml（说明filter用法的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
		<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target="_blank">
				<font size="2">http://java.sun.com/dtd/web-app_2_3.dtd</font>
		</a>
		<font size="2">"&gt;<br /><br />&lt;web-app&gt;<br />&lt;filter&gt;<br />&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br />&lt;filter-class&gt;moresevlets.ReportFilter&lt;/filter-class&gt;<br />&lt;/filter&gt;<br />&lt;!-- ... --&gt;<br />&lt;filter-mapping&gt;<br />&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br />&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br />&lt;/filter-mapping&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br />&lt;jsp-file&gt;/RealPage.jsp&lt;/jsp-file&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt; PageName &lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/UrlTest2/*&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;!-- ... --&gt;<br />&lt;/web-app&gt;<br /><br /><br />7 指定欢迎页<br /><br />假如用户提供了一个像http: //host/webAppPrefix/directoryName/ 这样的包含一个目录名但没有包含文件名的URL，会发生什么事情呢？用户能得到一个目录表？一个错误？还是标准文件的内容？如果得到标准文件内容，是 index.html、index.jsp、default.html、default.htm或别的什么东西呢？<br />Welcome-file-list 元素及其辅助的welcome-file元素解决了这个模糊的问题。例如，下面的web.xml项指出，如果一个URL给出一个目录名但未给出文件名，服务器应该首先试用index.jsp，然后再试用index.html。如果两者都没有找到，则结果有赖于所用的服务器（如一个目录列表）。<br />&lt;welcome-file-list&gt;<br />&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />&lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br />&lt;/welcome-file-list&gt;<br />虽然许多服务器缺省遵循这种行为，但不一定必须这样。因此，明确地使用welcom-file-list保证可移植性是一种良好的习惯。<br /><br />8 指定处理错误的页面<br /><br />现在我了解到，你在开发servlet和JSP页面时从不会犯错误，而且你的所有页面是那样的清晰，一般的程序员都不会被它们的搞糊涂。但是，是人总会犯错误的，用户可能会提供不合规定的参数，使用不正确的URL或者不能提供必需的表单字段值。除此之外，其它开发人员可能不那么细心，他们应该有些工具来克服自己的不足。<br />error-page元素就是用来克服这些问题的。它有两个可能的子元素，分别是：error-code和exception- type。第一个子元素error-code指出在给定的HTTP错误代码出现时使用的URL。第二个子元素excpetion-type指出在出现某个给定的Java异常但未捕捉到时使用的URL。error-code和exception-type都利用location元素指出相应的URL。此 URL必须以/开始。location所指出的位置处的页面可通过查找HttpServletRequest对象的两个专门的属性来访问关于错误的信息，这两个属性分别是：javax.servlet.error.status_code和javax.servlet.error.message。<br />可回忆一下，在web.xml内以正确的次序声明web-app的子元素很重要。这里只要记住，error-page出现在web.xml文件的末尾附近，servlet、servlet-name和welcome-file-list之后即可。<br /><br />8.1 error-code元素<br />为了更好地了解error-code元素的值，可考虑一下如果不正确地输入文件名，大多数站点会作出什么反映。这样做一般会出现一个404错误信息，它表示不能找到该文件，但几乎没提供更多有用的信息。另一方面，可以试一下在</font>
		<a href="http://www.microsoft.com/" target="_blank">
				<font size="2">www.microsoft.com</font>
		</a>
		<font size="2">、</font>
		<a href="http://www.ibm.com/" target="_blank">
				<font size="2">www.ibm.com</font>
		</a>
		<font size="2">处或者特别是在</font>
		<a href="http://www.bea.com/" target="_blank">
				<font size="2">www.bea.com</font>
		</a>
		<font size="2">处输出未知的文件名。这是会得出有用的消息，这些消息提供可选择的位置，以便查找感兴趣的页面。提供这样有用的错误页面对于Web应用来说是很有价值得。事实上rm-error-page子元素）。由form-login-page给出的HTML表单必须具有一个j_security_check的 ACTION属性、一个名为j_username的用户名文本字段以及一个名为j_password的口令字段。<br />例如，程序清单5-19指示服务器使用基于表单的验证。Web应用的顶层目录中的一个名为login.jsp的页面将收集用户名和口令，并且失败的登陆将由相同目录中名为login-error.jsp的页面报告。<br /><br />程序清单5-19 web.xml（说明login-config的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
		<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target="_blank">
				<font size="2">http://java.sun.com/dtd/web-app_2_3.dtd</font>
		</a>
		<font size="2">"&gt;<br /><br />&lt;web-app&gt;<br />&lt;!-- ... --&gt;<br />&lt;security-constraint&gt; ... &lt;/security-constraint&gt;<br />&lt;login-config&gt;<br />&lt;auth-method&gt; FORM &lt;/auth-method&gt;<br />&lt;form-login-config&gt;<br />&lt;form-login-page&gt;/login.jsp&lt;/form-login-page&gt;<br />&lt;form-error-page&gt;/login-error.jsp&lt;/form-error-page&gt;<br />&lt;/form-login-config&gt;<br />&lt;/login-config&gt;<br />&lt;!-- ... --&gt;<br />&lt;/web-app&gt;<br /><br /><br />9.2 限制对Web资源的访问<br />现在，可以指示服务器使用何种验证方法了。"了不起，"你说道，"除非我能指定一个来收到保护的 URL，否则没有多大用处。"没错。指出这些URL并说明他们应该得到何种保护正是security-constriaint元素的用途。此元素在 web.xml中应该出现在login-config的紧前面。它包含是个可能的子元素，分别是：web-resource-collection、 auth-constraint、user-data-constraint和display-name。下面各小节对它们进行介绍。<br />l web-resource-collection<br />此元素确定应该保护的资源。所有security-constraint元素都必须包含至少一个web-resource-collection项。此元素由一个给出任意标识名称的web-resource-name元素、一个确定应该保护的URL的url-pattern元素、一个指出此保护所适用的 HTTP命令（GET、POST等，缺省为所有方法）的http-method元素和一个提供资料的可选description元素组成。例如，下面的 Web-resource-collection项（在security-constratint元素内）指出Web应用的proprietary目录中所有文档应该受到保护。<br />&lt;security-constraint&gt;<br />&lt;web-resource-coolection&gt;<br />&lt;web-resource-name&gt;Proprietary&lt;/web-resource-name&gt;<br />&lt;url-pattern&gt;/propritary/*&lt;/url-pattern&gt;<br />&lt;/web-resource-coolection&gt;<br />&lt;!-- ... --&gt;<br />&lt;/security-constraint&gt;<br />重要的是应该注意到，url-pattern仅适用于直接访问这些资源的客户机。特别是，它不适合于通过MVC体系结构利用 RequestDispatcher来访问的页面，或者不适合于利用类似jsp:forward的手段来访问的页面。这种不匀称如果利用得当的话很有好处。例如，servlet可利用MVC体系结构查找数据，把它放到bean中，发送请求到从bean中提取数据的JSP页面并显示它。我们希望保证决不直接访问受保护的JSP页面，而只是通过建立该页面将使用的bean的servlet来访问它。url-pattern和auth-contraint元素可通过声明不允许任何用户直接访问JSP页面来提供这种保证。但是，这种不匀称的行为可能让开发人员放松警惕，使他们偶然对应受保护的资源提供不受限制的访问。 <br />l auth-constraint<br />尽管web-resource-collention元素质出了哪些URL应该受到保护，但是auth-constraint元素却指出哪些用户应该具有受保护资源的访问权。此元素应该包含一个或多个标识具有访问权限的用户类别role- name元素，以及包含（可选）一个描述角色的description元素。例如，下面web.xml中的security-constraint元素部门规定只有指定为Administrator或Big Kahuna（或两者）的用户具有指定资源的访问权。<br />&lt;security-constraint&gt;<br />&lt;web-resource-coolection&gt; ... &lt;/web-resource-coolection&gt;<br />&lt;auth-constraint&gt;<br />&lt;role-name&gt;administrator&lt;/role-name&gt;<br />&lt;role-name&gt;kahuna&lt;/role-name&gt;<br />&lt;/auth-constraint&gt;<br />&lt;/security-constraint&gt;<br />重要的是认识到，到此为止，这个过程的可移植部分结束了。服务器怎样确定哪些用户处于任何角色以及它怎样存放用户的口令，完全有赖于具体的系统。<br />例如，Tomcat使用install_dir/conf/tomcat-users.xml将用户名与角色名和口令相关联，正如下面例子中所示，它指出用户joe（口令bigshot）和jane（口令enaj）属于administrator和kahuna角色。<br />&lt;tomcat-users&gt;<br />&lt;user name="joe" password="bigshot" roles="administrator,kahuna" /&gt;<br />&lt;user name="jane" password="enaj" roles="kahuna" /&gt;<br />&lt;/tomcat-users&gt;<br />l user-data-constraint<br />这个可选的元素指出在访问相关资源时使用任何传输层保护。它必须包含一个transport-guarantee子元素（合法值为NONE、 INTEGRAL或CONFIDENTIAL），并且可选地包含一个description元素。transport-guarantee为NONE值将对所用的通讯协议不加限制。INTEGRAL值表示数据必须以一种防止截取它的人阅读它的方式传送。虽然原理上（并且在未来的HTTP版本中），在 INTEGRAL和CONFIDENTIAL之间可能会有差别，但在当前实践中，他们都只是简单地要求用SSL。例如，下面指示服务器只允许对相关资源做 HTTPS连接：<br />&lt;security-constraint&gt;<br />&lt;!-- ... --&gt;<br />&lt;user-data-constraint&gt;<br />&lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt;<br />&lt;/user-data-constraint&gt;<br />&lt;/security-constraint&gt;<br />l display-name<br />security-constraint的这个很少使用的子元素给予可能由GUI工具使用的安全约束项一个名称。<br />9.3 分配角色名<br />迄今为止，讨论已经集中到完全由容器（服务器）处理的安全问题之上了。但servlet以及JSP页面也能够处理它们自己的安全问题。<br />例如，容器可能允许用户从bigwig或bigcheese角色访问一个显示主管人员额外紧贴的页面，但只允许bigwig用户修改此页面的参数。完成这种更细致的控制的一种常见方法是调用HttpServletRequset的isUserInRole方法，并据此修改访问。<br />Servlet的 security-role-ref子元素提供出现在服务器专用口令文件中的安全角色名的一个别名。例如，假如编写了一个调用 request.isUserInRole（"boss"）的servlet，但后来该servlet被用在了一个其口令文件调用角色manager而不是boss的服务器中。下面的程序段使该servlet能够使用这两个名称中的任何一个。<br />&lt;servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;security-role-ref&gt;<br />&lt;role-name&gt;boss&lt;/role-name&gt; &lt;!-- New alias --&gt;<br />&lt;role-link&gt;manager&lt;/role-link&gt; &lt;!-- Real name --&gt;<br />&lt;/security-role-ref&gt;<br />&lt;/servlet&gt;<br />也可以在web-app内利用security-role元素提供将出现在role-name元素中的所有安全角色的一个全局列表。分别地生命角色使高级IDE容易处理安全信息。<br /><br />10 控制会话超时<br /><br />如果某个会话在一定的时间内未被访问，服务器可把它扔掉以节约内存。可利用HttpSession的setMaxInactiveInterval方法直接设置个别会话对象的超时值。如果不采用这种方法，则缺省的超时值由具体的服务器决定。但可利用session-config和session- timeout元素来给出一个适用于所有服务器的明确的超时值。超时值的单位为分钟，因此，下面的例子设置缺省会话超时值为三个小时（180分钟）。<br />&lt;session-config&gt;<br />&lt;session-timeout&gt;180&lt;/session-timeout&gt;<br />&lt;/session-config&gt;<br /><br />11 Web应用的文档化<br /><br />越来越多的开发环境开始提供servlet和JSP的直接支持。例子有Borland Jbuilder Enterprise Edition、Macromedia UltraDev、Allaire JRun Studio（写此文时，已被Macromedia收购）以及IBM VisuaAge for Java等。<br />大量的web.xml元素不仅是为服务器设计的，而且还是为可视开发环境设计的。它们包括icon、display-name和discription等。<br />可回忆一下，在web.xml内以适当地次序声明web-app子元素很重要。不过，这里只要记住icon、display-name和description是web.xml的web-app元素内的前三个合法元素即可。<br />l icon<br />icon元素指出GUI工具可用来代表Web应用的一个和两个图像文件。可利用small-icon元素指定一幅16 x 16的GIF或JPEG图像，用large-icon元素指定一幅32 x 32的图像。下面举一个例子： <br />&lt;icon&gt;<br />&lt;small-icon&gt;/images/small-book.gif&lt;/small-icon&gt;<br />&lt;large-icon&gt;/images/tome.jpg&lt;/large-icon&gt;<br />&lt;/icon&gt;<br />l display-name<br />display-name元素提供GUI工具可能会用来标记此Web应用的一个名称。下面是个例子。<br />&lt;display-name&gt;Rare Books&lt;/display-name&gt;<br />l description<br />description元素提供解释性文本，如下所示：<br />&lt;description&gt;<br />This Web application represents the store developed for<br />rare-books.com, an online bookstore specializing in rare<br />and limited-edition books.<br />&lt;/description&gt;<br /><br />12 关联文件与MIME类型<br /><br />服务器一般都具有一种让Web站点管理员将文件扩展名与媒体相关联的方法。例如，将会自动给予名为mom.jpg的文件一个image/jpeg的MIME 类型。但是，假如你的Web应用具有几个不寻常的文件，你希望保证它们在发送到客户机时分配为某种MIME类型。mime-mapping元素（具有 extension和mime-type子元素）可提供这种保证。例如，下面的代码指示服务器将application/x-fubar的MIME类型分配给所有以.foo结尾的文件。<br />&lt;mime-mapping&gt;<br />&lt;extension&gt;foo&lt;/extension&gt;<br />&lt;mime-type&gt;application/x-fubar&lt;/mime-type&gt;<br />&lt;/mime-mapping&gt;<br />或许，你的Web应用希望重载（override）标准的映射。例如，下面的代码将告诉服务器在发送到客户机时指定.ps文件作为纯文本（text/plain）而不是作为PostScript（application/postscript）。<br />&lt;mime-mapping&gt;<br />&lt;extension&gt;ps&lt;/extension&gt;<br />&lt;mime-type&gt;application/postscript&lt;/mime-type&gt;<br />&lt;/mime-mapping&gt;<br /><br /><br />13 定位TLD<br /><br />JSP taglib元素具有一个必要的uri属性，它给出一个TLD（Tag Library Descriptor）文件相对于Web应用的根的位置。TLD文件的实际名称在发布新的标签库版本时可能会改变，但我们希望避免更改所有现有JSP页面。此外，可能还希望使用保持taglib元素的简练性的一个简短的uri。这就是部署描述符文件的taglib元素派用场的所在了。Taglib包含两个子元素：taglib-uri和taglib-location。taglib-uri元素应该与用于JSP taglib元素的uri属性的东西相匹配。Taglib-location元素给出TLD文件的实际位置。例如，假如你将文件chart-tags- 1.3beta.tld放在WebApp/WEB-INF/tlds中。现在，假如web.xml在web-app元素内包含下列内容。<br />&lt;taglib&gt;<br />&lt;taglib-uri&gt;/charts.tld&lt;/taglib-uri&gt;<br />&lt;taglib-location&gt;<br />/WEB-INF/tlds/chart-tags-1.3beta.tld<br />&lt;/taglib-location&gt;<br />&lt;/taglib&gt;<br />给出这个说明后，JSP页面可通过下面的简化形式使用标签库。<br />&lt;%@ taglib uri="/charts.tld" prefix="somePrefix" %&gt;<br /><br />14 指定应用事件监听程序<br /><br />应用事件监听器程序是建立或修改servlet环境或会话对象时通知的类。它们是servlet规范的版本2.3中的新内容。这里只简单地说明用来向Web应用注册一个监听程序的web.xml的用法。<br />注册一个监听程序涉及在web.xml的web-app元素内放置一个listener元素。在listener元素内，listener-class元素列出监听程序的完整的限定类名，如下所示：<br />&lt;listener&gt;<br />&lt;listener-class&gt;package.ListenerClass&lt;/listener-class&gt;<br />&lt;/listener&gt;<br />虽然listener元素的结构很简单，但请不要忘记，必须正确地给出web-app元素内的子元素的次序。listener元素位于所有的servlet 元素之前以及所有filter-mapping元素之后。此外，因为应用生存期监听程序是serlvet规范的2.3版本中的新内容，所以必须使用 web.xml DTD的2.3版本，而不是2.2版本。<br />例如，程序清单5-20给出一个名为ContextReporter的简单的监听程序，只要Web应用的Servlet-Context建立（如装载Web应用）或消除（如服务器关闭）时，它就在标准输出上显示一条消息。程序清单5-21给出此监听程序注册所需要的web.xml文件的一部分。<br /><br />程序清单5-20 ContextReporterjava<br />package moreservlets;<br /><br />import javax.servlet.*;<br />import java.util.*;<br /><br />/** Simple listener that prints a report on the standard output <br />* when the ServletContext is created or destroyed.<br />* &lt;P&gt;<br />* Taken from More Servlets and JavaServer Pages<br />* from Prentice Hall and Sun Microsystems Press,<br />* </font>
		<a href="http://www.moreservlets.com/." target="_blank">
				<font size="2">http://www.moreservlets.com/.</font>
		</a>
		<br />
		<font size="2">* © 2002 Marty Hall; may be freely used or adapted.<br />*/<br /><br />public class ContextReporter implements ServletContextListener {<br />public void contextInitialized(ServletContextEvent event) {<br />System.out.println("Context created on " +<br />new Date() + ".");<br />}<br /><br />public void contextDestroyed(ServletContextEvent event) {<br />System.out.println("Context destroyed on " +<br />new Date() + ".");<br />}<br />}<br /><br /><br />程序清单5-21 web.xml（声明一个监听程序的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
		<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target="_blank">
				<font size="2">http://java.sun.com/dtd/web-app_2_3.dtd</font>
		</a>
		<font size="2">"&gt;<br /><br />&lt;web-app&gt;<br />&lt;!-- ... --&gt;<br />&lt;filter-mapping&gt; … &lt;/filter-mapping&gt;<br />&lt;listener&gt;<br />&lt;listener-class&gt;package.ListenerClass&lt;/listener-class&gt;<br />&lt;/listener&gt;<br />&lt;servlet&gt; ... &lt;/servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;/web-app&gt;<br /><br /><br />15 J2EE元素<br /><br />本节描述用作J2EE环境组成部分的Web应用的web.xml元素。这里将提供一个简明的介绍，详细内容可以参阅</font>
		<a href="http://java.sun.com/j2ee/j2ee-1_3-fr-spec.pdf" target="_blank">
				<font size="2">http://java.sun.com/j2ee/j2ee-1_3-fr-spec.pdf</font>
		</a>
		<font size="2">的Java 2 Plantform Enterprise Edition版本1.3规范的第5章。<br />l distributable<br />distributable 元素指出，Web应用是以这样的方式编程的：即，支持集群的服务器可安全地在多个服务器上分布Web应用。例如，一个可分布的应用必须只使用 Serializable对象作为其HttpSession对象的属性，而且必须避免用实例变量（字段）来实现持续性。distributable元素直接出现在discription元素之后，并且不包含子元素或数据，它只是一个如下的标志。<br />&lt;distributable /&gt;<br />l resource-env-ref<br />resource -env-ref元素声明一个与某个资源有关的管理对象。此元素由一个可选的description元素、一个resource-env-ref- name元素（一个相对于java:comp/env环境的JNDI名）以及一个resource-env-type元素（指定资源类型的完全限定的类），如下所示：<br />&lt;resource-env-ref&gt;<br />&lt;resource-env-ref-name&gt;<br />jms/StockQueue<br />&lt;/resource-env-ref-name&gt;<br />&lt;resource-env-ref-type&gt;<br />javax.jms.Queue<br />&lt;/resource-env-ref-type&gt;<br />&lt;/resource-env-ref&gt;<br />l env-entry<br />env -entry元素声明Web应用的环境项。它由一个可选的description元素、一个env-entry-name元素（一个相对于java: comp/env环境JNDI名）、一个env-entry-value元素（项值）以及一个env-entry-type元素（java.lang程序包中一个类型的完全限定类名，java.lang.Boolean、java.lang.String等）组成。下面是一个例子：<br />&lt;env-entry&gt;<br />&lt;env-entry-name&gt;minAmout&lt;/env-entry-name&gt;<br />&lt;env-entry-value&gt;100.00&lt;/env-entry-value&gt;<br />&lt;env-entry-type&gt;minAmout&lt;/env-entry-type&gt;<br />&lt;/env-entry&gt;<br />l ejb-ref<br />ejb -ref元素声明对一个EJB的主目录的应用。它由一个可选的description元素、一个ejb-ref-name元素（相对于java: comp/env的EJB应用）、一个ejb-ref-type元素（bean的类型，Entity或Session）、一个home元素（bean的主目录接口的完全限定名）、一个remote元素（bean的远程接口的完全限定名）以及一个可选的ejb-link元素（当前bean链接的另一个 bean的名称）组成。<br />l ejb-local-ref<br />ejb-local-ref元素声明一个EJB的本地主目录的引用。除了用local-home代替home外，此元素具有与ejb-ref元素相同的属性并以相同的方式使用。<br /></font>
<img src ="http://www.blogjava.net/jjunix/aggbug/47753.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-05-24 09:22 <a href="http://www.blogjava.net/jjunix/archive/2006/05/24/47753.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rational Test工具用途列表</title><link>http://www.blogjava.net/jjunix/archive/2006/05/20/47230.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Sat, 20 May 2006 14:38:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/05/20/47230.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/47230.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/05/20/47230.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/47230.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/47230.html</trackback:ping><description><![CDATA[Rational Test工具用途列表(内容来自互联网) <br />1.Rational Administrator——主要用于创建新的PROJECT，包括需求(RequestPro)、测试(Test Manager)、及缺陷跟踪(Clear Quest)的数据库创建并建立关联 <br />2.ClearQuest——变更管理及缺陷跟踪 <br />3.ClearQuest Maintenance Tool —— ClearQuest维护工具，主要用于创建、修改、删除ClearQuest的Connection <br />4.ClearQuest Designer —— ClearQuest维护工具,主要用于维护某一指定的Connect/Schema的用户、访问权限及其他属性定义（如缺陷等级）等维护 TestManager 测试计划制定及执行工具 <br />5.License Key Administrator Rationa——l注册管理器 <br />6.PureCoverage —— 白盒测试工具，记录代码覆盖率。不支持C++ Builder/Delphi <br />7.Purify —— 白盒测试工具，用于内存泄漏检查 <br />8.Quantify —— 白盒测试工具，用于性能瓶颈分析 <br />9.Purify Plus —— 包括以上三个工具，Purify，Quantify，PureCoverage <br />10.RequisitePro —— 需求分析工具 <br />11.Robot —— 自动测试工具，类似WINRUNNDER，加上VT可以做并发测试 <br />12.SoDA for Word —— 报表生成工具，需要VBA测试。一般不直接运行，运行后SoDA在word中增加了菜单，可以进行模板设计。 13.TestFactory —— 可靠性测试，非常耗时。 <img src ="http://www.blogjava.net/jjunix/aggbug/47230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-05-20 22:38 <a href="http://www.blogjava.net/jjunix/archive/2006/05/20/47230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>各种数据库的JDBC驱动下载及连接</title><link>http://www.blogjava.net/jjunix/archive/2006/04/21/42288.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Fri, 21 Apr 2006 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/04/21/42288.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/42288.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/04/21/42288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/42288.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/42288.html</trackback:ping><description><![CDATA[
		<span>
				<font color="#a9a9a9">本文下载地址转自</font>
				<a href="/gump/archive/2006/04/04/39125.html" target="_blank">
						<font color="#808080">甘先生Blog (点击查看原文)</font>
				</a>   <font color="#a9a9a9">剩余部分来自互联网</font></span>
		<br />
		<br />
		<table cellspacing="1" cellpadding="1" border="1">
				<tbody>
						<tr>
								<th>
										<font size="2">数 据 库</font>
								</th>
								<th>
										<font size="2">说      明</font>
								</th>
						</tr>
						<tr>
								<td>
										<font size="2">MySQL</font>
								</td>
								<td>
										<a href="http://www.mysql.com/products/connector/j/">
												<font size="2">
														<font color="#4444cc">http://www.mysql.com/products/connector/j/</font>
												</font>
										</a>
										<font size="2">Shipped. But need to download the latest for MySQL 4.1 or higher.</font>
								</td>
						</tr>
						<tr>
								<td>
										<font size="2">Oracle</font>
								</td>
								<td>
										<a href="http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html">
												<font size="2">
														<font color="#4444cc">http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html</font>
												</font>
										</a>
										<font size="2">Included.</font>
								</td>
						</tr>
						<tr>
								<td>
										<font size="2">SQL Server by jTDS</font>
								</td>
								<td>
										<font size="2">
												<a href="http://sourceforge.net/project/showfiles.php?group_id=33291">
														<font color="#4444cc">http://sourceforge.net/project/showfiles.php?group_id=33291</font>
												</a>
										</font>
										<font size="2">Included. Support Microsoft SQL Server (6.5, 7, 2000 and 2005)</font>
								</td>
						</tr>
						<tr>
								<td>
										<font size="2">Postgres</font>
								</td>
								<td>
										<a href="http://jdbc.postgresql.org/download.html">
												<font size="2">
														<font color="#4444cc">http://jdbc.postgresql.org/download.html</font>
												</font>
										</a>
										<font size="2">Included 7.3 JDBC 3</font>
								</td>
						</tr>
						<tr>
								<td>
										<font size="2">SAP DB</font>
								</td>
								<td>
										<a href="http://www.sapdb.org/sap_db_jdbc.htm">
												<font size="2">
														<font color="#4444cc">http://www.sapdb.org/sap_db_jdbc.htm</font>
												</font>
										</a>
										<font size="2">Included.</font>
								</td>
						</tr>
						<tr>
								<td>
										<font size="2">SyBase by jTDS</font>
								</td>
								<td>
										<a href="http://jtds.sourceforge.net/">
												<font size="2">
														<font color="#4444cc">http://jtds.sourceforge.net/</font>
												</font>
										</a>
										<font size="2">Included. Support Sybase (10, 11, 12)</font>
								</td>
						</tr>
				</tbody>
		</table>
		<div>
		</div>
		<div>
				<br />
				<br />
				<font color="#a9a9a9">以下内容来自互联网<br /></font>
				<br />1. MySQL(<a href="http://www.mysql.com">http://www.mysql.com</a>) mysql-connector-java-2.0.14-bin.jar ;<br />  Class.forName( "org.gjt.mm.mysql.Driver" );<br />  cn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", sUsr, sPwd ); <br />2. PostgreSQL(<a href="http://www.de.postgresql.org">http://www.de.postgresql.org</a>) pgjdbc2.jar ;<br />  Class.forName( "org.postgresql.Driver" ); <br />  cn = DriverManager.getConnection( "jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName", sUsr, sPwd ); <br />3. Oracle(<a href="http://www.oracle.com/ip/deploy/database/oracle9i/">http://www.oracle.com/ip/deploy/database/oracle9i/</a>) classes12.zip ;<br />  Class.forName( "oracle.jdbc.driver.OracleDriver" ); <br />  cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd ); <br />4. Sybase(<a href="http://jtds.sourceforge.net"><font color="#000080">http://jtds.sourceforge.net</font></a>) jconn2.jar ;<br />  Class.forName( "com.sybase.jdbc2.jdbc.SybDriver" ); <br />  cn = DriverManager.getConnection( "jdbc:sybase:Tds:MyDbComputerNameOrIP:2638", sUsr, sPwd ); <br />  //(Default-Username/Password: "dba"/"sql") <br />5. Microsoft SQLServer(<a href="http://jtds.sourceforge.net"><font color="#000080">http://jtds.sourceforge.net</font></a>) ;<br />  Class.forName( "net.sourceforge.jtds.jdbc.Driver" ); <br />  cn = DriverManager.getConnection( "jdbc:jtds:sqlserver://MyDbComputerNameOrIP:1433/master", sUsr, sPwd ); <br />6. Microsoft SQLServer(<a href="http://www.microsoft.com">http://www.microsoft.com</a>) ;<br />  Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" ); <br />  cn = DriverManager.getConnection( "jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;databaseName=master", sUsr, sPwd ); <br />7. ODBC <br />  Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); <br />  Connection cn = DriverManager.getConnection( "jdbc:odbc:" + sDsn, sUsr, sPwd ); <br />8.DB2 Class.forName("com.ibm.db2.jdbc.net.DB2Driver"); <br />  String url="jdbc:db2://192.9.200.108:6789/SAMPLE" <br />  cn = DriverManager.getConnection( url, sUsr, sPwd ); <br />9.access由于access并不是作为一项服务运行，所以url的方法对他不适用。access可以通过odbc，也可以通过服务器映射路径的形式找到.mdb文件,参见<a href="http://rmijdbc.objectweb.org/Access/access.html">http://rmijdbc.objectweb.org/Access/access.html</a><br /><br /></div>
<img src ="http://www.blogjava.net/jjunix/aggbug/42288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-04-21 11:20 <a href="http://www.blogjava.net/jjunix/archive/2006/04/21/42288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几个非常不错的关于Java代码查询的网站</title><link>http://www.blogjava.net/jjunix/archive/2006/04/14/41158.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Fri, 14 Apr 2006 11:49:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/04/14/41158.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/41158.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/04/14/41158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/41158.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/41158.html</trackback:ping><description><![CDATA[
		<p>1. <a href="http://www.java2s.com/" target="_blank"><font color="#000080">Java2s</font></a><font color="#000080"></font> <a href="http://www.java2s.com/" target="_blank"><font color="#000080">http://www.java2s.com</font></a><br />按语言除了Java,这个网站还有JavaScript DHTML,C#/C Sharp,C/ANSI-C,SQL, MySQL等类.</p>
		<p>按类型包含三类 -- Example,Products,Articles,具有搜索功能,方便易用.</p>
		<p>2. <a href="http://www.codezoo.com/" target="_blank"><font color="#000080">CodeZoo</font></a><font color="#000080"></font> <a href="http://www.codezoo.com/" target="_blank"><font color="#000080">http://www.codezoo.com</font></a><br />O'Reily的,包含Java,Ruby,Python.<br /><br />3 . <a href="http://www.koders.com/" target="_blank"><font color="#000080">Koders</font></a> <font color="#000080"></font><a href="http://www.koders.com/" target="_blank"><font color="#000080">http://www.koders.com</font></a><br />代码搜索网站,输入代码关键字,即对他的项目搜索.多种语言.<br /><br />4 . <a href="http://www.java201.com/" target="_blank"><font color="#000080">Resources for Java server-side developers</font></a><font color="#000080"></font> <a href="http://www.java201.com/" target="_blank"><font color="#000080">http://www.java201.com</font></a><br />纯Java的而且,分类很细,重要的是还有Free Java Books!!!</p>
<img src ="http://www.blogjava.net/jjunix/aggbug/41158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-04-14 19:49 <a href="http://www.blogjava.net/jjunix/archive/2006/04/14/41158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>毕业设计正式开始了</title><link>http://www.blogjava.net/jjunix/archive/2006/04/03/38943.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Mon, 03 Apr 2006 07:29:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/04/03/38943.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/38943.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/04/03/38943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/38943.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/38943.html</trackback:ping><description><![CDATA[
		<span style="FONT-WEIGHT: bold; FONT-SIZE: 37px; COLOR: #006400">今</span>天开始做毕业设计了,我的题目是关于RSS解析,初步打算采用C/S结构,Java界面,不打算用swt,而是准备用Mustang版的Swing,利用Beta版试了试界面效果,确实让人兴奋! 如果时间允许的话再做一个B/S的实现,两者共同存在,同步Feed资源. 另外关于B/S的那部分, RSS解析是主要部分,除此之外还有其他一些功能,更像是一个Web2.0的桌面系统.<img height="20" src="http://www.blogjava.net/Emoticons/QQ/shifty.gif" width="20" border="0" /><img src ="http://www.blogjava.net/jjunix/aggbug/38943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-04-03 15:29 <a href="http://www.blogjava.net/jjunix/archive/2006/04/03/38943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>以最简单的代码展现 Ajax</title><link>http://www.blogjava.net/jjunix/archive/2006/03/27/37547.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Mon, 27 Mar 2006 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/03/27/37547.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/37547.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/03/27/37547.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/37547.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/37547.html</trackback:ping><description><![CDATA[最近看了些关于Ajax一些基础的东西,感觉也没有什么新鲜的技术,主要是JavaScript和XML,可能是我了解的太少吧.另外关于XMLHttpRequest可以参考网站: <a href="http://www.xmlhttp.cn/" target="_blank">http://www.xmlhttp.cn</a><br />下面我演示一下我自己编写的一段代码:<br />1) 准备一个Servlet,当请求该Servlet时,它将返回以HTML格式返回"Hello World!"字样.<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 id="Codehighlighter1_44_423_Open_Image" onclick="this.style.display='none'; Codehighlighter1_44_423_Open_Text.style.display='none'; Codehighlighter1_44_423_Closed_Image.style.display='inline'; Codehighlighter1_44_423_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_44_423_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_44_423_Closed_Text.style.display='none'; Codehighlighter1_44_423_Open_Image.style.display='inline'; Codehighlighter1_44_423_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Hello </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> HttpServlet </span><span id="Codehighlighter1_44_423_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_44_423_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> doGet(HttpServletRequest req, HttpServletResponse res)<br /><img id="Codehighlighter1_154_183_Open_Image" onclick="this.style.display='none'; Codehighlighter1_154_183_Open_Text.style.display='none'; Codehighlighter1_154_183_Closed_Image.style.display='inline'; Codehighlighter1_154_183_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_154_183_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_154_183_Closed_Text.style.display='none'; Codehighlighter1_154_183_Open_Image.style.display='inline'; Codehighlighter1_154_183_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> ServletException, IOException </span><span id="Codehighlighter1_154_183_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_154_183_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.doPost(req, res);<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/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> doPost(HttpServletRequest req, HttpServletResponse res)<br /><img id="Codehighlighter1_294_421_Open_Image" onclick="this.style.display='none'; Codehighlighter1_294_421_Open_Text.style.display='none'; Codehighlighter1_294_421_Closed_Image.style.display='inline'; Codehighlighter1_294_421_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_294_421_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_294_421_Closed_Text.style.display='none'; Codehighlighter1_294_421_Open_Image.style.display='inline'; Codehighlighter1_294_421_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> ServletException, IOException </span><span id="Codehighlighter1_294_421_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_294_421_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        res.setContentType(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/html</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        res.setHeader(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Cache-Control</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">no-cache</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        res.getWriter().write(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello World!</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>2)准备一个HTML文件.当点击"Order"按钮时,网页向服务器发送异步请求,请求成功则在按钮下方显示"Hello World!".<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"><span style="COLOR: #008080"> 1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Test Ajax</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id="Codehighlighter1_71_776_Open_Image" onclick="this.style.display='none'; Codehighlighter1_71_776_Open_Text.style.display='none'; Codehighlighter1_71_776_Closed_Image.style.display='inline'; Codehighlighter1_71_776_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_71_776_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_71_776_Closed_Text.style.display='none'; Codehighlighter1_71_776_Open_Image.style.display='inline'; Codehighlighter1_71_776_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script </span><span style="COLOR: #ff0000">language</span><span style="COLOR: #0000ff">="JavaScript"</span><span style="COLOR: #0000ff">&gt;</span><span id="Codehighlighter1_71_776_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_71_776_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> req;<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> url;<br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img id="Codehighlighter1_122_557_Open_Image" onclick="this.style.display='none'; Codehighlighter1_122_557_Open_Text.style.display='none'; Codehighlighter1_122_557_Closed_Image.style.display='inline'; Codehighlighter1_122_557_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_122_557_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_122_557_Closed_Text.style.display='none'; Codehighlighter1_122_557_Open_Image.style.display='inline'; Codehighlighter1_122_557_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> requestServlet() </span><span id="Codehighlighter1_122_557_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_122_557_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img id="Codehighlighter1_154_191_Open_Image" onclick="this.style.display='none'; Codehighlighter1_154_191_Open_Text.style.display='none'; Codehighlighter1_154_191_Closed_Image.style.display='inline'; Codehighlighter1_154_191_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_154_191_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_154_191_Closed_Text.style.display='none'; Codehighlighter1_154_191_Open_Image.style.display='inline'; Codehighlighter1_154_191_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> (window.XMLHttpRequest) </span><span id="Codehighlighter1_154_191_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_154_191_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                req </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> XMLHttpRequest();<br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img id="Codehighlighter1_224_279_Open_Image" onclick="this.style.display='none'; Codehighlighter1_224_279_Open_Text.style.display='none'; Codehighlighter1_224_279_Closed_Image.style.display='inline'; Codehighlighter1_224_279_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_224_279_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_224_279_Closed_Text.style.display='none'; Codehighlighter1_224_279_Open_Image.style.display='inline'; Codehighlighter1_224_279_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            }</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">else</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> (window.ActiveXObject) </span><span id="Codehighlighter1_224_279_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_224_279_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                req </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> ActiveXObject(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Microsoft.XMLHTTP</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> url </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">http://localhost:8080/ajax/HelloServlet</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">var url = "HelloServlet";    //相对,绝对地址都可以</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">            req.open(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">POST</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">, url, </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">true</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            req.setRequestHeader(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Content-Type</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">, </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">application/x-www-form-urlencoded</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            req.onreadystatechange</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">validator;<br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            req.send();<br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img id="Codehighlighter1_594_774_Open_Image" onclick="this.style.display='none'; Codehighlighter1_594_774_Open_Text.style.display='none'; Codehighlighter1_594_774_Closed_Image.style.display='inline'; Codehighlighter1_594_774_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_594_774_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_594_774_Closed_Text.style.display='none'; Codehighlighter1_594_774_Open_Image.style.display='inline'; Codehighlighter1_594_774_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> validator() </span><span id="Codehighlighter1_594_774_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_594_774_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img id="Codehighlighter1_624_770_Open_Image" onclick="this.style.display='none'; Codehighlighter1_624_770_Open_Text.style.display='none'; Codehighlighter1_624_770_Closed_Image.style.display='inline'; Codehighlighter1_624_770_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_624_770_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_624_770_Closed_Text.style.display='none'; Codehighlighter1_624_770_Open_Image.style.display='inline'; Codehighlighter1_624_770_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> (req.readystate </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">==</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">4</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">) </span><span id="Codehighlighter1_624_770_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_624_770_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img id="Codehighlighter1_653_698_Open_Image" onclick="this.style.display='none'; Codehighlighter1_653_698_Open_Text.style.display='none'; Codehighlighter1_653_698_Closed_Image.style.display='inline'; Codehighlighter1_653_698_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_653_698_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_653_698_Closed_Text.style.display='none'; Codehighlighter1_653_698_Open_Image.style.display='inline'; Codehighlighter1_653_698_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> (req.status </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">==</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">200</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">) </span><span id="Codehighlighter1_653_698_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_653_698_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    msg.innerHTML </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> req.responseText;<br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img id="Codehighlighter1_708_765_Open_Image" onclick="this.style.display='none'; Codehighlighter1_708_765_Open_Text.style.display='none'; Codehighlighter1_708_765_Closed_Image.style.display='inline'; Codehighlighter1_708_765_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_708_765_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_708_765_Closed_Text.style.display='none'; Codehighlighter1_708_765_Open_Image.style.display='inline'; Codehighlighter1_708_765_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">else</span><span id="Codehighlighter1_708_765_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_708_765_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    msg.innerHTML </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">req.status = </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> req.status;<br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    </span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000"> name</span><span style="COLOR: #0000ff">="order"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="Order"</span><span style="COLOR: #ff0000"> onClick</span><span style="COLOR: #0000ff">="requestServlet()"</span><span style="COLOR: #0000ff">/&gt;&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">span </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="msg"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">span</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>代码的8-12行用来产生一个XMLHttpRequest对象,之后调用该对象Open函数对其初始化.其中的布尔值"true"用来表明是否异步请求.情参照<a href="http://www.xmlhttp.cn/manual/open.html" target="_blank">XMLHttp.cn的注解</a>.17行<a href="http://www.xmlhttp.cn/manual/onreadystatechange.html" target="_blank">onreadystatechange</a>的意思是一旦<a href="http://www.xmlhttp.cn/manual/readystate.html" target="_blank">readyState</a>的值发生变化就会调用validator()函数.20行中<a href="http://www.xmlhttp.cn/manual/readystate.html" target="_blank">readyState</a>如果等于4表明从服务器接收数据完毕,此时可以通过responseBody,responseText或responseXML来获取完整的回应数据,不过在此动作之前最好先判断一下请求到的内容是否是你想要的内容XMLHttpRequest的成员<a href="http://www.xmlhttp.cn/manual/status.html" target="_blank">status</a>存储的是当前请求的http状态码,如果它等于200表明请求成功.最常见的错误是404代码的"Not Found"错误.要注意的是此属性必须在数据接受完毕之后,也就是说<a href="http://www.xmlhttp.cn/manual/readystate.html" target="_blank">readyState</a>等于4时才能获取.<br />  另外对于处理XML文件则需用到XMLHttpRequest的responseXML属性(不是方法),它将响应信息格式化为Xml Document对象并返回.例如把Servlet的doPost()方法修改为 
<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"><span style="COLOR: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">resp.setContentType(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/xml</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />resp.setHeader(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Cache-Control</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">no-cache</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />resp.getWriter().write(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;message&gt;Hello World!&lt;/message&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div>注意第一行要设置文档类型为XML.<br />此时JavaScript解析时应使用ResponseXML了. 
<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"><span style="COLOR: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">function validator() {<br /></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    if (req.readystate == 4) {<br /></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        if(req.status==200){<br /></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            var message = req.responseXML.getElementsByTagName("message")[0];<br /></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            msg.innerHTML = message.childNodes[0].nodeValue;<br /></span><span style="COLOR: #008080">6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        }<br /></span><span style="COLOR: #008080">7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    }<br /></span><span style="COLOR: #008080">8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}</span></div>体验一下Ajax吧! ^_^<img src ="http://www.blogjava.net/jjunix/aggbug/37547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-03-27 10:02 <a href="http://www.blogjava.net/jjunix/archive/2006/03/27/37547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RSS1.0, RSS2.0 Specification and Feed Validator</title><link>http://www.blogjava.net/jjunix/archive/2006/03/21/36647.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Tue, 21 Mar 2006 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/03/21/36647.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/36647.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/03/21/36647.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/36647.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/36647.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Tahoma" size="2">
						<span style="FONT-SIZE: 12px">最近开始做毕业设计了,我的毕业设计的难点之一是 Rss 自动解析,了解了这些东西后有了一些思路.<br /><br />注意:</span>
						<br />RSS in RSS2.0 is an acronym for <i><b>R</b>eally <b>S</b>imple <b>S</b>yndication.</i><br />RSS in RSS1.0 is an acronym for <em><strong>R</strong>DF <strong>S</strong>ite <strong>S</strong>ummary</em>.<br />他们走的两条不同的发展路线.<br /><br />All date-times in RSS conform to the Date and Time Specification of </font>
				<a href="http://asg.web.cmu.edu/rfc/rfc822.html#sec-5" target="_blank">
						<strong>
								<font face="Tahoma" color="#924547" size="2">RFC 822</font>
						</strong>
				</a>
				<font face="Tahoma" size="2">, with the exception that the year may be expressed with two characters or four characters (four preferred).<br />RSS1.0 Specification : </font>
				<a href="http://web.resource.org/rss/1.0/" target="_blank">
						<font face="Tahoma" color="#000080" size="2">http://web.resource.org/rss/1.0/</font>
				</a>
				<br />
				<font face="Tahoma" size="2">RSS2.0 Specification : </font>
				<a href="http://blogs.law.harvard.edu/tech/rss" target="_blank">
						<font face="Tahoma" color="#000080" size="2">http://blogs.law.harvard.edu/tech/rss</font>
				</a>
				<br />
				<font face="Tahoma" size="2">FEED Validator :          </font>
				<a href="http://www.feedvalidator.org/" target="_blank">
						<font face="Tahoma" color="#000080" size="2">http://www.feedvalidator.org</font>
				</a>
				<br />
				<font face="Tahoma" size="2">Attachement:<br />  RSS2.0 specification in Chinese:  </font>
				<a href="http://www.china-lv.com/Blog/article.asp?id=71" target="_blank">
						<font face="Tahoma" color="#000080" size="2">http://www.china-lv.com/Blog/article.asp?id=71</font>
				</a>
				<br />
		</p>
<img src ="http://www.blogjava.net/jjunix/aggbug/36647.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-03-21 15:38 <a href="http://www.blogjava.net/jjunix/archive/2006/03/21/36647.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript libraries roundup</title><link>http://www.blogjava.net/jjunix/archive/2006/03/18/35996.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Sat, 18 Mar 2006 14:42:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/03/18/35996.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/35996.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/03/18/35996.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/35996.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/35996.html</trackback:ping><description><![CDATA[
		<div class="blogEntryHeader">
				<span class="blogEntryLinks">
						<font size="2">转载: </font>
						<a title="Link to this entry" href="http://www.neokeen.com/mornlee/pages/Javascript-libraries-roundup.html">
								<font color="#808080">Permalink</font>
						</a> <font size="2">好东西要留个存档以免丢失 ^_^</font><br /></span>
				<span class="blogEntryTitle">
						<a title="Link to this entry" href="http://www.neokeen.com/mornlee/pages/Javascript-libraries-roundup.html" name="a1134654790625">
								<font color="#363636">
										<strong>Javascript libraries roundup</strong>
								</font>
						</a>
						<font color="#363636">
								<strong>
								</strong>
						</font>
				</span>
				<br />
				<span class="blogEntrySubtitle">
						<strong>
								<font color="#666666" size="2">Javascript开发包汇总 </font>
						</strong>
				</span>
		</div>
		<div class="blogEntryBody">
				<p>
						<strong>Prototype</strong>
						<br />Prototype is a JavaScript framework that aims to ease development of dynamic web applications.</p>
				<p>Homepage: <a title="prototype" href="http://prototype.conio.net/"><font color="#999999">http://prototype.conio.net</font></a></p>
				<p>Documentation:<br /><a href="http://blogs.ebusiness-apps.com/jordan/pages/Prototype%20Library%20Info.htm"><font color="#999999">http://blogs.ebusiness-apps.com/jordan/pages/Prototype%20Library%20Info.htm</font></a><br /><a href="http://www.sergiopereira.com/articles/prototype.js.html"><font color="#999999">http://www.sergiopereira.com/articles/prototype.js.html</font></a><br /><a href="http://wiki.script.aculo.us/scriptaculous/show/Prototype"><font color="#999999">http://wiki.script.aculo.us/scriptaculous/show/Prototype</font></a></p>
				<p>
						<strong>Rico</strong>
						<br />Rico provides a very simple interface for registering Ajax request handlers as well as HTML elements or JavaScript objects as Ajax response objects. Multiple elements and/or objects may be updated as the result of one Ajax request.</p>
				<p>Homepage: <a href="http://openrico.org/rico/home.page"><font color="#999999">http://openrico.org/rico/home.page</font></a><br />Documentation: <a href="http://openrico.org/rico/docs.page"><font color="#999999">http://openrico.org/rico/docs.page</font></a><br />Demos: <a href="http://openrico.org/rico/demos.page"><font color="#999999">http://openrico.org/rico/demos.page</font></a></p>
				<p>
						<strong>MochiKit</strong>
						<br />MochiKit is a highly documented and well tested, suite of JavaScript libraries that will help you get things done, fast.</p>
				<p>Homepage: <a href="http://www.mochikit.com/"><font color="#999999">http://www.mochikit.com/</font></a><br />Documentation: <a href="http://www.mochikit.com/doc/html/MochiKit/index.html"><font color="#999999">http://www.mochikit.com/doc/html/MochiKit/index.html</font></a><br />Demos: <a href="http://www.mochikit.com/demos.html"><font color="#999999">http://www.mochikit.com/demos.html</font></a></p>
				<p>
						<strong>Dojo Toolkit</strong>
						<br />Dojo is an Open Source toolkit that allows you to easily build dynamic capabilities into web pages and any other environment that supports JavaScript. Dojo provides components that let you make your sites more useable, responsive, and functional.</p>
				<p>Homepage: <a href="http://www.dojotoolkit.org/"><font color="#999999">http://www.dojotoolkit.org/</font></a><br />Documentation: <a href="http://dojotoolkit.org/docs/"><font color="#999999">http://dojotoolkit.org/docs/</font></a><br />Demos: <a href="http://dojotoolkit.org/examples/"><font color="#999999">http://dojotoolkit.org/examples/</font></a></p>
				<p>
						<strong>Behaviour</strong>
						<br />Separate Structure (xhtml) from Behavior (javascript)</p>
				<p>Homepage: <a href="http://bennolan.com/behaviour/"><font color="#999999">http://bennolan.com/behaviour/</font></a></p>
				<p>
						<strong>Solvent</strong>
						<br />The Solvent is a cross-browser AJAX application toolkit written in JavaScript. The Solvent is provided as modules or as an entire toolkit. The projects focus is to promote robust web applications and enable rapid web development.</p>
				<p>Homepage: <a href="http://sourceforge.net/projects/solvent/"><font color="#999999">http://sourceforge.net/projects/solvent/</font></a><br />Documentation: <a href="http://sourceforge.net/docman/?group_id=144164"><font color="#999999">http://sourceforge.net/docman/?group_id=144164</font></a></p>
				<p>
						<strong>Moo.FX</strong>
						<br />moo.fx is a superlightweight, ultratiny, megasmall javascript effects library, written with prototype.js.</p>
				<p>Homepage: <a href="http://moofx.mad4milk.net/"><font color="#999999">http://moofx.mad4milk.net/</font></a><br />Demo: <a href="http://moofx.mad4milk.net/tests.html"><font color="#999999">http://moofx.mad4milk.net/tests.html</font></a></p>
				<p>
						<strong>WZ_DradDrop</strong>
						<br />A Cross-browser JavaScript DHTML Library which adds Drag Drop functionality to layers and to any desired image</p>
				<p>Homepage: <a href="http://www.walterzorn.com/dragdrop/dragdrop_e.htm"><font color="#999999">http://www.walterzorn.com/dragdrop/dragdrop_e.htm</font></a></p>
				<p>
						<strong>WZ_jsGraphics</strong>
						<br />High Performance JavaScript Vector Graphics Library.</p>
				<p>Homepage: <a href="http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm"><font color="#999999">http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm</font></a></p>
				<p>
						<strong>overLIB</strong>
						<br />overLIB is a JavaScript library created to enhance websites with small popup information boxes (like tooltips) to help visitors around your website.</p>
				<p>Homepage: <a href="http://www.bosrup.com/web/overlib/"><font color="#999999">http://www.bosrup.com/web/overlib/</font></a><br />Documentation: <a href="http://www.bosrup.com/web/overlib/?Documentation"><font color="#999999">http://www.bosrup.com/web/overlib/?Documentation</font></a><br />Command reference: <a href="http://www.bosrup.com/web/overlib/?Command_Reference"><font color="#999999">http://www.bosrup.com/web/overlib/?Command_Reference</font></a></p>
				<p>
						<strong>Scriptaculous</strong>
						<br />Javascript visual effects, togather with prototype.js</p>
				<p>Homepage: <a href="http://script.aculo.us/"><font color="#999999">http://script.aculo.us/</font></a></p>
				<p>
						<strong>SACK</strong>
						<br />Simple AJAX Code-Kit</p>
				<p>Homepage: <a href="http://twilightuniverse.com/projects/sack/"><font color="#999999">http://twilightuniverse.com/projects/sack/</font></a><br />Documentation: <a href="http://twilightuniverse.com/projects/sack/docs.php"><font color="#999999">http://twilightuniverse.com/projects/sack/docs.php</font></a></p>
				<p>
						<strong>Sarissa</strong>
						<br />Sarissa is an ECMAScript library acting as a cross-browser wrapper for native XML APIs. It offers various XML related goodies like Document instantiation, XML loading from URLs or strings, XSLT transformations, XPath queries etc and comes especially handy for people doing what is lately known as “AJAX” development.</p>
				<p>Homepage: <a href="http://sarissa.sourceforge.net/doc/"><font color="#999999">http://sarissa.sourceforge.net/doc/</font></a></p>
				<p>
						<strong>Nifty Corners</strong>
						<br />A small library for making rounded corners with Javascript.</p>
				<p>Homepage: <a href="http://pro.html.it/esempio/nifty/nifty1js.html"><font color="#999999">http://pro.html.it/esempio/nifty/nifty1js.html</font></a></p>
				<p>
						<strong>dp.SyntaxHighlighter</strong>
						<br />dp.SyntaxHighlighter is a free JavaScript library for source code syntax highlighting.</p>
				<p>Homepage: <a href="http://www.dreamprojections.com/SyntaxHighlighter/"><font color="#999999">http://www.dreamprojections.com/SyntaxHighlighter/</font></a><br />Documentation: <a href="http://www.dreamprojections.com/SyntaxHighlighter/Usage.aspx"><font color="#999999">http://www.dreamprojections.com/SyntaxHighlighter/Usage.aspx</font></a><br />Demo: <a href="http://www.dreamprojections.com/SyntaxHighlighter/Examples.aspx"><font color="#999999">http://www.dreamprojections.com/SyntaxHighlighter/Examples.aspx</font></a></p>
				<p>
						<strong>AJAX.NET</strong>
						<br />Michael Schwarz, a .NET developer in Germany has released the latest version of his Ajax .NET Wrapper. This class library simplifies the use of XMLHttp by providing .NET objects that generate the necessary Javascript code.</p>
				<p>Homepage: <a href="http://weblogs.asp.net/mschwarz/archive/2005/04/07/397504.aspx"><font color="#999999">http://weblogs.asp.net/mschwarz/archive/2005/04/07/397504.aspx</font></a></p>
				<p>
						<strong>TOXIC</strong>
						<br />Toxic is an AJAX toolkit, or framework, for creating rich web applications. It handles the tedious and repetetive tasks involved in integrating a client created using html and javascript with a server backend. It enables client side javascript to directly call class methods in PHP5 (or any other suitable language). It also enables the server side PHP to directly call client side javascript functions. Using Toxic you can get rid of much of the tedious work in form intensive rich web applications.</p>
				<p>Homepage: <a href="http://www.dotvoid.com/view.php?id=40"><font color="#999999">http://www.dotvoid.com/view.php?id=40</font></a></p>
				<p>
						<strong>Plex Toolkit</strong>
						<br />Open source feature-complete DHTML GUI toolkit and AJAX framework based on a Javascript/DOM implementation of Macromedia’s Flex technology. Uses the almost identical markup language to Flex embedded in ordinary HTML documents for describing the UI. Binding is done with Javascript.</p>
				<p>Homepage: <a href="http://www.plextk.org/"><font color="#999999">http://www.plextk.org/</font></a></p>
				<p>
						<strong>CPaint</strong>
						<br />CPAINT (Cross-Platform Asynchronous INterface Toolkit) is a multi-language toolkit that helps web developers design and implement AJAX web applications with ease and flexibility.</p>
				<p>Homepage: <a href="http://cpaint.booleansystems.com/"><font color="#999999">http://cpaint.booleansystems.com/</font></a><br />Docs: <a href="http://cpaint.booleansystems.com/doc/"><font color="#999999">http://cpaint.booleansystems.com/doc/</font></a></p>
				<p>
						<strong>DOM-Drag</strong>
						<br />DOM-Drag is a lightweight, easy to use, dragging API for modern DHTML browsers.</p>
				<p>Homepage: <a href="http://www.youngpup.net/2001/domdrag/"><font color="#999999">http://www.youngpup.net/2001/domdrag/</font></a><br />Tutorials: <a href="http://www.youngpup.net/2001/domdrag/tutorial"><font color="#999999">http://www.youngpup.net/2001/domdrag/tutorial</font></a><br />Demo: <a href="http://www.youngpup.net/2001/domdrag/examples"><font color="#999999">http://www.youngpup.net/2001/domdrag/examples</font></a></p>
				<p>
						<strong>Tibet</strong>
						<br />Enterprise Class AJAX</p>
				<p>Homepage: <a href="http://www.technicalpursuit.com/ajax.htm"><font color="#999999">http://www.technicalpursuit.com/ajax.htm</font></a></p>
				<p>
						<strong>Zimbra<br /></strong>Rubust AJAX framework</p>
				<p>Homepage: <a href="http://www.zimbra.com/"><font color="#999999">http://www.zimbra.com</font></a><br />Documentation: <a href="http://www.zimbra.com/products/documentation.html"><font color="#999999">http://www.zimbra.com/products/documentation.html</font></a><br />Demo: <a href="http://www.zimbra.com/products/hosted_demo.php"><font color="#999999">http://www.zimbra.com/products/hosted_demo.php</font></a></p>
				<p>
						<strong>qooxdoo</strong>
						<br />qooxdoo is an advanced open-source javascript based toolkit. qooxdoo continues where simple HTML is not enough anymore. This way qooxdoo can help you to get your rich web application interface done - easier than ever before.</p>
				<p>Homepage: <a href="http://qooxdoo.oss.schlund.de/"><font color="#999999">http://qooxdoo.oss.schlund.de</font></a><br />Documentation: <a href="http://qooxdoo.oss.schlund.de/section/documentation"><font color="#999999">http://qooxdoo.oss.schlund.de/section/documentation</font></a><br />Demo: <a href="http://qooxdoo.oss.schlund.de/counter/refer.php?id=5"><font color="#999999">http://qooxdoo.oss.schlund.de/counter/refer.php?id=5 </font></a></p>
				<p>
						<strong>AJFORM</strong>
						<br />AJFORM is a JavaScript toolkit which simply submits data from any given form in an HTML page, then sends the data to any specified JavaScript function. AJFORM degrades gracefully in every aspect. In other words, if the browser doesn’t support it, the data will be sent through the form as normal.</p>
				<p>Homepage: <a href="http://redredmusic.com/brendon/ajform/"><font color="#999999">http://redredmusic.com/brendon/ajform/ </font></a></p>
				<p>
						<strong>ThyApi</strong>
						<br />ThyAPI is an api to allow the developement of better user interfaces for web applicaticions, Using javascript and Ajax, it allows a complete visual interface definition using CSS and encapsulates all objects data manipulateion.</p>
				<p>Homepage: <a href="http://sourceforge.net/projects/thyapi/"><font color="#999999">http://sourceforge.net/projects/thyapi/ </font></a></p>
				<p>
						<strong>Engine</strong>
						<br />Engine for Web Applications is an application framework for client-side development and Web applications. It provides an environment in which to develop and run JavaScript components and applications.</p>
				<p>Homepage: <a href="http://www.imnmotion.com/projects/engine/"><font color="#999999">http://www.imnmotion.com/projects/engine/ </font></a><br />Documentation: <a href="http://www.imnmotion.com/projects/engine/api/engine_api.html%20"><font color="#999999">http://www.imnmotion.com/projects/engine/api/engine_api.html </font></a></p>
				<p>
						<strong>AJAXGear Toolkit</strong>
						<br />It is a toolkit that allows you to take advantage of the client-side technique known as AJAX. AJAX is shorthand for Asynchronous JavaScript and XML. It uses the XMLHttpRequest object to allow a Web browser to make asynchronous call to the Web server without the need to refresh the whole page.</p>
				<p>Homepage: <a href="http://www.ajaxgear.com/"><font color="#999999">http://www.ajaxgear.com</font></a></p>
				<p>
						<strong>Interactive Website Framework</strong>
						<br />A framework for creating highly interactive websites using javascript, css, xml, and html. Includes a custom xml parser for highly readable javascript. Essentially, all the plumbing for making AJAX-based websites, with js-based GUI toolkit.</p>
				<p>Homepage: <a href="http://sourceforge.net/projects/iwf/"><font color="#999999">http://sourceforge.net/projects/iwf/</font></a></p>
				<p>
						<strong>RSLite</strong>
						<br />RSlite is an extremely lightweight implementation of remote scripting which uses cookies. It is very widely browser-compatible (Opera!) but limited to single calls and small amounts of data.</p>
				<p>Homepage: <a href="http://www.ashleyit.com/rs/main.htm"><font color="#999999">http://www.ashleyit.com/rs/main.htm</font></a><br />Demo: <a href="http://www.ashleyit.com/rs/techniques.htm"><font color="#999999">http://www.ashleyit.com/rs/techniques.htm</font></a></p>
				<p>
						<strong>XHConn</strong>
						<br />XMLHTTP is a technology with which a developer can access external resources over HTTP from a static web page without ever having to reload the page itself. This library is meant to simplify and unify the code necessary to successfully send and receive simple data via XMLHTTP.</p>
				<p>Homepage: <a href="http://xkr.us/code/javascript/XHConn/"><font color="#999999">http://xkr.us/code/javascript/XHConn/</font></a></p>
				<p>
						<strong>Taconite</strong>
						<br />Taconite is a framework that simplifies the creation of Ajax enabled Web applications. It’s a very lightweight framework that automates the tedious tasks related to Ajax development, such as the creation and management of the XMLHttpRequest object and the creation of dynamic content.</p>
				<p>Homepage: <a href="http://taconite.sourceforge.net/"><font color="#999999">http://taconite.sourceforge.net/</font></a><br />Documentation: <a href="http://taconite.sourceforge.net/docs/jsdocs/index.html"><font color="#999999">http://taconite.sourceforge.net/docs/jsdocs/index.html</font></a><br />Demo: <a href="http://taconite.sourceforge.net/examples.html"><font color="#999999">http://taconite.sourceforge.net/examples.html</font></a></p>
				<p>
						<strong>qForms</strong>
						<br />Great Javascript API for interfacing forms.</p>
				<p>Homepage: <a href="http://pengoworks.com/index.cfm?action=get:qforms"><font color="#999999">http://pengoworks.com/index.cfm?action=get:qforms</font></a><br />Documentation: <a href="http://pengoworks.com/qforms/docs/"><font color="#999999">http://pengoworks.com/qforms/docs/</font></a><br />Demo: <a href="http://pengoworks.com/qforms/docs/examples/"><font color="#999999">http://pengoworks.com/qforms/docs/examples/</font></a></p>
				<p>
						<strong>JSPkg</strong>
						<br />jspkg is a package loader for Javascript, based on pluggable loaders for locating and loading scripts into a client-side Javascript application. It is designed to work best with unobtrusive Javascript libraries, but doesn’t impose any methodology or design on its users.</p>
				<p>Homepage: <a href="http://jspkg.sourceforge.net/"><font color="#999999">http://jspkg.sourceforge.net/</font></a></p>
				<p>
						<strong>Ajaxcaller</strong>
						<br />AjaxCaller is a thin XMLHttpRequest wrapper used in all the AjaxPatterns demos. The focus is on ease-of-use and full HTTP method support.</p>
				<p>Homepage: <a href="http://ajaxify.com/run/testAjaxCaller/"><font color="#999999">http://ajaxify.com/run/testAjaxCaller/</font></a></p>
				<p>
						<strong>libXmlRequest</strong>
						<br />The XmlRequest library contains a two public request functions, <strong>getXml</strong> and <strong>postXml</strong>, that may be used to send synchronous and asynchronous XML Http requests from Internet Explorer and Mozilla.</p>
				<p>Homepage: <a href="http://www.whitefrost.com/reference/2005/09/09/libXmlRequest.html"><font color="#999999">http://www.whitefrost.com/reference/2005/09/09/libXmlRequest.html</font></a></p>
				<p>
						<strong>SAJAX</strong>
						<br />Sajax is an open source tool to make programming websites using the Ajax framework 鈥?also known as XMLHTTPRequest or remote scripting 鈥?as easy as possible. Capable of stubbing calls to numerous server-side platforms: ASP/ ColdFusion/ Io/ Lua/ Perl/ PHP/ Python/ Ruby</p>
				<p>Homepage: <a href="http://www.modernmethod.com/sajax/"><font color="#999999">http://www.modernmethod.com/sajax/</font></a><br />Demo: <a href="http://www.modernmethod.com/sajax/examples.phtml"><font color="#999999">http://www.modernmethod.com/sajax/examples.phtml</font></a></p>
				<p>
						<strong>Sardalya</strong>
						<br />A small library for making dynamic HTML programming easy and fun.</p>
				<p>Homepage: <a href="http://www.sarmal.com/sardalya/Default.aspx"><font color="#999999">http://www.sarmal.com/sardalya/Default.aspx</font></a><br />Demo: <a href="http://www.sarmal.com/sardalya/Samples.aspx"><font color="#999999">http://www.sarmal.com/sardalya/Samples.aspx </font></a></p>
				<p>
						<strong>X</strong>
						<br />One of the best javascript libraries out there.</p>
				<p>Homepage: <a href="http://www.cross-browser.com/toys/"><font color="#999999">http://www.cross-browser.com/toys/</font></a></p>
				<p>
						<strong>AjaxRequest</strong>
						<br />AjaxRequest is a layer over the XMLHttpRequest functionality which makes the communication between Javascript and the server easier for developers.</p>
				<p>Homepage: <a href="http://ajaxtoolbox.com./request/"><font color="#999999">http://ajaxtoolbox.com/request/</font></a><br />Documentation: <a href="http://ajaxtoolbox.com./request/documentation.php"><font color="#999999">http://ajaxtoolbox.com/request/documentation.php</font></a><br />Demo: <a href="http://ajaxtoolbox.com/request/examples.php"><font color="#999999">http://ajaxtoolbox.com/request/examples.php</font></a></p>
				<p>
						<strong>PHP based AJAX Frameworks</strong>
				</p>
				<p>
						<strong>AjaxAC</strong>
						<br />AjaxAC is an open-source framework written in PHP, used to develop/create/generate AJAX applications. The fundamental idea behind AJAX (Asynchronous JavaScript And XML) is to use the XMLHttpRequest object to change a web page state using background HTTP sub-requests without reloading the entire page.</p>
				<p>Homepage: <a href="http://ajax.zervaas.com.au/"><font color="#999999">http://ajax.zervaas.com.au</font></a></p>
				<p>
						<strong>XOAD</strong>
						<br />XOAD, formerly known as NAJAX, is a PHP based AJAX/XAP object oriented framework that allows you to create richer web applications.</p>
				<p>Homepage: <a href="http://www.xoad.org/"><font color="#999999">http://www.xoad.org</font></a><br />Documentation: <a href="http://www.xoad.org/documentation/source/"><font color="#999999">http://www.xoad.org/documentation/source/</font></a><br />Demo: <a href="http://www.xoad.org/examples/"><font color="#999999">http://www.xoad.org/examples/</font></a></p>
				<p>
						<strong>PAJAJ</strong>
						<br />What is the PAJAJ framework, it stands for (PHP Asynchronous Javascript and JSON). It is a object oriented Ajax framework written in PHP5 for development of event driven PHP web applications.</p>
				<p>Homepage: <a href="http://sourceforge.net/projects/pajaj/"><font color="#999999">http://sourceforge.net/projects/pajaj/</font></a><br />Documentation: <a href="http://www.wassons.org/pajaj/public/docs/index.php"><font color="#999999">http://www.wassons.org/pajaj/public/docs/index.php</font></a></p>
				<p>
						<strong>Symfony</strong>
						<br />A PHP 5 Development Framework inspired by Rails. It has integrated database abstraction and support for AJAX. Installation is fairly easy. Symfony is aimed at building robust applications in an enterprise context. This means that you have full control over the configuration: from the directory structure to the foreign libraries, almost everything can be customized. To match your enterprise’s development guidelines, symfony is bundled with additional tools helping you to test, debug and document your project.</p>
				<p>AjaxBlog: <a href="http://ajaxblog.com/archives/2005/11/03/build-an-ajax-application-in-php-in-minutes-with-symfony"><font color="#999999">http://ajaxblog.com/arc…….application-in-php-in-minutes-with-symfony</font></a></p>
				<p>Homepage: <a href="http://edevil.wordpress.com/wp-admin/www.symfony-project.com"><font color="#999999">www.symfony-project.com</font></a><br />Documentation: <a href="http://www.symfony-project.com/content/documentation.html"><font color="#999999">http://www.symfony-project.com/content/documentation.html</font></a><br /><a href="http://www.symfony-project.com/trac/wiki"><font color="#999999">http://www.symfony-project.com/trac/wiki</font></a></p>
				<p>
						<strong>XAJAX</strong>
						<br />xajax is an open source PHP class library that allows you to easily create powerful, web-based, Ajax applications using HTML, CSS, JavaScript, and PHP. Applications developed with xajax can asynchronously call server-side PHP functions and update content <em>without reloading the page</em>.</p>
				<p>Homepage: <a href="http://xajax.sourceforge.net/"><font color="#999999">http://xajax.sourceforge.net/</font></a></p>
				<p>
						<strong>PEAR:: HTML_AJAX</strong>
						<br />Provides PHP and JavaScript libraries for performing AJAX (Communication from JavaScript to your server without reloading the page)</p>
				<p>Homepage: <a href="http://pear.php.net/package/HTML_AJAX"><font color="#999999">http://pear.php.net/package/HTML_AJAX</font></a><br />Documentation: <a href="http://pear.php.net/package/HTML_AJAX/docs"><font color="#999999">http://pear.php.net/package/HTML_AJAX/docs</font></a></p>
				<p>
						<strong>Flexible AJAX</strong>
						<br />Flexible Ajax is a handler to combine the remote scripting technology, also known as AJAX (Asynchronous Javascript and XML), with a php-based backend.</p>
				<p>Homepage: <a href="http://tripdown.de/flxajax/"><font color="#999999">http://tripdown.de/flxajax/</font></a><br />Demo: <a href="http://tripdown.de/flexible_ajax_example.php"><font color="#999999">http://tripdown.de/flexible_ajax_example.php</font></a></p>
				<p>
						<strong>Javascript libs for Flash:</strong>
				</p>
				<p>
						<strong>FlashObject</strong>
						<br />FlashObject is a small Javascript file used for embedding Macromedia Flash content.</p>
				<p>Homepage: <a href="http://blog.deconcept.com/flashobject/"><font color="#999999">http://blog.deconcept.com/flashobject/</font></a></p>
				<p>
						<strong>OSFlash - Flashjs</strong>
						<br />The Flash JavaScript Integration Kit allows developers to get the best of the Flash and HTML worlds by enabling JavaScript to invoke ActionScript functions, and vice versa.</p>
				<p>Homepage: <a href="http://www.osflash.org/doku.php?id=flashjs"><font color="#999999">http://www.osflash.org/doku.php?id=flashjs</font></a><br />Documentation: <a href="http://www.mustardlab.com/developer/flash/jscommunication/"><font color="#999999">http://www.mustardlab.com/developer/flash/jscommunication/ </font></a></p>
				<p>
						<strong>AFLAX</strong>
						<br />A JavaScript Library for Macromedia’s Flash鈩?Platform. AFLAX is a method through which developers may use JavaScript and Flash together to create AJAX-type applications, but with a much richer set of vector drawing controls than are available in either Internet Explorer or FireFox. Developers using this library have access to the full range of Flash features, but without ever touching the Flash IDE.</p>
				<p>Homepage: <a href="http://www.aflax.org/"><font color="#999999">http://www.aflax.org</font></a></p>
				<p>
						<strong>Java based AJAX Frameworks</strong>
				</p>
				<p>
						<strong>ZK</strong>
						<br />ZK is an AJAX-based solution for developing Web applications in Java. ZK includes an event-driven engine to automate interactivity, and a rich set of XUL-based components.</p>
				<p>Homepage: <a href="http://zk1.sourceforge.net/"><font color="#999999">http://zk1.sourceforge.net</font></a><br />Demo: <a href="http://www.potix.com/zkdemo/userguide" rel="nofollow"><font color="#999999">http://www.potix.com/zkdemo/userguide</font></a></p>
		</div>
<img src ="http://www.blogjava.net/jjunix/aggbug/35996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-03-18 22:42 <a href="http://www.blogjava.net/jjunix/archive/2006/03/18/35996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Thread</title><link>http://www.blogjava.net/jjunix/archive/2006/03/18/35915.html</link><dc:creator>下载记忆</dc:creator><author>下载记忆</author><pubDate>Sat, 18 Mar 2006 01:20:00 GMT</pubDate><guid>http://www.blogjava.net/jjunix/archive/2006/03/18/35915.html</guid><wfw:comment>http://www.blogjava.net/jjunix/comments/35915.html</wfw:comment><comments>http://www.blogjava.net/jjunix/archive/2006/03/18/35915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjunix/comments/commentRss/35915.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjunix/services/trackbacks/35915.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Verdana">
						<font size="2">Java网络编程里关于线程有这样几句话:</font>
						<br />
				</font>
		</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">
				<span style="COLOR: #000000">  每个进程都有自己的一块内存,而在资源上对线程的处理要容易的多,因为线程可以共享内存. .... 多线程服务器(以及其他多线程程序),要求程序员处理单线程程序所不存在的问题,特别是要关心安全问题和生命周期的问题.因为不同的线程共享相同的内存,所以一个线程完全有可能破坏另一个线程使用的所有变量和数据结构.因此,不同的线程必须对它们何时使用哪个资源及其小心.</span>
		</div>
<img src ="http://www.blogjava.net/jjunix/aggbug/35915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjunix/" target="_blank">下载记忆</a> 2006-03-18 09:20 <a href="http://www.blogjava.net/jjunix/archive/2006/03/18/35915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>