技术标签: xmlhttprequest function 服务器 javascript url cookies
一.cookie
cookie是第一个JavaScript可以利用的客户端-服务端之间的交互手段。浏览器向服务器发送请求时,为这个服务器存储的cookie会与其他信息一起发送到服务器。这使得JavaScript可以在客户端设置一个cookie,之后服务器端就能够读取它了。
1. cookie的成分
名称——每一个cookie由一个唯一的名称代表。这个名称可以包含字母、数字和下划线。不区分大小写。
值——保存在cookie中的字符串值。这个值在存储之前必须用encodeURIComponent()对其进行编码,以免丢失数据或占用了cookie。名称和值加起来的字节数不能超过4095字节,也就是4KB。
域——处于安全考虑,网站不能访问其他域创建的cookie。创建cookie后,域的信息会作为cookie的一部分存储起来。不过,虽然这不常见,还是可以覆盖这个设置以允许另一个网站访问这个cookie的。
路径——另一个cookie的安全特性,路径限制了对Web服务器上的特定目录的访问。例如,可指定cookie只能从http://www.wrox.com/books中访问。
失效日期——确定cookie何时删除。默认情况下,关闭浏览器时,即将cookie删除,不过可以自己设置删除时间。这个值是个GMT格式的日期(可以使用Date对象的toGMTString()方法),用于制定应该删除cookie的准确时间。如果设置的日期是当前日期以前的时间,则cookie被立刻删除。
安全标志——用于表示cookie是否只能从安全网站(使用SSL和https协议的网站)中访问。可以将这个值设为true以加强保护,进而确保cookie不被其他网站访问。
2. 其他安全限制
i)每个域最多只能只能在一台用户的机器上存储20个cookie;
ii)每个cookie的总尺寸不能超过4096字节;
iii)一台用户的机器上的cookie总数不能超过30个。
3. JavaScript中的cookie
下面来看一个设置cookie的函数,如下所示:
setCookie()函数只有前两个参数是必须的,函数的调用方法如下:
setCookie(“name”, “阿蜜果”);
setCookie(“book”, “JavaScript高级程序设计”, new Date(Date.parse(“Jan 1, 2006”)));
setCookie(“message”, “hello”, new Date(Date.parse(“Jan 1, 2006”)), “/books”, http://www.wrox.com, true );
下面的函数是一个根据cookie的名称获取cookie的方法,代码如下:
调用该方法可以获取指定名称的cookie,调用举例如下:
var sName = getCookie(“name”);
下面我们再编写一个删除cookie的函数,只需将失效时间设为过去的一个时间即可,代码如下:
function deleteCookie(sName, sPath, sDomain) {
setCookie(sName, “”, new Date(0), sPath, sDomain);
}
4. 服务器端的cookie
1)JSP
Jsp提供了非常简单的处理cookie的接口,request对象会在执行JSP时自动初始化,有一个返回一个Cookie对象数组的方法getCookies()方法。每个Cookie对象都具有getName()、getPath(), getDomain(),getSecure(),getMaxAge()等方法,下面我们还看一个获取Cookie的方法:
public static Cookie getCookie(HttpServletRequest request, String name) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0; i<cookies.length; i++) {
if (cookies[i].getName().equals(name)) {
return cookies[i];
}
}
}
}
下面让我们再来看看怎么样新建一个cookie:
Cookie nameCookie = new Cookie(“name”, “Amigo”);
nameCookie.setDomain(“http://www.wrox.com”);
nameCookie.setPath(“/books”);
response.addCookie(nameCookie);
要删除cookie,可用如下方法:
Cookie cookieToDelete = getCookie(“name”);
cookieToDelete.setMaxAge(0);
response.addCookie(cookieToDelete);
2)ASP.NET
略。
3)PHP
略。
二.隐藏框架
方法就是创建一个可用JavaScript与服务器进行通信的0像素高的框架。这种通信方式要求两部分内容:用于处理客户端通信的JavaScript对象和在服务端处理通信的特殊页面。Eg.
<html>
<head>
<title>隐藏框架的例子</title>
</head>
<frameset rows=”*, 0”>
<frame src=”test1.html” nam=”mainFrame” />
<frame src=”hidden.html” nam=”hiddenFrame” />
</frameset>
</html>
在第一个框架中,定义了两个函数,一个用于向服务器发送请求,另一个用于处理响应。发送请求的函数如下:
function getServerInfo() {
parent.frames[“hiddenFrame”].location.href = “hiddenFrameCom.html”;
}
处理回应的函数handleResponse()的代码如下:
function handleResponse(sResponseTextt) {
alert(“服务器返回: ” + sResponseTextt);
}
处理隐藏请求的页面必须输出一个普通的HTML页面,其中有个<textarea/>元素,包含返回的元素。使用<textarea/>可以方便的处理多行数据,这个页面必须在主框架中调用handleResponse()函数。实例代码如下:
<html>
<head>
<title>隐藏框架的例子</title>
<script type=”text/javascript”>
window.onload = function() {
parent.frames[0].handleResponse(
document.forms[“formResponse”].result.value);
};
</script>
</head>
<body>
<form name=”formResponse”>
<textarea name=”result”>传送回的数据</textarea>
</form>
</body>
</html>
三.HTTP请求
现在很多浏览器都可以直接从JavaScript中初始化HTTP请求并获取结果,完全不用隐藏框架和其他取巧的小技巧。
这个令人振奋的新功能的核心是,微软创建的XML HTTP请求的对象。这个对象是与MSXML一起出现的,直到最近它的能力才被完全挖掘。XML HTTP请求实质上是添加了额外的用于发送和接收XML代码的功能的普通的HTTP请求。
要在IE中重新创建XML HTTP请求对象,还是要使用ActiveXObject,如下所示:
var oRequest = new ActiveXObject(“Microsoft.XMLHTTP”);
下面让我们看一个创建XML HTTP的方法:
function createXMLHTTP() {
var arrSignatures = [“MSXML2.XMLHTTP.5.0”, “MSXML2.XMLHTTP.4.0”,
“MSXML2.XMLHTTP.3.0”, “MSXML2.XMLHTTP”,
“Microsoft.XMLHTTP”];
for (var i=0; i< arrSignatures.length; i++) {
try {
var oRequest = new ActiveXObject(arrSignatures[i]);
return oRequest;
} catch (oError) {
//ignore
}
}
throw new Error(“你的机器上没有安装MSXML!”);
}
创建好HTTP请求后,可用open()方法来指定要发送的请求,该方法的参数描述如下:
第一个参数:值可为“get”或“post”,或其他受服务器支持的HTTP方法;
第二个参数:请求的URL;
第三个参数:表示请求是否以异步方式发送的布尔值。
Eg. oRequest.open(“get”, “example.txt”, false);
打开后,可用send()方法将请求发送出去,该方法需带一个参数,该参数可为null,
eg. oRequest.send(null);
下面让我们来看一个比较完整的例子:
var oRequest = createXMLHTTP();
oRequest.open(“get”, “example.txt”, false);
oRequest.send(null);
alert(“状态:” + oRequest.status + “(” + oRequest.statusText + “)”);
alert(“回应的文本信息:” + oRequest.responseText);
该例获取服务器端的一个纯文本文件,然后显示此内容。
如果发送异步请求,必须使用onreadystatechange事件处理函数,并检查readyState特性是否等于4(与XML DOM一样)。让我们来看一个例子:
var oRequest = createXMLHTTP();
oRequest.open(“get”, “example.txt”, true);
oRequest.onreadystatechange = function() {
if (oRequest.readyState == 4) {
alert(“状态:” + oRequest.status + “(” + oRequest.statusText + “)”);
alert(“回应的文本信息:” + oRequest.responseText);
}
}
oRequest.send(null);
1. 使用HTTP头部
XML HTTP请求对象提供了获取HTTP头部和设置它们的方法:
l getAllResponseHeaders():返回包含所有响应的HTTP首部信息的字符串;
l getResponseHeader():获取指定的某个头部,参数为获取的首部的名称,eg. var sValue = oRequest.getResponseHeader(“Server”);
l setResponseHeader():设置XML HTTP请求的首部信息,eg. oRequest. setResponseHeader(“myheader”, “阿蜜果”).
2. 实现的赋值品
Mozilla第一个复制了XML HTTP实现,创建了名为XMLHTTPRequest的JavaScript,行为完全与微软的版本相同,Opera(7.6)和Safari(1.2)也复制了Mozilla的实现,创建了自己的XMLHTTPRequest对象。
3. 进行GET请求
Web上最常见的请求类型就是GET请求,下面让我们来看一个GET请求的例子,代码如下所示:
首先为了添加参数的方便性,让我们增加一个添加参数的方法,然后为请求构建一个URL,代码如下所示:
function addURLParam(url, sParamName, sParamValue) {
url += (url.indexOf(“?”) == -1 ? “?” : “&”);
url += encodeURIComponent(sParamName) + “=” + encodeURIComponent(sParamValue);
return url;
}
var url = “http://www.blogjava.net/amigoxie”;
url = addURLParam(url, “gender”, “女”);
url = addURLParam(url, “age”, “25”);
oRequest.open(“get”, url, false);
4. 进行POST请求
POST请求用于在表单中输入数据后的提交过程,因为POST可以比GET方式发送更多数据(最多2GB)。让我们来可看一个例子:
function addPostParam(sParams, sParamName, sParamValue) {
if (sParams.length > 0) {
sParams += “&”;
}
return sParams + encodeURIComponent(sParamName) + “=” + encodeURIComponent(sParamValue);
}
Var sParams = “”;
sParams = addPostParam(sParams, “gender”, “女”);
sParams = addPostParam(sParams, “age”, “25”);
oRequest.open(“open”, “test.jsp”, false);
oRequest.send(sParams);
四.LiveConnect请求
LiveConnect由Netscape Navigator引入,一般可以让JavaScript与Java类实现交互的能力。用户必须安装JRE,并且还需在浏览器中启用Java。
1. 进行GET请求
使用Live Connect时,必须提供类的完整名称,才能初始化一个Java对象。创建URL后,就可以打开一个输入流并使用读取器来读取数据。最好的方法是创建一个InputStreamReader,然后再基于它创建一个BufferReader,实例代码如下:
function httpGet(url) {
var ourl = new java.net.URL(url);
var oStream = ourl.openStream();
var oReader = new java.io.BufferedReader(new java.io.InputStreamReader(oStream));
var oResponseText = “”;
var sLine = oReader.readLine();
while (sLine != null) {
oResponseText += sLine + “\n”;
sLine = oReader.readLine();
}
oReader.close();
return oResponseText;
}
注意:与XML HTTP请求对象不通,LiveConnect要求输入完整的请求的URL,从http://开始,因为,这个Java对象没有任何解释相对URL的上下文。
2. 进行POST请求
因为POST请求可看作是双向的,所以必须使用setDoInput()和setDoOutput()方法将连接设成接受输入和输出。另外,连接不应该使用任何缓存数据,所以要调用setUseCaches(false)。与XML HTTP请求对象一样,还必须用setRequestProperty()方法将“Content-Type”设置为相应的值。代码如下:
function httpPost(url, sParams) {
var ourl = new java.net.URL(url);
var oConnection = ourl.openConnection();
oConnection.setDoInput(true);
oConnection.setDoOutput(true);
oConnection.setUseCaches(false);
oConnection.setRequestProperty(“Content-Type”,
“application/x-www-form-urlencoded”);
var output = new java.io.DataOutputStream(oConnection.getOutputStream());
output.writeBytes(sParams);
output.flush();
output.close();
var sLine = “”, sResponseText = “”;
var input = new java.io.DataInputStream(oConnection.getInputStream());
sLine = input.readLine();
while (sLine != null) {
sResponseText += sLine + “\n”;
sLine = input.readLine();
}
input.close();
return oResponseText;
}
五. 智能HTTP请求
对于两种完全不同的HTTP请求方法,有一系列通用的函数会对开发很有帮助。
1. get()方法
该方法用于对指定的URL进行一个GET请求。该方法有两个参数:发送请求的URL和一个回调函数。回调函数在很多编程语言中是用于在请求结束时通知开发者的。整合后的通用的get()方法代码如下:
var bXmlHttpSupport = (typeof XMLHttpRequest == “object” || window.ActiveXObject);
Http.get = function (url, fnCallback) {
if (bXmlHttpSupport) {
var oRequest = new XMLHttpRequest();
oRequest.open(“get”, url, true);
oRequest.onreadystatechange = function() {
if (oRequest.readyState == 4) {
fnCallback(oRequest.responseText);
}
}
oRequest.send(null);
} else if (navigator.javaEnabled() && typeof java != “undefined”
&& type java.net != “undefined”) {
setTimeout(function() {
fnCallback(httpGet(url));
}, 10);
} else {
alert(“你的浏览器不支持HTTP请求!”);
}
}
2. post()方法
除了需要三个参数(URL、参数字符串和回调函数)外,post()方法类似于get()方法。代码如下:
var bXmlHttpSupport = (typeof XMLHttpRequest == “object” || window.ActiveXObject);
Http.post = function(url, sParams, fnCallback) {
if (bXmlHttpSupport) {
var oRequest = new XMLHttpRequest();
oRequest.open(“post”, url, true);
oRequest.setRequestHeader(“Content-Type”,
“application/x-www-form-urlencoded”);
oRequest.onreadysatechange = function() {
if (oRequest.readyState == 4) {
fnCallback(oRequest.responseText);
}
}
} else if ((navigator.javaEnabled() && typeof java != “undefined”
&& type java.net != “undefined”) {
setTimeout(function() {
fnCallback(httpPost(url, sParams));
}, 10);
} else {
alert(“你的浏览器不支持HTTP请求!”);
}
}
注意:使用这个方法必须提供完整的URL.
转载自http://www.blogjava.net/amigoxie/archive/2007/08/15/136809.html
1. 创建新的数据库存储路径;mkdir /wwwroot/mysql复制数据库文件到新目录;防止数据被破坏之后不能恢复;cp -a /var/lib/mysql /wwwroot/mysql修改配置文件my.cnf;首先先复制一份,备份一下;cp /etc/my.cnf /etc/my.cnfbak然后再进行修改;vim /etc/my.cnf修改内容如下:[client]socket=/ww...
(1)Oracle中创建新的用户使用create user语句,一般是具有dba(数据库管理员)的权限才能使用。如在sql plus中以scott用户创建用户的命令如下:Create user xiaoming identified by m123;(注意oracle中的密码是以字母为开头,否则不让你创建)。(2)删除用户,命令格式为: drop user 用户名 [cascade]一般以dba的...
**1. 基本知识点**表示临时响应并需要请求者继续执行操作的状态代码。代码 说明 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。 2xx (成功)表示成功处理了请求的状态代码。代码 说明 200 (成功) 服务器已成功处理了请求。
1、概述在项目开发过程中,对于非maven项目,通常都要手动引入外部jar包的,在eclipse中引入jar包非常容易,先将jar包放到WebContent -> WEB-INF -> lib 文件夹下,然后右键添加到构建路径即可,如下图:2、idea导入jar包步骤对于idea中的项目,方法就略有不同了。具体步骤如下:1、首先也是要将需要添加的jar包放到lib文件夹下。注意!!!一定要将jar包放在项目中,否则,即使在开发时可以引入jar包的类,在编译时也是无法引入的
这种错误的全部报错信息: 1 java.lang.UnsupportedClassVersionError: org/apache/lucene/store/Directory : Unsupported major.minor version 51.0 2 at java.lang.ClassLoader.defineClass1(Native Method) 3 at java.l...
poj1236是问把一棵树变成强联通分量,于是答案就是rudu为0的和出度为0的最大值,因为假设入度为0的多一些,先每个出度为0的连接一个入度为0的,那么还剩一些入度为0的,这时候入度为0的随意连接一些出度为0的,都可以通过不停地绕绕绕绕成为一个强联通分量。这题是把一个有向图变成强联通分量,先把他们缩点,变成很多棵树,然后再求入度为0,和出度为0的总点数那个多,虽然他们是很多棵树的入度点和出度
jdk为1.8.0_45,tomcat 7.0.14。tomcat启动报错:org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 18org.apache.tomcat.util.bcel.classfile.ClassFormatException: Inv
1. sysctl 命令显示 当前系统的参数配置信息显示全部配置信息sysctl -a帮助信息主要如下:[[email protected] ~]# sysctl -helpUsage: sysctl [options] [variable[=value] ...]Options: -a, --all display all...
yum install httpd -y安装提示没有可用软件包,执行vim /etc/yum.conf,将最后一行注释掉。下载mod_ssl离线安装。下载然后安装httpd。二、安装配置ssl模块。
安装完系统后重启会出现花屏现象,报acpi bios error 。ubuntu安装nVidia显卡驱动,开机黑屏现象。
SuperAgentSuperAgent is a small progressive client-side HTTP request library, and Node.js module with the same API, sporting many high-level HTTP client features. View the docs.Installationnode:$ npm ...
为什么80%的码农都做不了架构师?>>> ...