当前位置:编程学习 > JAVA >>

JavaScript学习笔记——客户端与服务器端的通信

 在Web项目中,要实现客户端与服务端的交互,可通过cookie、隐藏框架、HTTP请求、LiveConnect请求和智能HTTP请求等方式实现,

一.             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的函数,如下所示:

       function  setCookie(sName, sValue, oExpires, sPath, sDomain, bSecure)  {
 var sCookie = sName + “=” +encodeURIComponent(sValue);
 if (oExpires) {
         sCookie +=”; expires=” + oExpires.toGMTString();
}
if (sPath) {
       sCookie += “; path” + sPath;
}
if (sDomian) {
       sCookie += “; domain” + sDomain;
}
if (bSecure) {
       sCookie += “;secure”;
}
document.cookie = sCookie;
}

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的方法,代码如下:

   function  getCookie(sName)  {
 var sRE= "(?:;.)?" + sName + "=([^;]*);?;
 var oRE= new RegExp(sRE);
 if (oRE.test(document.cookie)) {
       return decodeURIComponent(RegExp[“$1");
}   else   {
       return null;
}
}

 

调用该方法可以获取指定名称的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>

补充:web前端 , JavaScript ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,