??xml version="1.0" encoding="utf-8" standalone="yes"?>国产亚洲精品xxx,亚洲资源最新版在线观看,亚洲另类少妇17phttp://www.tkk7.com/jjunix/category/8604.htmlDownload my Memoryzh-cnTue, 27 Feb 2007 12:24:57 GMTTue, 27 Feb 2007 12:24:57 GMT60实习日志7 Q结束试用-转正Q?/title><link>http://www.tkk7.com/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.tkk7.com/jjunix/archive/2006/09/06/68115.html</guid><wfw:comment>http://www.tkk7.com/jjunix/comments/68115.html</wfw:comment><comments>http://www.tkk7.com/jjunix/archive/2006/09/06/68115.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jjunix/comments/commentRss/68115.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jjunix/services/trackbacks/68115.html</trackback:ping><description><![CDATA[ <p>被搞了几个月Q终于TMD的{正了Q!前两个月没给1分钱Q!让h发指Q?br />虽然Z在TXQ福利是TXl的Q工资是TX的,Z在TXQ也直接lTX做事情,但签U的公司不是TXQ说什么大家一家h都TM的扯淡,一L话工资怎么两套标准Q招聘的时候说的真好听Q实际证明:骗hQ!<br />不就电信的项目多点吗Q名气大了点而已Q没啥了不v的,开发照样一团糟Q文档照h开发完再补Q流E一条腿Q实际开发另一条腿。卖了一q_一q之后肯定走ZQ讲的政{一天变Nơ!q种公司谁敢长期呆下去?今天本来很高_{֮后告诉俺工资多少有炚w闷了Q和当初在俺学校讲的完全不是一回事Q!q还是有点名气的公司Q不知道点的公司是不是比他们要好。虽然感觉这里能学到东西Q即使现在也q么感觉Q但?个月q去了,心里q是I荡的Q没觉得有多大收莗在q里面搞Java的被成ؓ搞“页面”的Q!Q真是伤自尊啊,不过q里有的人确实强Q不q他们大部分都是搞C的,虽然q里搞Java的h多?br />俺是应届的,大学4q没吃一ơ生日蛋p,今天公司q让俺惊喜了一下,居然q记得通知Z班领生日蛋糕和小C品Q哎。。。?/p> <img src ="http://www.tkk7.com/jjunix/aggbug/68115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jjunix/" target="_blank">下蝲记忆</a> 2006-09-06 20:10 <a href="http://www.tkk7.com/jjunix/archive/2006/09/06/68115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实习日志6 Q?q个目很烦人!Q?/title><link>http://www.tkk7.com/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.tkk7.com/jjunix/archive/2006/08/31/66947.html</guid><wfw:comment>http://www.tkk7.com/jjunix/comments/66947.html</wfw:comment><comments>http://www.tkk7.com/jjunix/archive/2006/08/31/66947.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jjunix/comments/commentRss/66947.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jjunix/services/trackbacks/66947.html</trackback:ping><description><![CDATA[      接触的第一个项目是一个小模块Q主要用Java客户端Socket 和C服务器端Socket通信Q服务器是Linuxpȝ。之前什么都没有做,H然老大让我们几个新人做q样一个东西,而且没有一个h带我们搞Q前前后后用了两周时间才基本搞定了。最大的体会是:原来在学校里搞东西,写到八九成就觉的完成了,即哪里有点问题也从来不管Q觉得那里不值得p_LIӞ但是现在是所有的问题(已知?都必解冻I一个都不能留!Q比如说如果l持接收报警信息的Socketq接有时候会断,如果在学校我肯定不管他,大不了重启服务器从头q行Q!功能实现了就OK啦,但是现在q是商用软gQ用h肯定不会去重启服务器Q出了问题就是经损失!现在不去做是不行的了Q最L一旦用L了两天打电话回来Q开人都有可能。哎Q版本都已经提交了,但是心里q是不踏实,L觉不定哪天那边会打电话回来说Q系l报错了Q!<br />      W一个是了点,但是最底层的{换都要手写的Q现在这个和上面一个很怼Q但是底层是人家实现好的东西Q只是数据太多了QcopyQpaste都得好几天,上面每天催老大Q老大每天催我们,哎,都是copyQpasteQ没有什么意思,q要天天加班Q真是烦人!Q!<img src ="http://www.tkk7.com/jjunix/aggbug/66947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jjunix/" target="_blank">下蝲记忆</a> 2006-08-31 21:13 <a href="http://www.tkk7.com/jjunix/archive/2006/08/31/66947.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实习日志5 Q?误h子弟Q!Q?/title><link>http://www.tkk7.com/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.tkk7.com/jjunix/archive/2006/08/12/63115.html</guid><wfw:comment>http://www.tkk7.com/jjunix/comments/63115.html</wfw:comment><comments>http://www.tkk7.com/jjunix/archive/2006/08/12/63115.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/jjunix/comments/commentRss/63115.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jjunix/services/trackbacks/63115.html</trackback:ping><description><![CDATA[无缘无故被{到另一家公司,虽然是进入“TX”里面做事情Q但q一个月实在是无聊,没有什么东西做Q一天到晚都是看目代码Q当时应聘是明明搞的JavaQ现在做的虽然是Java后台处理Q但是一句Java代码也不会让你去写。更可怕的事情是一周后有一个考核Q决定去留的考核Q如果过了就可以{Q进入试用期Q如果过不了也就意味着?月底到现在没有一分钱的工资,q倒脓了几个月的生z费。这是“TX”吗Q感觉这几个月就是在被h玩,Ҏ没有要的意思,既然不想要又何必招聘呢?Q误人子弟!Q!Q!Q!Q!Q?img src ="http://www.tkk7.com/jjunix/aggbug/63115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jjunix/" target="_blank">下蝲记忆</a> 2006-08-12 08:47 <a href="http://www.tkk7.com/jjunix/archive/2006/08/12/63115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>毕业{辩l束??...http://www.tkk7.com/jjunix/archive/2006/06/21/54368.html下蝲记忆下蝲记忆Wed, 21 Jun 2006 14:03:00 GMThttp://www.tkk7.com/jjunix/archive/2006/06/21/54368.htmlhttp://www.tkk7.com/jjunix/comments/54368.htmlhttp://www.tkk7.com/jjunix/archive/2006/06/21/54368.html#Feedback0http://www.tkk7.com/jjunix/comments/commentRss/54368.htmlhttp://www.tkk7.com/jjunix/services/trackbacks/54368.html?如果和他争辩一下真后果可能和我那个考上研的同学后果一样了!!?他也够可怜的,考上了很好的一个大学的跨专业的研居然这里栽倒了,真TMD让h看不?!!

下蝲记忆 2006-06-21 22:03 发表评论
]]>
全国公共图书?/title><link>http://www.tkk7.com/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.tkk7.com/jjunix/archive/2006/06/15/52890.html</guid><wfw:comment>http://www.tkk7.com/jjunix/comments/52890.html</wfw:comment><comments>http://www.tkk7.com/jjunix/archive/2006/06/15/52890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jjunix/comments/commentRss/52890.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jjunix/services/trackbacks/52890.html</trackback:ping><description><![CDATA[ <span style="FONT-SIZE: 12px"> <a target="_blank"> <font color="#003366">·中国国家图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·首都图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·q西U技图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·香港中央图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·p省图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·沛_省图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·重庆图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·天|图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·上v数字图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·上v图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·中国国家图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·深圳图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·图书交易|?/font> </a> <br /> <a target="_blank"> <font color="#003366">·香港公共图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·沈阳图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·国家工程技术图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·吉林省图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·南v图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·陕西省图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·q西柛_图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·q西桂林图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·q西图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·四川省图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·佛山图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·中科院文献情报中?/font> </a> <br /> <a target="_blank"> <font color="#003366">·中国数字图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·星数字图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·北京市东城区图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·无锡市图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·中山图书?/font> </a> <br /> <a href="http://265.com/2650329/q东q州图书? target="_blank"> <font color="#003366">·q东q州图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·湖南图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·湖北武汉图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·郑州市图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·沛_省图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·徏省泉州市图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·厦门儿图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·徏省图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·江西省图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·合肥市图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·辽宁省图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·江苏金陵图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·q东省科技图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·常州图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·苏州图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·南京图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·杭州图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·湖州图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·江图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·黑龙江哈滨市图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·澳门中央图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·烟台图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·׃省图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·内蒙古图书馆</font> </a> <br /> <a target="_blank"> <font color="#003366">·长春图书?/font> </a> <br /> <a target="_blank"> <font color="#003366">·安徽省图书馆</font> </a> </span> <img src ="http://www.tkk7.com/jjunix/aggbug/52890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jjunix/" target="_blank">下蝲记忆</a> 2006-06-15 08:35 <a href="http://www.tkk7.com/jjunix/archive/2006/06/15/52890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java文g操作大全http://www.tkk7.com/jjunix/archive/2006/06/01/49486.html下蝲记忆下蝲记忆Thu, 01 Jun 2006 03:07:00 GMThttp://www.tkk7.com/jjunix/archive/2006/06/01/49486.htmlhttp://www.tkk7.com/jjunix/comments/49486.htmlhttp://www.tkk7.com/jjunix/archive/2006/06/01/49486.html#Feedback0http://www.tkk7.com/jjunix/comments/commentRss/49486.htmlhttp://www.tkk7.com/jjunix/services/trackbacks/49486.html

文g的徏?查与删除
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文g的徏立、检查与删除</title>
</head>
<body>
<%
String path=request.getRealPath("");
//out.println(path);
File f=new File(path,"File.txt");
//out.println(f);
//out.println(f.exists());

if(f.exists()){//查File.txt是否存在
f.delete();//删除File.txt文g
out.println(path + "存在Q已删除?);
}else{
f.createNewFile();//在当前目录下建立一个名为File.txt的文?br />out.println(path + "\\File.txt 不存在,已徏立?);//输出目前所在的目录路径
}
%>

目录的徏?查与删除
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>目录的徏?查与删除</title>
</head>
<body>
<%
String path=request.getRealPath("");
path=path + "\\Sub";//要建立的目录\?br />File d=new File(path);//建立代表Sub目录的File对象Qƈ得到它的一个引?br />if(d.exists()){//查Sub目录是否存在
d.delete();
out.println("Sub目录存在Q已删除");
}else{
d.mkdir();//建立Sub目录
out.println("Sub目录不存在,已徏?);
}
%>
</body>
</html>


如何在JSP中处理虚拟目?br /><%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>JSP中如何处理虚拟目?lt;/title>
</head>
<body>
取得虚拟目录对应的磁盘\?lt;br>
Web站点ȝ录的位置?lt;font color=#ff0000><%=request.getRealPath("/")%></font><br>
JSP|页所在的目录位置<font color=#ff0000><%=request.getRealPath("./")%></font><br>
JSP|页所在目录上一层目录的位置<font color=#ff0000><%=request.getRealPath("../")%></font><br>
</body>
</html>


文g属性的取得
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Date,java.io.*"%>
<html>
<head>
<title>文g属性的取得</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File f=new File(path,"ReadData.txt");
if(f.exists()){
%>
<%=f.getName()%>的属性如下:<br><br>
文g长度为:<%=f.length()%>
<%=f.isFile()?"是文?:"不是文g"%><br>
<%=f.isDirectory()?"是目?:"不是目录"%><br>
<%=f.canRead()?"可读?:"不可d"%><br>
<%=f.canWrite()?"可写?:"不可写入"%><br>
<%=f.isHidden()?"是隐藏文?:"不是隐藏文g"%><br>
文g的最后修Ҏ期ؓQ?lt;%=new Date(f.lastModified())%><br>
<%
}else{
f.createNewFile();//在当前目录下建立一个名为ReaData.txt的文?br />%>
<%=f.getName()%>的属性如下:<br><br>
文g长度为:<%=f.length()%>
<%=f.isFile()?"是文?:"不是文g"%><br>
<%=f.isDirectory()?"是目?:"不是目录"%><br>
<%=f.canRead()?"可读?:"不可d"%><br>
<%=f.canWrite()?"可写?:"不可写入"%><br>
<%=f.isHidden()?"是隐藏文?:"不是隐藏文g"%><br>
文g的最后修Ҏ期ؓQ?lt;%=new Date(f.lastModified())%><br>
<%
}
%>
</body>
</html>


取出目录中文件的Ҏ
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>取出目录中文件的Ҏ--列出目录中的文g</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File d=new File(path);//建立当前目录中文件的File对象
File list[]=d.listFiles();//取得代表目录中所有文件的File对象数组
out.println("<font color=#ff0000>" + path + "目录下的文gQ?lt;/font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isFile()){
out.println(list<I>.getName() + "<br>");
}
}
out.println("<br><font color=#ff0000>" + path + "目录下的目录Q?lt;/font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isDirectory()){
out.println(list<I>.getName() + "<br>");
}
}
%>
</body>
</html>


判断是否为空白文?br /><%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>判断是否为空白文?lt;/title>
</head>
<body>
<%
String path=request.getRealPath("/");
out.println(path);
FileReader fr=new FileReader(path + "\\AtEnd.txt");//建立FileReader对象Qƈ实例化ؓfr
//对FileReadercȝ成的对象使用read()ҎQ可以从字符中d下一个字W?br />if(fr.read()==-1)//判断是否已读到文件的l尾
{
out.print("AtEnd.txt文g中没有数?lt;br>");
}else{
out.println("AtEnd.txt文g中有数据");
}
fr.close();
%>
</body>
</html>


d所有的文g数据
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*,java.lang.*"%>
<html>
<head>
<title>d所有的文g数据</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
//关键在于dq程中,要判断所d的字W是否已l到了文件的末尾Qƈ且这个字W是不是文g中的断行W,卛_断该字符值是否ؓ13?br />int c=fr.read();//从文件中d一个字W?br />//判断是否已读到文件结?br />while(c!=-1){
out.print((char)c);//输出d的数?br />c=fr.read();//从文件中l箋d数据
if(c==13){//判断是否为断行字W?br />out.print("<br>");//输出分行标签
fr.skip(1);//略过一个字W?br />//c=fr.read();//d一个字W?br />}
}
fr.close();
%>
</body>
</html>


一行一行读取数?br /><%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文gd</title>
</head>
<body>
<%
String path=request.getRealPath("");//取得当前目录的\?br />FileReader fr=new FileReader(path + "\\file\\inc\\t.txt");//建立FileReader对象Qƈ实例化ؓfr
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象Qƈ实例化ؓbr
String Line=br.readLine();//从文件读取一行字W串
//判断d到的字符串是否不为空
while(Line!=null){
out.println(Line + "<br>");//输出从文件中d的数?br />Line=br.readLine();//从文件中l箋d一行数?br />}
br.close();//关闭BufferedReader对象
fr.close();//关闭文g
%>
</body>
</html>


略过文g中的字符不读?br /><%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>略过字节不读?lt;/title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
fr.skip(2);//跌2个字?br />int c=fr.read();//d一个字?br />while(c!=-1){
out.print((char)c);
c=fr.read();
}
fr.close();
%>
</body>
</html>


数据写入文?br /><%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>数据写入文?lt;/title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");//建立FileWriter对象Qƈ实例化fw
//字W串写入文g
fw.write("大家好!");
fw.write("本书是《JSP~程技巧?);
fw.write("请多多指教!");
fw.write("email:stride@sina.com");
fw.close();

FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象Qƈ实例化ؓbr
String Line=br.readLine();
//d一行数?br />out.println(Line + "<br>");
br.close();//关闭BufferedReader对象
fr.close();
%>
</body>
</html>


写入文件的数据分行
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>写入文件的数据分行</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write("大家好!");
bw.write("本书是《JSP~程技巧》?);
bw.newLine();//断行
bw.write("请多多指教!");
bw.newLine();//断行
bw.write("email: stride@sina.com");
bw.flush();//数据更新至文g
fw.close();//关闭文g?br />out.println("写入文g内容为:<br>");
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);
String Line=br.readLine();//d一行数?br />while(Line!=null){
out.println(Line + "<br>");
Line=br.readLine();
}
fr.close();
%>
</body>
</html>
如何数据追加写入到文g
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>写入文件的数据分行</title>
</head>
<body>
<%
String path=request.getRealPath(".");
RandomAccessFile rf=new RandomAccessFile(path + "\\WriteData.txt","rw");//定义一个类RandomAccessFile的对象,q实例化
rf.seek(rf.length());//指针移动到文g末尾
rf.writeBytes("\nAppend a line to the file!");
rf.close();//关闭文g?br />out.println("写入文g内容为:<br>");
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);//d文g的BufferedRead对象
String Line=br.readLine();
while(Line!=null){
out.println(Line + "<br>");
Line=br.readLine();
}
fr.close();//关闭文g
%>
</body>
</html></I></I></I></I>



下蝲记忆 2006-06-01 11:07 发表评论
]]>
Java 中文问题http://www.tkk7.com/jjunix/archive/2006/05/26/48410.html下蝲记忆下蝲记忆Fri, 26 May 2006 13:04:00 GMThttp://www.tkk7.com/jjunix/archive/2006/05/26/48410.htmlhttp://www.tkk7.com/jjunix/comments/48410.htmlhttp://www.tkk7.com/jjunix/archive/2006/05/26/48410.html#Feedback0http://www.tkk7.com/jjunix/comments/commentRss/48410.htmlhttp://www.tkk7.com/jjunix/services/trackbacks/48410.html (本文来自|络)

Java中文问题一直困扰着很多初学者,如果了解了Javapȝ的中文问题原理,我们可以对中文问题能够采取Ҏ的解决之道?br />
  最古老的解决Ҏ是用String的字节码转换Q这U方案问题是不方便,我们需要破坏对象封装性,q行字节码{换?br />
  q有一U方式是对J2EE容器q行~码讄Q如果J2EE应用pȝq该容器,则会发生qQ而且指定容器配置不符合J2EE应用和容器分ȝ原则?br />
  在Java内部q算中,涉及到的所有字W串都会被{化ؓUTF-8~码来进行运。那么,在被Java转化之前Q字W串是什么样的字W集Q JavaLҎ操作pȝ的默认编码字W集来决定字W串的初始编码,而且Javapȝ的输入和输出的都是采取操作系l的默认~码?br />
  因此Q如果能l一Javapȝ的输入、输出和操作pȝ3者的~码字符集合Q将能够使Javapȝ正确处理和显C汉字。这是处理Javapȝ汉字的一个原则,但是在实际项目中Q能够正抓住和控制住Javapȝ的输入和输出部分是比较难的。J2EE中,׃涉及到外部浏览器和数据库{,所以中文问题ؕ码显得非常突出?br />
  J2EE应用E序是运行在J2EE容器中。在q个pȝ中,输入途径有很多种Q一U是通过面表单打包成请求(requestQ发往服务器的Q第二种是通过数据库读入;q有W?U输入比较复杂,JSP在第一ơ运行时L被编译成ServletQJSP中常常包含中文字W,那么~译使用javacӞJava根据默认的操作pȝ~码作ؓ初始~码。除非特别指定,如在Jbuilder/eclipse中可以指定默认的字符集?br />
  输出途径也有几种Q第一U是JSP面的输出。由于JSP面已经被编译成ServletQ那么在输出Ӟ也将Ҏ操作pȝ的默认编码来选择输出~码Q除非指定输出编码方式;q有输出途径是数据库Q将字符串输出到数据库?br />
  由此看来Q一个J2EEpȝ的输入输出是非常复杂Q而且是动态变化的Q而Java是跨q_q行的,在实际编译和q行中,都可能涉及到不同的操作系l,如果ȝJava自由Ҏ操作pȝ来决定输入输出的~码字符集,q将不可控制地出Cؕ码?br />
  正是׃Java的跨q_Ҏ,使得字符集问题必ȝ具体pȝ来统一解决Q所以在一个Java应用pȝ中,解决中文q的根本办法是明确指定整个应用pȝl一字符集?br />
  指定l一字符集时Q到底是指定ISO8859_1 、GBKq是UTF-8呢?

  Q?Q如l一指定为ISO8859_1Q因为目前大多数软g都是西方人编制的Q他们默认的字符集就是ISO8859_1Q包括操作系lLinux和数据库MySQL{。这P如果指定Jivel一~码为ISO8859_1Q那么就有下?个环节必L握:

  开发和~译代码时指定字W集为ISO8859_1?br />
  q行操作pȝ的默认编码必LISO8859_1Q如Linux?br />
  在JSP头部声明Q?lt;%@ page contentType="text/html;charset=ISO8859_1" %>?br />
  Q?Q如果统一指定为GBK中文字符集,上述3个环节同样需要做刎ͼ不同的是只能q行在默认编码ؓGBK的操作系l,如中文Windows?br />
  l一~码为ISO8859_1和GBK虽然带来~制代码的方便,但是各自只能在相应的操作pȝ上运行。但是也破坏了Java跨^台运行的优越性,只在一定范围内行得通。例如,Z使得GBK~码在linux上运行,讄Linux~码为GBK?br />
  那么有没有一U除了应用系l以外不需要进行Q何附加设|的中文~码Ҏ解决Ҏ呢?

  Java/J2EEpȝ的统一~码定义为UTF-8。UTF-8~码是一U兼Ҏ有语a的编码方式,惟一比较ȝ的就是要扑ֈ应用pȝ的所有出入口Q然后用UTF-8厠Z结扎”它?br />
  一个J2EE应用pȝ需要做下列几步工作Q?br />
开发和~译代码时指定字W集为UTF-8。JBuilder和Eclipse都可以在目属性中讄?br />使用qo器,如果所有请求都l过一个Servlet控制分配器,那么使用Servlet的filter执行语句Q将所有来自浏览器的请求(requestQ{换ؓUTF-8Q因为浏览器发过来的h包根据浏览器所在的操作pȝ~码Q可能是各种形式~码。关键一句:
request.setCharacterEncoding("UTF-8")?br />|上有此filter的源码,Jdon框架源码中com.jdon.util.SetCharacterEncodingFilter
需要配|web.xml Ȁz该Filter?br />在JSP头部声明Q?lt;%@ page contentType="text/html;charset= UTF-8" %>?br />在Jsp的html代码中,声明UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
讑֮数据库连接方式是UTF-8。例如连接MYSQL旉|URL如下Q?br />jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8
一般数据库都可以通过理讄讑֮UTF-8
其他和外界交互时能够讑֮~码时就讑֮UTF-8Q例如读取文Ӟ操作XML{?br />  以前在Jsp/Servlet时就采取q个原则Q后来用Struts、Tapestry、EJB、Hibernate、Jdon{框架时Q从未被q困扰q,可以说适合各种架构。希望本Ҏ供更多初学者分享,减少Java/J2EE的第一个拦路虎Q也避免因ؓ采取一些时解x案,D中文问题一直出现在新的技术架构中?br />
http://www.jdon.com/jive/thread.jsp?forum=62&thread=21140



下蝲记忆 2006-05-26 21:04 发表评论
]]>
[TOMCAT]用web.xml控制Web应用的行?upd:6.3)http://www.tkk7.com/jjunix/archive/2006/05/24/47753.html下蝲记忆下蝲记忆Wed, 24 May 2006 01:22:00 GMThttp://www.tkk7.com/jjunix/archive/2006/05/24/47753.htmlhttp://www.tkk7.com/jjunix/comments/47753.htmlhttp://www.tkk7.com/jjunix/archive/2006/05/24/47753.html#Feedback0http://www.tkk7.com/jjunix/comments/commentRss/47753.htmlhttp://www.tkk7.com/jjunix/services/trackbacks/47753.html

来自sun:
注意Q描q符元素必须在部|描q文件中按照下列序出现Qicon,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.


以下转蝲?lgcheng ?Blog




1 定义头和根元?br />
部v描述W文件就像所有XML文g一P必须以一个XML头开始。这个头声明可以使用的XML版本q给出文件的字符~码?br />DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本(?.2?.3Qƈ指定理此文件其余部分内容的语法的DTD(Document Type DefinitionQ文档类型定??br />所有部|描q符文g的顶层(根)元素为web-app。请注意QXML元素不像HTMLQ他们是大小写敏感的。因此,web-App和WEB-APP都是不合法的Qweb-app必须用小写?br />
2 部v描述W文件内的元素次?br />
XML 元素不仅是大写敏感的,而且它们q对出现在其他元素中的次序敏感。例如,XML头必L文g中的W一,DOCTYPE声明必须是第二项Q而web- app元素必须是第三项。在web-app元素内,元素的次序也很重要。服务器不一定强制要求这U次序,但它们允许(实际上有些服务器是q样做的Q完全拒l执行含有次序不正确的元素的Web应用。这表示使用非标准元素次序的web.xml文g是不可移植的?br />下面的列表给Z所有可直接出现在web-app元素内的合法元素所必需的次序。例如,此列表说明servlet元素必须出现在所有servlet-mapping元素之前。请注意Q所有这些元素都是可选的。因此,可以省略掉某一元素Q但不能把它放于不正的位置?br />l icon icon元素指出IDE和GUI工具用来表示Web应用的一个和两个囑փ文g的位|?br />l display-name display-name元素提供GUI工具可能会用来标记这个特定的Web应用的一个名U?br />l description description元素l出与此有关的说明性文本?br />l context-param context-param元素声明应用范围内的初始化参数?br />l filter qo器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联?br />l filter-mapping 一旦命名了一个过滤器Q就要利用filter-mapping元素把它与一个或多个servlet或JSP面相关联?br />l listener servlet API的版?.3增加了对事g监听E序的支持,事g监听E序在徏立、修改和删除会话或servlet环境时得到通知。Listener元素指出事g监听E序cR?br />l servlet 在向servlet或JSP面制定初始化参数或定制URLӞ必须首先命名servlet或JSP面。Servlet元素是用来完成此项d的?br />l servlet-mapping 服务器一般ؓservlet提供一个缺省的URLQ?/font> http://host/webAppPrefix/servlet/ServletName 。但是,常常会更改这个URLQ以便servlet可以讉K初始化参数或更容易地处理相对URL。在更改~省URLӞ使用servlet-mapping元素?br />l session-config 如果某个会话在一定时间内未被讉KQ服务器可以抛弃它以节省内存。可通过使用HttpSession的setMaxInactiveIntervalҎ明确讄单个会话对象的超时|或者可利用session-config元素制定~省时倹{?br />l mime-mapping 如果Web应用h惛_Ҏ的文Ӟ希望能保证给他们分配特定的MIMEcdQ则mime-mapping元素提供q种保证?br />l welcom-file-list welcome-file-list元素指示服务器在收到引用一个目录名而不是文件名的URLӞ使用哪个文g?br />l error-page error-page元素使得在返回特定HTTP状态代码时Q或者特定类型的异常被抛出时Q能够制定将要显C的面?br />l taglib taglib元素Ҏ记库描述W文ӞTag Libraryu Descriptor fileQ指定别名。此功能使你能够更改TLD文g的位|,而不用编辑用这些文件的JSP面?br />l resource-env-ref resource-env-ref元素声明与资源相关的一个管理对象?br />l resource-ref resource-ref元素声明一个资源工厂用的外部资源?br />l security-constraint security-constraint元素制定应该保护的URL。它与login-config元素联合使用
l login-config 用login-config元素来指定服务器应该怎样l试图访问受保护面的用h权。它与sercurity-constraint元素联合使用?br />l security-role security-role元素l出安全角色的一个列表,q些角色出现在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的本C目录的应用?br />
3 分配名称和定制的UL

在web.xml中完成的一个最常见的Q务是对servlet或JSP面l出名称和定制的URL。用servlet元素分配名称Q用servlet-mapping元素定制的URL与刚分配的名U相兌?br />3.1 分配名称
Z提供初始化参敎ͼ对servlet或JSP面定义一个定制URL或分配一个安全角Ԍ必须首先lservlet或JSP面一个名U。可通过 servlet元素分配一个名U。最常见的格式包括servlet-name和servlet-class子元素(在web-app元素内)Q如下所C:
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>moreservlets.TestServlet</servlet-class>
</servlet>
q表CZ于WEB-INF/classes/moreservlets/TestServlet的servlet已经得到了注册名Test。给 servlet一个名U具有两个主要的含义。首先,初始化参数、定制的URL模式以及其他定制通过此注册名而不是类名引用此servlet。其?可在 URL而不是类名中使用此名U。因此,利用刚才l出的定义,URL
http://host/webAppPrefix/servlet/Test 可用? http://host/webAppPrefix/servlet/moreservlets.TestServlet 的场所?br />误住:XML元素不仅是大写敏感的,而且定义它们的次序也很重要。例如,web-app元素内所有servlet元素必须位于所有servlet- mapping元素Q下一节介绍Q之前,而且q要位于5.6节和5.11节讨论的与过滤器或文档相关的元素Q如果有的话Q之前。类似地Qservlet 的servlet-name子元素也必须出现在servlet-class之前?.2?部v描述W文件内的元素次?详l介l这U必需的次序?br />例如Q程序清?-1l出了一个名为TestServlet的简单servletQ它ȝ在moreservletsE序包中。因为此servlet是扎根在一个名为deployDemo的目录中的Web应用的组成部分,所以TestServlet.class攑֜deployDemo/WEB- INF/classes/moreservlets中。程序清?-2l出放|在deployDemo/WEB-INF/内的web.xml文g的一部分。此web.xml文g使用servlet-name和servlet-class元素名UTest与TestServlet.class相关联。图 5-1和图5-2分别昄利用~省URL和注册名调用TestServlet时的l果?br />
E序清单5-1 TestServlet.java
package moreservlets;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

/** Simple servlet used to illustrate servlet naming
* and custom URLs.
* <P>
* Taken from More Servlets and JavaServer Pages
* from Prentice Hall and Sun Microsystems Press,
*
http://www.moreservlets.com/.
* © 2002 Marty Hall; may be freely used or adapted.
*/

public class TestServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String uri = request.getRequestURI();
out.println(ServletUtilities.headWithTitle("Test Servlet") +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H2>URI: " + uri + "</H2>\n" +
"</BODY></HTML>");
}
}


E序清单5-2 web.xmlQ说明servlet名称的摘录)
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
http://java.sun.com/dtd/web-app_2_3.dtd ">

<web-app>
<!-- ?-->
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>moreservlets.TestServlet</servlet-class>
</servlet>
<!-- ?-->
</web-app>

3.2 定义定制的URL
大多数服务器h一个缺省的serlvet URLQ?br />
http://host/webAppPrefix/servlet/packageName.ServletName 。虽然在开发中使用q个URL很方便,但是我们常常会希望另一个URL用于部v。例如,可能会需要一个出现在Web应用层的URLQ如Qhttp: //host/webAppPrefix/AnynameQ,q且在此URL中没有servletV位于顶层的URL化了相对URL的用。此外,对许多开发h员来_层URL看上L更长更麻烦的~省URL更简短?br />事实上,有时需要用定制的URL。比如,你可能想关闭~省URL映射Q以便更好地强制实施安全限制或防止用h外地讉K无初始化参数的servlet。如果你止了缺省的URLQ那么你怎样讉Kservlet呢?q时只有使用定制的URL了?br />Z分配一个定制的URLQ可使用servlet-mapping元素及其servlet-name和url-pattern子元素。Servlet- name元素提供了一个Q意名Uͼ可利用此名称引用相应的servletQurl-pattern描述了相对于Web应用的根目录的URL。url- pattern元素的值必M斜杠Q?Qv始?br />下面l出一个简单的web.xml摘录Q它允许使用URL http://host/webAppPrefix/UrlTest 而不?/font> http://host/webAppPrefix/servlet/Test ?br />http: //host/webAppPrefix/servlet/moreservlets.TestServlet。请注意Q仍焉要XML头?DOCTYPE声明以及web-app闭元素。此外,可回忆一下,XML元素出现地次序不是随意的。特别是Q需要把所有servlet元素攑֜所?servlet-mapping元素之前?br /><servlet>
<servlet-name>Test</servlet-name>
<servlet-class>moreservlets.TestServlet</servlet-class>
</servlet>
<!-- ... -->
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/UrlTest</url-pattern>
</servlet-mapping>
URL模式q可以包含通配W。例如,下面的小E序指示服务器发送所有以Web应用的URL前缀开始,?.aspl束的请求到名ؓBashMS的servlet?br /><servlet>
<servlet-name>BashMS</servlet-name>
<servlet-class>msUtils.ASPTranslator</servlet-class>
</servlet>
<!-- ... -->
<servlet-mapping>
<servlet-name>BashMS</servlet-name>
<url-pattern>/*.asp</url-pattern>
</servlet-mapping>
3.3 命名JSP面
因ؓJSP面要{换成sevletQ自然希望就像命名servlet一样命名JSP面。毕竟,JSP面可能会从初始化参数、安全设|或定制的URL中受益,正如普通的serlvet那样。虽然JSP面的后台实际上是servletq句话是正确的,但存在一个关键的猜疑Q即Q你不知道JSP面的实际类名(因ؓpȝ自己挑选这个名字)。因此,Z命名JSP面Q可jsp-file元素替换为servlet-calss元素Q如下所C:
<servlet>
<servlet-name>Test</servlet-name>
<jsp-file>/TestPage.jsp</jsp-file>
</servlet>
命名JSP面的原因与命名servlet的原因完全相同:即ؓ了提供一个与定制讄Q如Q初始化参数和安全设|)一起用的名称Qƈ且,以便能更Ҏz?JSP面的URLQ比方说Q以便多个URL通过相同面得以处理Q或者从URL中去?jsp扩展名)。但是,在设|初始化参数Ӟ应该注意QJSP面是利用jspInitҎQ而不是initҎd初始化参数的?br />例如Q程序清?-3l出一个名为TestPage.jsp的简单JSP面Q它的工作只是打印出用来Ȁzd的URL的本地部分。TestPage.jsp攄在deployDemo应用的顶层。程序清?-4l出了用来分配一个注册名PageNameQ然后将此注册名?/font> http://host/webAppPrefix/UrlTest2/anything 形式的URL相关联的web.xml文gQ即QdeployDemo/WEB-INF/web.xmlQ的一部分?br />
E序清单5-3 TestPage.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>
JSP Test Page
</TITLE>
</HEAD>
<BODY BGCOLOR="#FDF5E6">
<H2>URI: <%= request.getRequestURI() %></H2>
</BODY>
</HTML>


E序清单5-4 web.xmlQ说明JSP命名的摘录Q?br /><?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
http://java.sun.com/dtd/web-app_2_3.dtd ">

<web-app>
<!-- ... -->
<servlet>
<servlet-name>PageName</servlet-name>
<jsp-file>/TestPage.jsp</jsp-file>
</servlet>
<!-- ... -->
<servlet-mapping>
<servlet-name> PageName </servlet-name>
<url-pattern>/UrlTest2/*</url-pattern>
</servlet-mapping>
<!-- ... -->
</web-app>


4 止Ȁzdservlet

对servlet或JSP面建立定制URL的一个原因是Q这样做可以注册?initQservletQ或jspInitQJSP面Q方法中d得初始化参数。但是,初始化参数只在是利用定制URL模式或注册名讉K servlet或JSP面时可以用,用缺省URL
http://host/webAppPrefix/servlet/ServletName 讉K时不能用。因此,你可能会希望关闭~省URLQ这样就不会有h意外地调用初始化servlet了。这个过E有时称为禁止激zdservletQ因为多数服务器h一个用~省的servlet URL注册的标准servletQƈȀzȝ省的URL应用的实际servlet?br />有两U禁止此~省URL的主要方法:
l 在每个Web应用中重新映?servlet/模式?br />l 全局关闭Ȁzdservlet?br />重要的是应该注意刎ͼ虽然重新映射每个Web应用中的/servlet/模式比彻底禁止激zservlet所做的工作更多Q但重新映射可以用一U完全可UL的方式来完成。相反,全局止Ȁzdservlet完全是针对具体机器的Q事实上有的服务器(如ServletExecQ没有这L选择。下面的讨论Ҏ个Web应用重新映射/servlet/ URL模式的策略。后面提供在Tomcat中全局止Ȁzdservlet的详l内宏V?br />4.1 重新映射/servlet/URL模式
在一个特定的Web应用中禁止以
http://host/webAppPrefix/servlet/ 开始的URL的处理非常简单。所需做的事情是建立一个错误消息servletQƈ使用前一节讨论的url-pattern元素所有匹配请求{向该 servlet。只要简单地使用Q?br /><url-pattern>/servlet/*</url-pattern>
作ؓservlet-mapping元素中的模式卛_?br />例如Q程序清?-5l出了将SorryServlet servletQ程序清?-6Q与所有以
http://host/webAppPrefix/servlet/ 开头的URL相关联的部v描述W文件的一部分?br />
E序清单5-5 web.xmlQ说明JSP命名的摘录Q?br /><?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
http://java.sun.com/dtd/web-app_2_3.dtd ">

<web-app>
<!-- ... -->
<servlet>
<servlet-name>Sorry</servlet-name>
<servlet-class>moreservlets.SorryServlet</servlet-class>
</servlet>
<!-- ... -->
<servlet-mapping>
<servlet-name> Sorry </servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
<!-- ... -->
</web-app>


E序清单5-6 SorryServlet.java
package moreservlets;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

/** Simple servlet used to give error messages to
* users who try to access default servlet URLs
* (i.e.,
http://host/webAppPrefix/servlet/ServletName )
* in Web applications that have disabled this
* behavior.
* <P>
* Taken from More Servlets and JavaServer Pages
* from Prentice Hall and Sun Microsystems Press,
*
http://www.moreservlets.com/.
* © 2002 Marty Hall; may be freely used or adapted.
*/

public class SorryServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Invoker Servlet Disabled.";
out.println(ServletUtilities.headWithTitle(title) +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H2>" + title + "</H2>\n" +
"Sorry, access to servlets by means of\n" +
"URLs that begin with\n" +
"
http://host/webAppPrefix/servlet/ \n" +
"has been disabled.\n" +
"</BODY></HTML>");
}

public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}


4.2 全局止ȀzdQTomcat
Tomcat 4中用来关闭缺省URL的方法与Tomcat 3中所用的很不相同。下面介l这两种ҎQ?br />1Q禁止激zdQ?Tomcat 4
Tomcat 4用与前面相同的方法关闭激zdservletQ即利用web.xml中的url-mapping元素q行关闭。不同之处在于Tomcat使用了放?install_dir/conf中的一个服务器专用的全局web.xml文gQ而前面用的是存攑֜每个Web应用的WEB-INF目录中的标准 web.xml文g?br />因此Qؓ了在Tomcat 4中关闭激zdservletQ只需在install_dir/conf/web.xml中简单地注释?servlet/* URL映射即可,如下所C:
<!--
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
-->
再次提醒Q应该注意这个项是位于存攑֜install_dir/conf的Tomcat专用的web.xml文g中的Q此文g不是存放在每个Web应用的WEB-INF目录中的标准web.xml?br />2Q禁止激zdQTomcat3
在Apache Tomcat的版?中,通过在install_dir/conf/server.xml中注释出InvokerInterceptor全局止~省 servlet URL。例如,下面是禁止用缺省servlet URL的server.xml文g的一部分?br /><!--
<RequsetInterceptor
className="org.apache.tomcat.request.InvokerInterceptor"
debug="0" prefix="/servlet/" />
-->

5 初始化和预装载servlet与JSP面

q里讨论控制servlet和JSP面的启动行为的Ҏ。特别是Q说明了怎样分配初始化参C及怎样更改服务器生存期中装载servlet和JSP面的时刅R?br />5.1 分配servlet初始化参?br />利用init-param元素向servlet提供初始化参敎ͼinit-param元素hparam-name和param-value子元素。例如,在下面的例子中,如果initServlet servlet是利用它的注册名QInitTestQ访问的Q它能够从其方法中调用getServletConfig(). getInitParameter("param1")获得"Value 1"Q调用getServletConfig().getInitParameter("param2")获得"2"?br /><servlet>
<servlet-name>InitTest</servlet-name>
<servlet-class>moreservlets.InitServlet</servlet-class>
<init-param>
<param-name>param1</param-name>
<param-value>value1</param-value>
</init-param>
<init-param>
<param-name>param2</param-name>
<param-value>2</param-value>
</init-param>
</servlet>
在涉及初始化参数Ӟ有几炚w要注意:
l q回倹{GetInitParameter的返回值L一个String。因此,在前一个例子中Q可对param2使用Integer.parseInt获得一个int?br />l JSP中的初始化。JSP面使用jspInit而不是init。JSP面q需要用jsp-file元素代替servlet-class?br />l ~省URL。初始化参数只在通过它们的注册名或与它们注册名相关的定制URL模式讉KServlet时可以用。因此,在这个例子中Qparam1?param2初始化参数将能够在用URL
http://host/webAppPrefix/servlet/InitTest 时可用,但在使用URL http://host/webAppPrefix/servlet/myPackage.InitServlet 时不能用?br />例如Q程序清?-7l出一个名为InitServlet的简单servletQ它使用initҎ讄firstName和emailAddress字段。程序清?-8l出分配名称InitTestlservlet的web.xml文g?br />E序清单5-7 InitServlet.java
package moreservlets;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

/** Simple servlet used to illustrate servlet
* initialization parameters.
* <P>
* Taken from More Servlets and JavaServer Pages
* from Prentice Hall and Sun Microsystems Press,
*
http://www.moreservlets.com/.
* © 2002 Marty Hall; may be freely used or adapted.
*/

public class InitServlet extends HttpServlet {
private String firstName, emailAddress;

public void init() {
ServletConfig config = getServletConfig();
firstName = config.getInitParameter("firstName");
emailAddress = config.getInitParameter("emailAddress");
}

public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String uri = request.getRequestURI();
out.println(ServletUtilities.headWithTitle("Init Servlet") +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H2>Init Parameters:</H2>\n" +
"<UL>\n" +
"<LI>First name: " + firstName + "\n" +
"<LI>Email address: " + emailAddress + "\n" +
"</UL>\n" +
"</BODY></HTML>");
}
}


E序清单5-8 web.xmlQ说明初始化参数的摘录)
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
http://java.sun.com/dtd/web-app_2_3.dtd ">

<web-app>
<!-- ... -->
<servlet>
<servlet-name>InitTest</servlet-name>
<servlet-class>moreservlets.InitServlet</servlet-class>
<init-param>
<param-name>firstName</param-name>
<param-value>Larry</param-value>
</init-param>
<init-param>
<param-name>emailAddress</param-name>
<param-value>
Ellison@Microsoft.com </param-value>
</init-param>
</servlet>
<!-- ... -->
</web-app>

5.2 分配JSP初始化参?br />lJSP面提供初始化参数在三个斚w不同于给servlet提供初始化参数?br />1Q用jsp-file而不是servlet-class。因此,WEB-INF/web.xml文g的servlet元素如下所C:
<servlet>
<servlet-name>PageName</servlet-name>
<jsp-file>/RealPage.jsp</jsp-file>
<init-param>
<param-name>...</param-name>
<param-value>...</param-value>
</init-param>
...
</servlet>
2) 几乎L分配一个明的URL模式。对servletQ一般相应地使用?/font> http://host/webAppPrefix/servlet/ 开始的~省URL。只需CQ用注册名而不是原名称卛_。这对于JSP面在技术上也是合法的。例如,在上面给出的例子中,可用URL http://host/webAppPrefix/servlet/PageName 讉KRealPage.jsp的对初始化参数具有访问权的版本。但在用于JSP面Ӟ许多用户g不喜Ƣ应用常规的servlet的URL。此外,如果 JSP面位于服务器ؓ其提供了目录清单的目录中Q如Q一个既没有index.html也没有index.jsp文g的目录)Q则用户可能会连接到?JSP面Q单dQ从而意外地ȀzL初始化的面。因此,好的办法是用url-patternQ?.3节)JSP面的原URL与注册的 servlet名相兌。这P客户机可使用JSP面的普通名Uͼ但仍然激zd制的版本。例如,l定来自目1的servlet定义Q可使用下面?servlet-mapping定义Q?br /><servlet-mapping>
<servlet-name>PageName</servlet-name>
<url-pattern>/RealPage.jsp</url-pattern>
</servlet-mapping>
3QJSP用jspInit而不是init。自动从JSP面建立的servlet或许已经使用了intiҎ。因此,使用JSP声明提供一个initҎ是不合法的,必须制定jspInitҎ?br />Z说明初始化JSP面的过E,E序清单5-9l出了一个名为InitPage.jsp的JSP面Q它包含一个jspInitҎ且放|于 deployDemo Web应用层次l构的顶层。一般,
http://host/deployDemo/InitPage.jsp 形式的URL激zL面的不h初始化参数访问权的版本,从而将对firstName和emailAddress变量昄null。但是, web.xml文gQ程序清?-10Q分配了一个注册名Q然后将该注册名与URL模式/InitPage.jsp相关联?br />
E序清单5-9 InitPage.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>JSP Init Test</TITLE></HEAD>
<BODY BGCOLOR="#FDF5E6">
<H2>Init Parameters:</H2>
<UL>
<LI>First name: <%= firstName %>
<LI>Email address: <%= emailAddress %>
</UL>
</BODY></HTML>
<%!
private String firstName, emailAddress;

public void jspInit() {
ServletConfig config = getServletConfig();
firstName = config.getInitParameter("firstName");
emailAddress = config.getInitParameter("emailAddress");
}
%>


E序清单5-10 web.xmlQ说明JSP面的init参数的摘录)
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
http://java.sun.com/dtd/web-app_2_3.dtd ">

<web-app>
<!-- ... -->
<servlet>
<servlet-name>InitPage</servlet-name>
<jsp-file>/InitPage.jsp</jsp-file>
<init-param>
<param-name>firstName</param-name>
<param-value>Bill</param-value>
</init-param>
<init-param>
<param-name>emailAddress</param-name>
<param-value>
gates@oracle.com </param-value>
</init-param>
</servlet>
<!-- ... -->
<servlet-mapping>
<servlet-name> InitPage</servlet-name>
<url-pattern>/InitPage.jsp</url-pattern>
</servlet-mapping>
<!-- ... -->
</web-app>


5.3 提供应用范围内的初始化参?br />一般,对单个地servlet或JSP面分配初始化参数。指定的servlet或JSP面利用ServletConfig的getInitParameterҎdq些参数。但是,在某些情形下Q希望提供可׃Q意servlet或JSP面借助ServletContext的getInitParameterҎd的系l范围内的初始化参数?br />可利用context-param元素声明q些pȝ范围内的初始化倹{context-param元素应该包含param-name、param-value以及可选的description子元素,如下所C:
<context-param>
<param-name>support-email</param-name>
<param-value>
blackhole@mycompany.com </param-value>
</context-param>
可回忆一下,Z保证可移植性,web.xml内的元素必须以正的ơ序声明。但q里应该注意Qcontext-param元素必须出现L与文档有关的元素Qicon、display-name或descriptionQ之后及filter、filter-mapping、listener?servlet元素之前?br />5.4 在服务器启动时装载servlet
假如servlet或JSP面有一个要花很长时间执行的init QservletQ或jspInitQJSPQ方法。例如,假如init或jspInitҎ从某个数据库或ResourceBundle查找产量。这U情况下Q在W一个客hh时装载servlet的缺省行为将对第一个客h产生较长旉的gq。因此,可利用servlet的load-on- startup元素规定服务器在W一ơ启动时装蝲servlet。下面是一个例子?br /><servlet>
<servlet-name> ?</servlet-name>
<servlet-class> ?</servlet-class> <!-- Or jsp-file -->
<load-on-startup/>
</servlet>
可以为此元素体提供一个整数而不是用一个空的load-on-startup。想法是服务器应该在装蝲较大数目的servlet或JSP面之前装蝲较少数目的servlet或JSP面。例如,下面的servlet(攄在Web应用的WEB-INF目录下的web.xml文g中的web-app元素内)指C服务器首先装蝲和初始化SearchServletQ然后装载和初始化由位于Web应用的result目录中的index.jsp文g产生?servlet?br /><servlet>
<servlet-name>Search</servlet-name>
<servlet-class>myPackage.SearchServlet</servlet-class> <!-- Or jsp-file -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Results</servlet-name>
<servlet-class>/results/index.jsp</servlet-class> <!-- Or jsp-file -->
<load-on-startup>2</load-on-startup>
</servlet>

6 声明qo?br />
servlet版本2.3引入了过滤器的概c虽然所有支持servlet API版本2.3的服务器都支持过滤器Q但Z使用与过滤器有关的元素,必须在web.xml中用版?.3的DTD?br />qo器可截取和修改进入一个servlet或JSP面的请求或从一个servlet或JSP面发出的相应。在执行一个servlet或JSP面之前Q必L行第一个相关的qo器的doFilterҎ。在该过滤器对其FilterChain对象调用doFilterӞ执行链中的下一个过滤器。如果没有其他过滤器Qservlet或JSP面被执行。过滤器h对到来的ServletRequest对象的全部访问权Q因此,它们可以查看客户机名、查扑ֈ来的cookie{。ؓ了访问servlet或JSP面的输出,qo器可响应对象包裹在一个替w对象(stand-in objectQ中Q比方说把输出篏加到一个缓冲区。在调用FilterChain对象的doFilterҎ之后Q过滤器可检查缓冲区Q如有必要,对它进行修改,然后传送到客户机?br />例如Q程序清?-11帝国难以了一个简单的qo器,只要讉K相关的servlet或JSP面Q它截取请求ƈ在标准输Z打印一个报告(开发过E中在桌面系l上q行Ӟ大多数服务器都可以用这个过滤器Q?br />
E序清单5-11 ReportFilter.java
package moreservlets;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

/** Simple filter that prints a report on the standard output
* whenever the associated servlet or JSP page is accessed.
* <P>
* Taken from More Servlets and JavaServer Pages
* from Prentice Hall and Sun Microsystems Press,
*
http://www.moreservlets.com/.
* © 2002 Marty Hall; may be freely used or adapted.
*/

public class ReportFilter implements Filter {
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest)request;
System.out.println(req.getRemoteHost() +
" tried to access " +
req.getRequestURL() +
" on " + new Date() + ".");
chain.doFilter(request,response);
}

public void init(FilterConfig config)
throws ServletException {
}

public void destroy() {}
}

一旦徏立了一个过滤器Q可以在web.xml中利用filter元素以及filter-nameQQ意名Uͼ、file-classQ完全限定的cdQ和Q可选的Qinit-params子元素声明它。请注意Q元素在web.xml的web-app元素中出现的ơ序不是L的;允许服务器(但不是必需的)强制所需的次序,q且实际中有些服务器也是q样做的。但q里要注意,所有filter元素必须出现在Q意filter-mapping元素之前Q?filter-mapping元素又必d现在所有servlet或servlet-mapping元素之前?br />例如Q给定上q的ReportFilterc,可在web.xml中作Z面的filter声明。它把名UReporter与实际的cReportFilterQ位于moreservletsE序包中Q相兌?br /><filter>
<filter-name>Reporter</filter-name>
<filter-class>moresevlets.ReportFilter</filter-class>
</filter>
一旦命名了一个过滤器Q可利用filter-mapping元素把它与一个或多个servlet或JSP面相关联。关于此工作有两种选择?br />首先Q可使用filter-name和servlet-name子元素把此过滤器与一个特定的servlet名(此servlet名必ȝ后在相同?web.xml文g中用servlet元素声明Q关联。例如,下面的程序片断指C系l只要利用一个定制的URL讉K名ؓSomeServletName 的servlet或JSP面Q就q行名ؓReporter的过滤器?br /><filter-mapping>
<filter-name>Reporter</filter-name>
<servlet-name>SomeServletName</servlet-name>
</filter-mapping>
其次Q可利用filter-name和url-pattern子元素将qo器与一lservlet、JSP面或静态内容相兌。例如,盔R的程序片D|C系l只要访问Web应用中的LURLQ就q行名ؓReporter的过滤器?br /><filter-mapping>
<filter-name>Reporter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
例如Q程序清?-12l出了将ReportFilterqo器与名ؓPageName的servlet相关联的web.xml文g的一部分。名?PageName依次又与一个名为TestPage.jsp的JSP面以及以模式http: //host/webAppPrefix/UrlTest2/ 开头的URL相关联。TestPage.jsp的源代码已经JSP面命名的谈论在前面??分配名称和定制的URL"中给出。事实上Q程序清?- 12中的servlet和servlet-name从该节原封不动地拿q来的。给定这些web.xml,可看C面的标准输出形式的调试报告(换行是ؓ了容易阅读)?br />audit.irs.gov tried to access
http://mycompany.com/deployDemo/UrlTest2/business/tax-plan.html
on Tue Dec 25 13:12:29 EDT 2001.

E序清单5-12 Web.xmlQ说明filter用法的摘录)
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
http://java.sun.com/dtd/web-app_2_3.dtd ">

<web-app>
<filter>
<filter-name>Reporter</filter-name>
<filter-class>moresevlets.ReportFilter</filter-class>
</filter>
<!-- ... -->
<filter-mapping>
<filter-name>Reporter</filter-name>
<servlet-name>PageName</servlet-name>
</filter-mapping>
<!-- ... -->
<servlet>
<servlet-name>PageName</servlet-name>
<jsp-file>/RealPage.jsp</jsp-file>
</servlet>
<!-- ... -->
<servlet-mapping>
<servlet-name> PageName </servlet-name>
<url-pattern>/UrlTest2/*</url-pattern>
</servlet-mapping>
<!-- ... -->
</web-app>


7 指定Ƣ迎?br />
假如用户提供了一个像http: //host/webAppPrefix/directoryName/ q样的包含一个目录名但没有包含文件名的URLQ会发生什么事情呢Q用戯得到一个目录表Q一个错误?q是标准文g的内容?如果得到标准文g内容Q是 index.html、index.jsp、default.html、default.htm或别的什么东西呢Q?br />Welcome-file-list 元素及其辅助的welcome-file元素解决了这个模p的问题。例如,下面的web.xmlҎ出,如果一个URLl出一个目录名但未l出文g名,服务器应该首先试用index.jspQ然后再试用index.html。如果两者都没有扑ֈQ则l果有赖于所用的服务器(如一个目录列表)?br /><welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
虽然许多服务器缺省遵循这U行为,但不一定必这栗因此,明确C用welcom-file-list保证可移植性是一U良好的习惯?br />
8 指定处理错误的页?br />
现在我了解到Q你在开发servlet和JSP面时从不会犯错误,而且你的所有页面是那样的清晎ͼ一般的E序员都不会被它们的搞糊涂。但是,是hM犯错误的Q用户可能会提供不合规定的参敎ͼ使用不正的URL或者不能提供必需的表单字D倹{除此之外,其它开发h员可能不那么l心Q他们应该有些工h克服自己的不?br />error-page元素是用来克服q些问题的。它有两个可能的子元素,分别是:error-code和exception- type。第一个子元素error-code指出在给定的HTTP错误代码出现时用的URL。第二个子元素excpetion-type指出在出现某个给定的Java异常但未捕捉到时使用的URL。error-code和exception-type都利用location元素指出相应的URL。此 URL必须?开始。location所指出的位|处的页面可通过查找HttpServletRequest对象的两个专门的属性来讉K关于错误的信息,q两个属性分别是Qjavax.servlet.error.status_code和javax.servlet.error.message?br />可回忆一下,在web.xml内以正确的次序声明web-app的子元素很重要。这里只要记住,error-page出现在web.xml文g的末Nq,servlet、servlet-name和welcome-file-list之后卛_?br />
8.1 error-code元素
Z更好C解error-code元素的|可考虑一下如果不正确地输入文件名Q大多数站点会作Z么反映。这样做一般会出现一?04错误信息Q它表示不能扑ֈ该文Ӟ但几乎没提供更多有用的信息。另一斚wQ可以试一下在
www.microsoft.com ?/font> www.ibm.com 处或者特别是?/font> www.bea.com 处输出未知的文g名。这是会得出有用的消息,q些消息提供可选择的位|,以便查找感兴的面。提供这h用的错误面对于Web应用来说是很有h值得。事实上rm-error-page子元素)。由form-login-pagel出的HTML表单必须h一个j_security_check?ACTION属性、一个名为j_username的用户名文本字段以及一个名为j_password的口令字Dc?br />例如Q程序清?-19指示服务器用基于表单的验证。Web应用的顶层目录中的一个名为login.jsp的页面将攉用户名和口oQƈ且失败的登陆由相同目录中名为login-error.jsp的页面报告?br />
E序清单5-19 web.xmlQ说明login-config的摘录)
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
http://java.sun.com/dtd/web-app_2_3.dtd ">

<web-app>
<!-- ... -->
<security-constraint> ... </security-constraint>
<login-config>
<auth-method> FORM </auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login-error.jsp</form-error-page>
</form-login-config>
</login-config>
<!-- ... -->
</web-app>


9.2 限制对Web资源的访?br />现在Q可以指C服务器使用何种验证Ҏ了?了不P"你说道,"除非我能指定一个来收到保护?URLQ否则没有多大用处?没错。指些URLq说明他们应该得CU保护正是security-constriaint元素的用途。此元素?web.xml中应该出现在login-config的紧前面。它包含是个可能的子元素Q分别是Qweb-resource-collection?auth-constraint、user-data-constraint和display-name。下面各节对它们进行介l?br />l web-resource-collection
此元素确定应该保护的资源。所有security-constraint元素都必d含至一个web-resource-collectionV此元素׃个给ZQ意标识名U的web-resource-name元素、一个确定应该保护的URL的url-pattern元素、一个指出此保护所适用?HTTP命oQGET、POST{,~省为所有方法)的http-method元素和一个提供资料的可选description元素l成。例如,下面?Web-resource-collection(在security-constratint元素内)指出Web应用的proprietary目录中所有文档应该受C护?br /><security-constraint>
<web-resource-coolection>
<web-resource-name>Proprietary</web-resource-name>
<url-pattern>/propritary/*</url-pattern>
</web-resource-coolection>
<!-- ... -->
</security-constraint>
重要的是应该注意刎ͼurl-pattern仅适用于直接访问这些资源的客户机。特别是Q它不适合于通过MVC体系l构利用 RequestDispatcher来访问的面Q或者不适合于利用类似jsp:forward的手D|讉K的页面。这U不匀U如果利用得当的话很有好处。例如,servlet可利用MVC体系l构查找数据Q把它放到bean中,发送请求到从bean中提取数据的JSP面q显C它。我们希望保证决不直接访问受保护的JSP面Q而只是通过建立该页面将使用的bean的servlet来访问它。url-pattern和auth-contraint元素可通过声明不允怓Q何用L接访问JSP面来提供这U保证。但是,q种不匀U的行ؓ可能让开发h员放松警惕,使他们偶然对应受保护的资源提供不受限制的讉K?
l auth-constraint
管web-resource-collention元素质出了哪些URL应该受到保护Q但是auth-constraint元素却指出哪些用户应该具有受保护资源的访问权。此元素应该包含一个或多个标识h讉K权限的用L别role- name元素Q以及包含(可选)一个描q角色的description元素。例如,下面web.xml中的security-constraint元素部门规定只有指定为Administrator或Big KahunaQ或两者)的用户具有指定资源的讉K权?br /><security-constraint>
<web-resource-coolection> ... </web-resource-coolection>
<auth-constraint>
<role-name>administrator</role-name>
<role-name>kahuna</role-name>
</auth-constraint>
</security-constraint>
重要的是认识刎ͼ到此为止Q这个过E的可移植部分结束了。服务器怎样定哪些用户处于M角色以及它怎样存放用户的口令,完全有赖于具体的pȝ?br />例如QTomcat使用install_dir/conf/tomcat-users.xml用户名与角色名和口令相兌Q正如下面例子中所C,它指出用户joeQ口令bigshotQ和janeQ口令enajQ属于administrator和kahuna角色?br /><tomcat-users>
<user name="joe" password="bigshot" roles="administrator,kahuna" />
<user name="jane" password="enaj" roles="kahuna" />
</tomcat-users>
l user-data-constraint
q个可选的元素指出在访问相兌源时使用M传输层保护。它必须包含一个transport-guarantee子元素(合法gؓNONE?INTEGRAL或CONFIDENTIALQ,q且可选地包含一个description元素。transport-guarantee为NONE值将Ҏ用的通讯协议不加限制。INTEGRALDC数据必M一U防止截取它的h阅读它的方式传送。虽然原理上Qƈ且在未来的HTTP版本中)Q在 INTEGRAL和CONFIDENTIAL之间可能会有差别Q但在当前实践中Q他们都只是单地要求用SSL。例如,下面指示服务器只允许对相兌源做 HTTPSq接Q?br /><security-constraint>
<!-- ... -->
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
l display-name
security-constraint的这个很用的子元素给予可能由GUI工具使用的安全约束项一个名U?br />9.3 分配角色?br />q今为止Q讨论已l集中到完全由容器(服务器)处理的安全问题之上了。但servlet以及JSP面也能够处理它们自q安全问题?br />例如Q容器可能允许用户从bigwig或bigcheese角色讉K一个显CZh员额外紧贴的面Q但只允许bigwig用户修改此页面的参数。完成这U更l致的控制的一U常见方法是调用HttpServletRequset的isUserInRoleҎQƈ据此修改讉K?br />Servlet?security-role-ref子元素提供出现在服务器专用口令文件中的安全角色名的一个别名。例如,假如~写了一个调?request.isUserInRoleQ?boss"Q的servletQ但后来该servlet被用在了一个其口o文g调用角色manager而不是boss的服务器中。下面的E序D该servlet能够使用q两个名UC的Q何一个?br /><servlet>
<!-- ... -->
<security-role-ref>
<role-name>boss</role-name> <!-- New alias -->
<role-link>manager</role-link> <!-- Real name -->
</security-role-ref>
</servlet>
也可以在web-app内利用security-role元素提供出现在role-name元素中的所有安全角色的一个全局列表。分别地生命角色佉KUIDEҎ处理安全信息?br />
10 控制会话时

如果某个会话在一定的旉内未被访问,服务器可把它扔掉以节U内存。可利用HttpSession的setMaxInactiveIntervalҎ直接讄个别会话对象的超时倹{如果不采用q种ҎQ则~省的超时值由具体的服务器军_。但可利用session-config和session- timeout元素来给Z个适用于所有服务器的明的时倹{超时值的单位为分钟,因此Q下面的例子讄~省会话时gؓ三个时Q?80分钟Q?br /><session-config>
<session-timeout>180</session-timeout>
</session-config>

11 Web应用的文档化

来多的开发环境开始提供servlet和JSP的直接支持。例子有Borland Jbuilder Enterprise Edition、Macromedia UltraDev、Allaire JRun StudioQ写此文Ӟ已被Macromedia收购Q以及IBM VisuaAge for Java{?br />大量的web.xml元素不仅是ؓ服务器设计的Q而且q是为可视开发环境设计的。它们包括icon、display-name和discription{?br />可回忆一下,在web.xml内以适当地次序声明web-app子元素很重要。不q,q里只要Cicon、display-name和description是web.xml的web-app元素内的前三个合法元素即可?br />l icon
icon元素指出GUI工具可用来代表Web应用的一个和两个囑փ文g。可利用small-icon元素指定一q?6 x 16的GIF或JPEG囑փQ用large-icon元素指定一q?2 x 32的图像。下面D一个例子:
<icon>
<small-icon>/images/small-book.gif</small-icon>
<large-icon>/images/tome.jpg</large-icon>
</icon>
l display-name
display-name元素提供GUI工具可能会用来标记此Web应用的一个名U。下面是个例子?br /><display-name>Rare Books</display-name>
l description
description元素提供解释性文本,如下所C:
<description>
This Web application represents the store developed for
rare-books.com, an online bookstore specializing in rare
and limited-edition books.
</description>

12 兌文g与MIMEcd

服务器一般都h一U让Web站点理员将文g扩展名与媒体相关联的Ҏ。例如,会自动l予名ؓmom.jpg的文件一个image/jpeg的MIME cd。但是,假如你的Web应用h几个不寻常的文gQ你希望保证它们在发送到客户机时分配为某UMIMEcd。mime-mapping元素Q具?extension和mime-type子元素)可提供这U保证。例如,下面的代码指C服务器application/x-fubar的MIMEcd分配l所有以.fool尾的文件?br /><mime-mapping>
<extension>foo</extension>
<mime-type>application/x-fubar</mime-type>
</mime-mapping>
或许Q你的Web应用希望重蝲QoverrideQ标准的映射。例如,下面的代码将告诉服务器在发送到客户机时指定.ps文g作ؓU文本(text/plainQ而不是作为PostScriptQapplication/postscriptQ?br /><mime-mapping>
<extension>ps</extension>
<mime-type>application/postscript</mime-type>
</mime-mapping>


13 定位TLD

JSP taglib元素h一个必要的uri属性,它给Z个TLDQTag Library DescriptorQ文件相对于Web应用的根的位|。TLD文g的实际名U在发布新的标签库版本时可能会改变,但我们希望避免更Ҏ有现有JSP面。此外,可能q希望用保持taglib元素的简l性的一个简短的uri。这是部v描述W文件的taglib元素z场的所在了。Taglib包含两个子元素:taglib-uri和taglib-location。taglib-uri元素应该与用于JSP taglib元素的uri属性的东西相匹配。Taglib-location元素l出TLD文g的实际位|。例如,假如你将文gchart-tags- 1.3beta.tld攑֜WebApp/WEB-INF/tlds中。现在,假如web.xml在web-app元素内包含下列内宏V?br /><taglib>
<taglib-uri>/charts.tld</taglib-uri>
<taglib-location>
/WEB-INF/tlds/chart-tags-1.3beta.tld
</taglib-location>
</taglib>
l出q个说明后,JSP面可通过下面的简化Ş式用标{ֺ?br /><%@ taglib uri="/charts.tld" prefix="somePrefix" %>

14 指定应用事g监听E序

应用事g监听器程序是建立或修改servlet环境或会话对象时通知的类。它们是servlet规范的版?.3中的新内宏V这里只单地说明用来向Web应用注册一个监听程序的web.xml的用法?br />注册一个监听程序涉及在web.xml的web-app元素内放|一个listener元素。在listener元素内,listener-class元素列出监听E序的完整的限定cdQ如下所C:
<listener>
<listener-class>package.ListenerClass</listener-class>
</listener>
虽然listener元素的结构很单,但请不要忘记Q必L地l出web-app元素内的子元素的ơ序。listener元素位于所有的servlet 元素之前以及所有filter-mapping元素之后。此外,因ؓ应用生存期监听程序是serlvet规范?.3版本中的新内容,所以必M?web.xml DTD?.3版本Q而不?.2版本?br />例如Q程序清?-20l出一个名为ContextReporter的简单的监听E序Q只要Web应用的Servlet-Context建立Q如装蝲Web应用Q或消除Q如服务器关闭)Ӟ它就在标准输Z昄一条消息。程序清?-21l出此监听程序注册所需要的web.xml文g的一部分?br />
E序清单5-20 ContextReporterjava
package moreservlets;

import javax.servlet.*;
import java.util.*;

/** Simple listener that prints a report on the standard output
* when the ServletContext is created or destroyed.
* <P>
* Taken from More Servlets and JavaServer Pages
* from Prentice Hall and Sun Microsystems Press,
*
http://www.moreservlets.com/.
* © 2002 Marty Hall; may be freely used or adapted.
*/

public class ContextReporter implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
System.out.println("Context created on " +
new Date() + ".");
}

public void contextDestroyed(ServletContextEvent event) {
System.out.println("Context destroyed on " +
new Date() + ".");
}
}


E序清单5-21 web.xmlQ声明一个监听程序的摘录Q?br /><?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
http://java.sun.com/dtd/web-app_2_3.dtd ">

<web-app>
<!-- ... -->
<filter-mapping> ?</filter-mapping>
<listener>
<listener-class>package.ListenerClass</listener-class>
</listener>
<servlet> ... </servlet>
<!-- ... -->
</web-app>


15 J2EE元素

本节描述用作J2EE环境l成部分的Web应用的web.xml元素。这里将提供一个简明的介绍Q详l内容可以参?/font> http://java.sun.com/j2ee/j2ee-1_3-fr-spec.pdf 的Java 2 Plantform Enterprise Edition版本1.3规范的第5章?br />l distributable
distributable 元素指出QWeb应用是以q样的方式编E的Q即Q支持集的服务器可安全地在多个服务器上分布Web应用。例如,一个可分布的应用必d使用 Serializable对象作ؓ其HttpSession对象的属性,而且必须避免用实例变量(字段Q来实现持箋性。distributable元素直接出现在discription元素之后Qƈ且不包含子元素或数据Q它只是一个如下的标志?br /><distributable />
l resource-env-ref
resource -env-ref元素声明一个与某个资源有关的管理对象。此元素׃个可选的description元素、一个resource-env-ref- name元素Q一个相对于java:comp/env环境的JNDI名)以及一个resource-env-type元素Q指定资源类型的完全限定的类Q,如下所C:
<resource-env-ref>
<resource-env-ref-name>
jms/StockQueue
</resource-env-ref-name>
<resource-env-ref-type>
javax.jms.Queue
</resource-env-ref-type>
</resource-env-ref>
l env-entry
env -entry元素声明Web应用的环境项。它׃个可选的description元素、一个env-entry-name元素Q一个相对于java: comp/env环境JNDI名)、一个env-entry-value元素Q项|以及一个env-entry-type元素Qjava.langE序包中一个类型的完全限定cdQjava.lang.Boolean、java.lang.String{)l成。下面是一个例子:
<env-entry>
<env-entry-name>minAmout</env-entry-name>
<env-entry-value>100.00</env-entry-value>
<env-entry-type>minAmout</env-entry-type>
</env-entry>
l ejb-ref
ejb -ref元素声明对一个EJB的主目录的应用。它׃个可选的description元素、一个ejb-ref-name元素Q相对于java: comp/env的EJB应用Q、一个ejb-ref-type元素Qbean的类型,Entity或SessionQ、一个home元素Qbean的主目录接口的完全限定名Q、一个remote元素Qbean的远E接口的完全限定名)以及一个可选的ejb-link元素Q当前bean链接的另一?bean的名Uͼl成?br />l ejb-local-ref
ejb-local-ref元素声明一个EJB的本C目录的引用。除了用local-home代替home外,此元素具有与ejb-ref元素相同的属性ƈ以相同的方式使用?br />


下蝲记忆 2006-05-24 09:22 发表评论
]]>
Rational Test工具用途列?/title><link>http://www.tkk7.com/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.tkk7.com/jjunix/archive/2006/05/20/47230.html</guid><wfw:comment>http://www.tkk7.com/jjunix/comments/47230.html</wfw:comment><comments>http://www.tkk7.com/jjunix/archive/2006/05/20/47230.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jjunix/comments/commentRss/47230.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jjunix/services/trackbacks/47230.html</trackback:ping><description><![CDATA[Rational Test工具用途列?内容来自互联|? <br />1.Rational Administrator——主要用于创建新的PROJECTQ包括需?RequestPro)、测?Test Manager)、及~陷跟踪(Clear Quest)的数据库创徏q徏立关?<br />2.ClearQuest——变更管理及~陷跟踪 <br />3.ClearQuest Maintenance Tool —?ClearQuestl护工具Q主要用于创建、修攏V删除ClearQuest的Connection <br />4.ClearQuest Designer —?ClearQuestl护工具,主要用于l护某一指定的Connect/Schema的用戗访问权限及其他属性定义(如缺LU){维?TestManager 试计划制定及执行工?<br />5.License Key Administrator Rationa——l注册理?<br />6.PureCoverage —?白盒试工具Q记录代码覆盖率。不支持C++ Builder/Delphi <br />7.Purify —?白盒试工具Q用于内存泄漏检?<br />8.Quantify —?白盒试工具Q用于性能瓉分析 <br />9.Purify Plus —?包括以上三个工具QPurifyQQuantifyQPureCoverage <br />10.RequisitePro —?需求分析工?<br />11.Robot —?自动试工具Q类似WINRUNNDERQ加上VT可以做ƈ发测?<br />12.SoDA for Word —?报表生成工具Q需要VBA试。一般不直接q行Q运行后SoDA在word中增加了菜单Q可以进行模板设计?13.TestFactory —?可靠性测试,非常耗时?<img src ="http://www.tkk7.com/jjunix/aggbug/47230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jjunix/" target="_blank">下蝲记忆</a> 2006-05-20 22:38 <a href="http://www.tkk7.com/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.tkk7.com/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.tkk7.com/jjunix/archive/2006/04/21/42288.html</guid><wfw:comment>http://www.tkk7.com/jjunix/comments/42288.html</wfw:comment><comments>http://www.tkk7.com/jjunix/archive/2006/04/21/42288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jjunix/comments/commentRss/42288.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/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">课b   ??/font> </th> </tr> <tr> <td> <font size="2">MySQL</font> </td> <td> <a > <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 > <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 > <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 > <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 > <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 > <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 >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 >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 >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 ><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 ><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 >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׃accessq不是作ZҎ务运行,所以url的方法对他不适用。access可以通过odbcQ也可以通过服务器映\径的形式扑ֈ.mdb文g,参见<a >http://rmijdbc.objectweb.org/Access/access.html</a><br /><br /></div> <img src ="http://www.tkk7.com/jjunix/aggbug/42288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jjunix/" target="_blank">下蝲记忆</a> 2006-04-21 11:20 <a href="http://www.tkk7.com/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.tkk7.com/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.tkk7.com/jjunix/archive/2006/04/14/41158.html</guid><wfw:comment>http://www.tkk7.com/jjunix/comments/41158.html</wfw:comment><comments>http://www.tkk7.com/jjunix/archive/2006/04/14/41158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jjunix/comments/commentRss/41158.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jjunix/services/trackbacks/41158.html</trackback:ping><description><![CDATA[ <p>1. <a target="_blank"><font color="#000080">Java2s</font></a><font color="#000080"></font> <a target="_blank"><font color="#000080">http://www.java2s.com</font></a><br />按语a除了Java,q个|站q有JavaScript DHTML,C#/C Sharp,C/ANSI-C,SQL, MySQL{类.</p> <p>按类型包含三c?-- Example,Products,Articles,h搜烦功能,方便易用.</p> <p>2. <a target="_blank"><font color="#000080">CodeZoo</font></a><font color="#000080"></font> <a target="_blank"><font color="#000080">http://www.codezoo.com</font></a><br />O'Reily?包含Java,Ruby,Python.<br /><br />3 . <a target="_blank"><font color="#000080">Koders</font></a> <font color="#000080"></font><a target="_blank"><font color="#000080">http://www.koders.com</font></a><br />代码搜烦|站,输入代码关键?卛_他的目搜烦.多种语言.<br /><br />4 . <a target="_blank"><font color="#000080">Resources for Java server-side developers</font></a><font color="#000080"></font> <a target="_blank"><font color="#000080">http://www.java201.com</font></a><br />UJava的而且,分类很细,重要的是q有Free Java Books!!!</p> <img src ="http://www.tkk7.com/jjunix/aggbug/41158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jjunix/" target="_blank">下蝲记忆</a> 2006-04-14 19:49 <a href="http://www.tkk7.com/jjunix/archive/2006/04/14/41158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>毕业设计正式开始了http://www.tkk7.com/jjunix/archive/2006/04/03/38943.html下蝲记忆下蝲记忆Mon, 03 Apr 2006 07:29:00 GMThttp://www.tkk7.com/jjunix/archive/2006/04/03/38943.htmlhttp://www.tkk7.com/jjunix/comments/38943.htmlhttp://www.tkk7.com/jjunix/archive/2006/04/03/38943.html#Feedback0http://www.tkk7.com/jjunix/comments/commentRss/38943.htmlhttp://www.tkk7.com/jjunix/services/trackbacks/38943.html?/span>天开始做毕业设计?我的题目是关于RSS解析,初步打算采用C/Sl构,Java界面,不打用swt,而是准备用Mustang版的Swing,利用Beta版试了试界面效果,实让h兴奋! 如果旉允许的话再做一个B/S的实?两者共同存?同步Feed资源. 另外关于B/S的那部分, RSS解析是主要部?除此之外q有其他一些功?更像是一个Web2.0的桌面系l?

下蝲记忆 2006-04-03 15:29 发表评论
]]>
以最单的代码展现 Ajaxhttp://www.tkk7.com/jjunix/archive/2006/03/27/37547.html下蝲记忆下蝲记忆Mon, 27 Mar 2006 02:02:00 GMThttp://www.tkk7.com/jjunix/archive/2006/03/27/37547.htmlhttp://www.tkk7.com/jjunix/comments/37547.htmlhttp://www.tkk7.com/jjunix/archive/2006/03/27/37547.html#Feedback1http://www.tkk7.com/jjunix/comments/commentRss/37547.htmlhttp://www.tkk7.com/jjunix/services/trackbacks/37547.htmlhttp://www.xmlhttp.cn
下面我演CZ下我自己~写的一D代?
1) 准备一个Servlet,当请求该Servlet?它将q回以HTML格式q回"Hello World!"字样.

public class Hello extends HttpServlet {
    
public void doGet(HttpServletRequest req, HttpServletResponse res)
        
throws ServletException, IOException {
        
this.doPost(req, res);
    }

    
public void doPost(HttpServletRequest req, HttpServletResponse res)
        
throws ServletException, IOException {
        res.setContentType(
"text/html");
        res.setHeader(
"Cache-Control","no-cache");
        res.getWriter().write(
"Hello World!");
    }

}
2)准备一个HTML文g.当点?Order"按钮?|页向服务器发送异步请?h成功则在按钮下方昄"Hello World!".
 1<html>
 2<head>
 3    <title>Test Ajax</title>
 4    <script language="JavaScript">
 5        var req;
 6        var url;
 7        function requestServlet() {
 8            if (window.XMLHttpRequest) {
 9                req = new XMLHttpRequest();
10            }
 else if (window.ActiveXObject) {
11                req = new ActiveXObject("Microsoft.XMLHTTP");
12            }

13            var url = "http://localhost:8080/ajax/HelloServlet";
14            //var url = "HelloServlet";    //相对,l对地址都可?/span>
15            req.open("POST", url, true);
16            req.setRequestHeader("Content-Type""application/x-www-form-urlencoded");
17            req.onreadystatechange=validator;
18            req.send();
19        }

20        function validator() {
21            if (req.readystate == 4{
22                if (req.status == 200{
23                    msg.innerHTML = req.responseText;
24                }

25                else{
26                    msg.innerHTML = "req.status = " + req.status;
27                }

28            }

29        }

30    
</script>
31</head>
32
33<body>
34<input type="button" name="order" value="Order" onClick="requestServlet()"/><br/>
35<span id="msg"></span>
36</body>
37</html>
代码?-12行用来生一个XMLHttpRequest对象,之后调用该对象Open函数对其初始?其中的布?true"用来表明是否异步h.情参?a target="_blank">XMLHttp.cn的注?/a>.17?a target="_blank">onreadystatechange的意思是一?a target="_blank">readyState的值发生变化就会调用validator()函数.20行中readyState如果{于4表明从服务器接收数据完毕,此时可以通过responseBody,responseText或responseXML来获取完整的回应数据,不过在此动作之前最好先判断一下请求到的内Ҏ否是你想要的内容XMLHttpRequest的成?a target="_blank">status存储的是当前h的http状态码,如果它等?00表明h成功.最常见的错误是404代码?Not Found"错误.要注意的是此属性必d数据接受完毕之后,也就是说readyState{于4时才能获?
  另外对于处理XML文g则需用到XMLHttpRequest的responseXML属?不是Ҏ),它将响应信息格式化ؓXml Document对象q返?例如把Servlet的doPost()Ҏ修改?
1resp.setContentType("text/xml");
2resp.setHeader("Cache-Control","no-cache");
3resp.getWriter().write("<message>Hello World!</message>");
注意W一行要讄文档cd为XML.
此时JavaScript解析时应使用ResponseXML?
1function validator() {
2    if (req.readystate == 4) {
3        if(req.status==200){
4            var message = req.responseXML.getElementsByTagName("message")[0];
5            msg.innerHTML = message.childNodes[0].nodeValue;
6        }
7    }
8}
体验一下Ajax? ^_^

下蝲记忆 2006-03-27 10:02 发表评论
]]>
RSS1.0, RSS2.0 Specification and Feed Validatorhttp://www.tkk7.com/jjunix/archive/2006/03/21/36647.html下蝲记忆下蝲记忆Tue, 21 Mar 2006 07:38:00 GMThttp://www.tkk7.com/jjunix/archive/2006/03/21/36647.htmlhttp://www.tkk7.com/jjunix/comments/36647.htmlhttp://www.tkk7.com/jjunix/archive/2006/03/21/36647.html#Feedback0http://www.tkk7.com/jjunix/comments/commentRss/36647.htmlhttp://www.tkk7.com/jjunix/services/trackbacks/36647.html 最q开始做毕业设计?我的毕业设计的难点之一?Rss 自动解析,了解了这些东西后有了一些思\.

注意:

RSS in RSS2.0 is an acronym for Really Simple Syndication.
RSS in RSS1.0 is an acronym for RDF Site Summary.
他们走的两条不同的发展\U?

All date-times in RSS conform to the Date and Time Specification of
RFC 822 , with the exception that the year may be expressed with two characters or four characters (four preferred).
RSS1.0 Specification :
http://web.resource.org/rss/1.0/
RSS2.0 Specification : http://blogs.law.harvard.edu/tech/rss
FEED Validator :          http://www.feedvalidator.org
Attachement:
  RSS2.0 specification in Chinese:  
http://www.china-lv.com/Blog/article.asp?id=71



下蝲记忆 2006-03-21 15:38 发表评论
]]>
Javascript libraries rounduphttp://www.tkk7.com/jjunix/archive/2006/03/18/35996.html下蝲记忆下蝲记忆Sat, 18 Mar 2006 14:42:00 GMThttp://www.tkk7.com/jjunix/archive/2006/03/18/35996.htmlhttp://www.tkk7.com/jjunix/comments/35996.htmlhttp://www.tkk7.com/jjunix/archive/2006/03/18/35996.html#Feedback0http://www.tkk7.com/jjunix/comments/commentRss/35996.htmlhttp://www.tkk7.com/jjunix/services/trackbacks/35996.html 转蝲: Permalink  好东西要留个存档以免丢失 ^_^
Javascript libraries roundup
Javascript开发包汇?

Prototype
Prototype is a JavaScript framework that aims to ease development of dynamic web applications.

Homepage: http://prototype.conio.net

Documentation:
http://blogs.ebusiness-apps.com/jordan/pages/Prototype%20Library%20Info.htm
http://www.sergiopereira.com/articles/prototype.js.html
http://wiki.script.aculo.us/scriptaculous/show/Prototype

Rico
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.

Homepage: http://openrico.org/rico/home.page
Documentation: http://openrico.org/rico/docs.page
Demos: http://openrico.org/rico/demos.page

MochiKit
MochiKit is a highly documented and well tested, suite of JavaScript libraries that will help you get things done, fast.

Homepage: http://www.mochikit.com/
Documentation: http://www.mochikit.com/doc/html/MochiKit/index.html
Demos: http://www.mochikit.com/demos.html

Dojo Toolkit
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.

Homepage: http://www.dojotoolkit.org/
Documentation: http://dojotoolkit.org/docs/
Demos: http://dojotoolkit.org/examples/

Behaviour
Separate Structure (xhtml) from Behavior (javascript)

Homepage: http://bennolan.com/behaviour/

Solvent
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.

Homepage: http://sourceforge.net/projects/solvent/
Documentation: http://sourceforge.net/docman/?group_id=144164

Moo.FX
moo.fx is a superlightweight, ultratiny, megasmall javascript effects library, written with prototype.js.

Homepage: http://moofx.mad4milk.net/
Demo: http://moofx.mad4milk.net/tests.html

WZ_DradDrop
A Cross-browser JavaScript DHTML Library which adds Drag Drop functionality to layers and to any desired image

Homepage: http://www.walterzorn.com/dragdrop/dragdrop_e.htm

WZ_jsGraphics
High Performance JavaScript Vector Graphics Library.

Homepage: http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm

overLIB
overLIB is a JavaScript library created to enhance websites with small popup information boxes (like tooltips) to help visitors around your website.

Homepage: http://www.bosrup.com/web/overlib/
Documentation: http://www.bosrup.com/web/overlib/?Documentation
Command reference: http://www.bosrup.com/web/overlib/?Command_Reference

Scriptaculous
Javascript visual effects, togather with prototype.js

Homepage: http://script.aculo.us/

SACK
Simple AJAX Code-Kit

Homepage: http://twilightuniverse.com/projects/sack/
Documentation: http://twilightuniverse.com/projects/sack/docs.php

Sarissa
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.

Homepage: http://sarissa.sourceforge.net/doc/

Nifty Corners
A small library for making rounded corners with Javascript.

Homepage: http://pro.html.it/esempio/nifty/nifty1js.html

dp.SyntaxHighlighter
dp.SyntaxHighlighter is a free JavaScript library for source code syntax highlighting.

Homepage: http://www.dreamprojections.com/SyntaxHighlighter/
Documentation: http://www.dreamprojections.com/SyntaxHighlighter/Usage.aspx
Demo: http://www.dreamprojections.com/SyntaxHighlighter/Examples.aspx

AJAX.NET
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.

Homepage: http://weblogs.asp.net/mschwarz/archive/2005/04/07/397504.aspx

TOXIC
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.

Homepage: http://www.dotvoid.com/view.php?id=40

Plex Toolkit
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.

Homepage: http://www.plextk.org/

CPaint
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.

Homepage: http://cpaint.booleansystems.com/
Docs: http://cpaint.booleansystems.com/doc/

DOM-Drag
DOM-Drag is a lightweight, easy to use, dragging API for modern DHTML browsers.

Homepage: http://www.youngpup.net/2001/domdrag/
Tutorials: http://www.youngpup.net/2001/domdrag/tutorial
Demo: http://www.youngpup.net/2001/domdrag/examples

Tibet
Enterprise Class AJAX

Homepage: http://www.technicalpursuit.com/ajax.htm

Zimbra
Rubust AJAX framework

Homepage: http://www.zimbra.com
Documentation: http://www.zimbra.com/products/documentation.html
Demo: http://www.zimbra.com/products/hosted_demo.php

qooxdoo
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.

Homepage: http://qooxdoo.oss.schlund.de
Documentation: http://qooxdoo.oss.schlund.de/section/documentation
Demo: http://qooxdoo.oss.schlund.de/counter/refer.php?id=5

AJFORM
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.

Homepage: http://redredmusic.com/brendon/ajform/

ThyApi
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.

Homepage: http://sourceforge.net/projects/thyapi/

Engine
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.

Homepage: http://www.imnmotion.com/projects/engine/
Documentation: http://www.imnmotion.com/projects/engine/api/engine_api.html

AJAXGear Toolkit
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.

Homepage: http://www.ajaxgear.com

Interactive Website Framework
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.

Homepage: http://sourceforge.net/projects/iwf/

RSLite
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.

Homepage: http://www.ashleyit.com/rs/main.htm
Demo: http://www.ashleyit.com/rs/techniques.htm

XHConn
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.

Homepage: http://xkr.us/code/javascript/XHConn/

Taconite
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.

Homepage: http://taconite.sourceforge.net/
Documentation: http://taconite.sourceforge.net/docs/jsdocs/index.html
Demo: http://taconite.sourceforge.net/examples.html

qForms
Great Javascript API for interfacing forms.

Homepage: http://pengoworks.com/index.cfm?action=get:qforms
Documentation: http://pengoworks.com/qforms/docs/
Demo: http://pengoworks.com/qforms/docs/examples/

JSPkg
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.

Homepage: http://jspkg.sourceforge.net/

Ajaxcaller
AjaxCaller is a thin XMLHttpRequest wrapper used in all the AjaxPatterns demos. The focus is on ease-of-use and full HTTP method support.

Homepage: http://ajaxify.com/run/testAjaxCaller/

libXmlRequest
The XmlRequest library contains a two public request functions, getXml and postXml, that may be used to send synchronous and asynchronous XML Http requests from Internet Explorer and Mozilla.

Homepage: http://www.whitefrost.com/reference/2005/09/09/libXmlRequest.html

SAJAX
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

Homepage: http://www.modernmethod.com/sajax/
Demo: http://www.modernmethod.com/sajax/examples.phtml

Sardalya
A small library for making dynamic HTML programming easy and fun.

Homepage: http://www.sarmal.com/sardalya/Default.aspx
Demo: http://www.sarmal.com/sardalya/Samples.aspx

X
One of the best javascript libraries out there.

Homepage: http://www.cross-browser.com/toys/

AjaxRequest
AjaxRequest is a layer over the XMLHttpRequest functionality which makes the communication between Javascript and the server easier for developers.

Homepage: http://ajaxtoolbox.com/request/
Documentation: http://ajaxtoolbox.com/request/documentation.php
Demo: http://ajaxtoolbox.com/request/examples.php

PHP based AJAX Frameworks

AjaxAC
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.

Homepage: http://ajax.zervaas.com.au

XOAD
XOAD, formerly known as NAJAX, is a PHP based AJAX/XAP object oriented framework that allows you to create richer web applications.

Homepage: http://www.xoad.org
Documentation: http://www.xoad.org/documentation/source/
Demo: http://www.xoad.org/examples/

PAJAJ
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.

Homepage: http://sourceforge.net/projects/pajaj/
Documentation: http://www.wassons.org/pajaj/public/docs/index.php

Symfony
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.

AjaxBlog: http://ajaxblog.com/arc…?application-in-php-in-minutes-with-symfony

Homepage: www.symfony-project.com
Documentation: http://www.symfony-project.com/content/documentation.html
http://www.symfony-project.com/trac/wiki

XAJAX
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 without reloading the page.

Homepage: http://xajax.sourceforge.net/

PEAR:: HTML_AJAX
Provides PHP and JavaScript libraries for performing AJAX (Communication from JavaScript to your server without reloading the page)

Homepage: http://pear.php.net/package/HTML_AJAX
Documentation: http://pear.php.net/package/HTML_AJAX/docs

Flexible AJAX
Flexible Ajax is a handler to combine the remote scripting technology, also known as AJAX (Asynchronous Javascript and XML), with a php-based backend.

Homepage: http://tripdown.de/flxajax/
Demo: http://tripdown.de/flexible_ajax_example.php

Javascript libs for Flash:

FlashObject
FlashObject is a small Javascript file used for embedding Macromedia Flash content.

Homepage: http://blog.deconcept.com/flashobject/

OSFlash - Flashjs
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.

Homepage: http://www.osflash.org/doku.php?id=flashjs
Documentation: http://www.mustardlab.com/developer/flash/jscommunication/

AFLAX
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.

Homepage: http://www.aflax.org

Java based AJAX Frameworks

ZK
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.

Homepage: http://zk1.sourceforge.net
Demo: http://www.potix.com/zkdemo/userguide



下蝲记忆 2006-03-18 22:42 发表评论
]]>
Java Threadhttp://www.tkk7.com/jjunix/archive/2006/03/18/35915.html下蝲记忆下蝲记忆Sat, 18 Mar 2006 01:20:00 GMThttp://www.tkk7.com/jjunix/archive/2006/03/18/35915.htmlhttp://www.tkk7.com/jjunix/comments/35915.htmlhttp://www.tkk7.com/jjunix/archive/2006/03/18/35915.html#Feedback0http://www.tkk7.com/jjunix/comments/commentRss/35915.htmlhttp://www.tkk7.com/jjunix/services/trackbacks/35915.html Java|络~程里关于线E有q样几句?

  每个q程都有自己的一块内?而在资源上对U程的处理要Ҏ的多,因ؓU程可以׃n内存. .... 多线E服务器(以及其他多线E程?,要求E序员处理单U程E序所不存在的问题,特别是要兛_安全问题和生命周期的问题.因ؓ不同的线E共享相同的内存,所以一个线E完全有可能破坏另一个线E用的所有变量和数据l构.因此,不同的线E必d它们何时使用哪个资源及其心.


下蝲记忆 2006-03-18 09:20 发表评论
]]>
վ֩ģ壺 AV߹ۿ | ѻɫëƬƵ| avҹƬƷӰ | ޱٸ뼤| þó18վ| 18Ʒ׽߹ۿ | ȺӰԺ߹ۿѹۿֱ| 69˾ƷƵ | aëƬȫƵ18| ҹլѹۿ| һַ| fuli߹ۿ| avƬ쿴| žӰ߹ۿѸ| ޾Ʒ| 㽶߹ۿ| ѹۿվ| ҹһƵ| Ƶ߲| 4huĻӰԺwww| ߹ۿΪƵ| AVþþƷ| ɫavƷר| Ƶ߹ۿ | ŷձ߹ۿ| һëƬѲ| ëƬvipԱ߿| þ޾ƷƷ| 鴤һһgifƵ| պƵѹۿ| ޾ƷѹۿƵ| 91Ƶѹۿۿ| ƷƷŮѹۿ| 91۲޾Ʒ| һƵ| ޾Ʒ˳߹ۿ| ŷպĻһ | AV߲ | AV뾫Ʒ| ɫʹۺ߹ۿ| 84paoǿѸ|