一个AJAX连接池封装

2010-04-29 14:59:29.0
兼容IE6/7/8、FireFox、Opera、Google Chrome这四类浏览器
/**
* AJAX 连接池
* AJAXConnectionPool Build in 2009.7.10
* @author CodingMouse
* @version 1.0
*/
var AJAXConnectionPool = function() {
// 任务队列
var taskQueue = [];
// 请求缓冲池
var requestBufferPool = [];
// 最大连接数
var maxThreadNumber = 2;
return {
/**
* 获取空闲请求
* @return {空闲请求对象}
*/
getIdleRequest : function() {
var request = null;
for (var i = 0; i < maxThreadNumber; i++) {
if (requestBufferPool[i].readyState == 0) {
request = requestBufferPool[i];
break;
}
}
return request;
},
/**
* 初始化
* @param {最大连接数} max
*/
init : function(max) {
if (max != null)
maxThreadNumber = max;
for (var k = 0; k < maxThreadNumber; k++) {
var request = null;
if (window.XMLHttpRequest) {         // 如果是 Google Chrome、 Mozilla Firefox、Netscape、Opera 8.0+、Safari、IE7+ 等浏览器
request = new XMLHttpRequest();
if (request.overrideMimeType) {  // 设置 MiME 类别
/*
* 有些版本的浏览器在处理服务器返回的未包含XML mime-type头部
* 信息的内容时会报错,因此,要确保返回的内容包含text/xml信息。
*/
request.overrideMimeType("text/xml");
}
} else if (window.ActiveXObject) {   // 如果是 Internet Explorer 6.0- 浏览器
var msXml = [
"Msxml2.XMLHTTP.6.0",
"Msxml2.XMLHTTP.5.0",
"Msxml2.XMLHTTP.4.0",
"Msxml2.XMLHTTP.3.0",
"Msxml2.XMLHTTP",
"Microsoft.XMLHTTP"];
for(var i = 0; i < msXml.length; i++) {
try{
request = new ActiveXObject(msXml[i]);
break;
}catch(e) {
request = null;
}
}
if (request == null) {
alert("Sorry! Because you are using a browser that does not support AJAX, the server can not process a request submitted!");
return;
}
}
requestBufferPool.push(request);
}
},
/**
* 获取浏览器类型
* @return {浏览器类型字串}
*/
getBrowserType : function() {
if (navigator.userAgent.indexOf("MSIE") > 0) {
return "MSIE";     // IE浏览器
} else if (navigator.userAgent.indexOf("Firefox") > 0) {
return "Firefox";  // Firefox浏览器
} else if (navigator.userAgent.indexOf("Safari") > 0) {
return "Safari";   // Safan浏览器
} else if (navigator.userAgent.indexOf("Camino") > 0) {
return "Camino";   // Camino浏览器
} else if (navigator.userAgent.indexOf("Gecko/") > 0) {
return "Gecko";    // Gecko浏览器
} else {
return "Unknown";  // 未知浏览器
}
},
/**
* 发送请求
*
* @param {请求方法 post|get} method
* @param {请求URL地址} url
* @param {数据} data
* @param {回调函数} callback
* @param {作用域} scope
* @param {是否发送异步请求,注意:Firefox浏览器的同步请求时不能执行回调方法 true|false} isAsync
*/
send : function(method, url, data, callback, scope, isAsync) {
// XML 回调句柄
var xmlCallbackHandler = function() {
if (request.readyState < 4) {
window.status = "Loading...";
} else if (request.readyState == 4) {
if (request.status == 200) {
window.status = "Finished.";
if (handler.func != null) {
handler.func.call(handler.scope != null
? handler.scope
: window, request.responseText,
request.responseXML, request.status);
}
request.abort();
if (taskQueue.length > 0) {
// 这里有多个任务处于队列中等待连接,首先执行第一个任务
var task = taskQueue.shift();
AJAXConnectionPool.send(task.method, task.url, task.data,
task.callback, task.scope, isAsync);
}
} else if (request.status == 404) {
window.status = "Requested URL is not found.";
alert ("Requested URL is not found.");
} else if (request.status == 403) {
window.status = "Access denied.";
alert("Access denied.");
} else {
window.status = "Requested status is " + request.status;
alert("Requested status is " + request.status);
}
} else {
(function() {
throw request.status;
}).call(handler.scope != null ? handler.scope : window);
}
};
// 获取空闲请求
var request = AJAXConnectionPool.getIdleRequest();
// 这是一个空闲请求
if (request != null) {
var handler = {
func : callback,
scope : scope
};
if (method.toLowerCase() == "get") {
// 添加时间戳以防止浏览器缓存页面数据
url += ((url.indexOf("?") > 0 ? "&" : "?")
+ "timestamp="
+ new Date().getTime());
}
// 发送请求
request.open(method, url, isAsync);
request.setRequestHeader(
"Content-type",
(method.toLowerCase() == "post"
? "application/x-www-form-urlencoded;"
: "text/xml")
);
if (AJAXConnectionPool.getBrowserType() != "Firefox") {
request.onreadystatechange = xmlCallbackHandler;
}
request.send(data);
if (AJAXConnectionPool.getBrowserType() == "Firefox") {
// Early call mode:request.onreadystatechange = xmlCallbackHandler();
request.onreadystatechange = xmlCallbackHandler;
}
} else {
// 所有请求都繁忙的时候,则将任务纳入等待队列中
var task = {
method : method,
url : url,
data : data,
callback : callback,
scope : scope
};
taskQueue.push(task);
}
}
};
}();

Javascript几个原创小技巧

2010-04-29 11:51:10.0
1、字符串转换为数值

常规方法:

JScript code
vara=parseFloat("

hibernate的Query有没有setResultTransformer这个方法

2010-04-28 22:23:18.0
hibernate文档中文版里写到:

可以对原生sql 查询使用ResultTransformer。这会返回不受Hibernate管理的实体。

Java 代码

当褪去耀眼的光环,仅以普通人身份出现时,我们会注意到美吗?

2010-04-28 08:37:20.0

当褪去耀眼的光环,仅以普通人身份出现时,我们会注意到美吗?我们会停下来欣赏么?我们会在一个未曾想象的场合里意识到天才的存在吗?

看 了一个故事,让人很受感同身受,有个男人站在华盛顿的一个地铁站里拉小提琴。45分钟的时间里,他演奏了6支巴赫的曲子。这个时候正是上班高峰,人潮很 多,但大多数人是在赶去上班的路上。四分钟后,小提琴家收到了他的第一笔小费:一位女士把钱扔进了琴盒,停都没停就继续走了。几分钟后,有个人靠在墙边听 他拉琴,不过那个人看看表,又继续前进。很显然,他上班要迟到了。在45分钟内,只有6个人停住脚步并稍加停留。大约有20个人给了钱,但依然按照他们正 常的速度继续前进。

网站优化的隐患,影响你的收录排名的17条因素

2010-04-27 22:29:33.0
每一个做网站的人都很关心自己的站点在搜索引擎中的表现,尤其是做SEO的基本上每天都会查询网站的收录情况、关键词的排名等数据。保持网站的搜索引擎收 录量、保持和提高网站关键词的排名是很多站长的目标,并且为这些目标采用各样的措施或者到处求医求药。事实上,我们也都知道搜索引擎中的任何数据都是在变 化的,收录的增减或者排名的上下都是正常的事情,过分的担心和在意都是多余的。但是作为站长,我们可以在网站自身上下功夫,减少网站上被搜索引擎认为不适 合或者会给网站扣分的因素。排除这些影响网站排名和收录的隐患后,搜索引擎如何变动也不在你的能力之内了,而且那时候估计你的排名和收录也不会有太多的波 动。

spring3mvc与 struts2比较

2010-04-26 23:33:40.0


项目刚刚换了web层框架,放弃了struts2改用spring3mvc

当初还框架的时候目的比较单纯---springmvc支持rest,小生对restful url由衷的喜欢

不用不知道 一用就发现开发效率确实比struts2高



我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置

spring3 mvc可以认为已经100%零配置了(除了配置springmvc-servlet.xml外)

Connectify- 将Win7笔记本变成无线路由器

2010-04-26 23:20:04.0

刚买了个无线路由器,用着挺爽。所以最近对无线路由器的文章特别感兴趣,今天看这篇文章后,才知道原来WIN7+某些无线网卡就 可以把笔记本变成无线路由器,有幸我的笔记本无线网卡是Intel 5100,在支持列表中。

——————————————————————-

性感女神周伟童图片|周伟童图片

2010-04-26 23:18:12.0

曾 被称为“内地版林志玲”的周伟童。

我很少会用“性感女神”来形容美女,因为性感常见但女神难觅,而周伟童在我心目中却是不折不扣的性感女神 级人物。早在周伟童以模特身份亮相时,她的 清纯大方以及性感气质就已经很吸引人了,之后周伟童又在演员、歌手、主持人各个领域中发展,她的才气自然增加了她的魅力。当然最令我叹为观止的,还是周伟 童的美丽和性感咯,尤其是她的火辣身段,在国内的名模中并非多见。和大家分享一些周伟童的性感写真,也许当中的部分,你曾经看到过也不一定。

那些相见恨晚的 JavaScript 技巧

2010-04-26 23:09:34.0
JavaScript 的成功让人津津乐道,为 Web 网页编写 JavaScript 代码已经是所有 Web 设计师的基本功,这门有趣的语言蕴藏着许多不为人熟知的东西,即使多年的 JavaScript 程序员,也未能完全吃透。本文从7个方面讲述 JavaScript 中那些你不很熟知但非常实用的技巧。

简略语句

JavaScript 可以使用简略语句快速创建对象和数组,比如下面的代码: