如何实现服务端客户端异步通信

AJAX客户端与服务端,可以在[不刷新整个浏览器]的情况下,与服务器进行异步通信的技术。即ajax是一个[局部刷新]的异步通信技术,AJAX技术不是全新的语言,时2005年谷歌公司提出的一种全新的编程模式,不是新的编程语言。

传统web应用请求和响应的特点

( 1 )请求:浏览器以 HTTP 协议的方式提交请求到服务器

( 2 )响应:服务器以 HTTP 协议的方式响应内容到浏览器

注意: HTTP 是 WEB 大众化非安全协议

HTTPS 是 WEB 安全协议,是基于 HTTP 协议的,且加了一些加密等特殊功能,常用于在线支付,或者是需要安全性较高的网站中,例如: 12306 网站

HTTP 请求有三个部份组成:请求行,请求头,请求体

HTTP 响应有三个部份组成:响应行,响应头,响应体

( 3 )状态栏:有明显的进度条刷新现象,如果服务器响应较慢的话,进度条刷新也会变慢, IE9 等中高版本浏览器,有明显转圈圈图标

( 4 )历史栏:会收集原来已访问过的 web 页面,进行缓存

( 5 )缺点:不需变化的大量数据,也全部刷新,造成浏览器加载和处理负担

( 6 )可改进的地方:让不需变化的大量数据,原封不动,不用缓存到历史栏中,无需全部刷新,只刷新某些需要变化的数据区域.

ajax异步获取时间的实例

<%--

Created by IntelliJ IDEA.

User: cxspace

Date: 16-8-16

Time: 上午8:33

To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>无需刷新整个web页面显示服务器响应时间</title>

</head>

<body>

当前时间

<span id = "time"></span> <br>

<input id="buttonID" type="button" value="获取当前时间">

<br>

<script type="text/javascript">

//创建ajax对象

function createAJAX() {

var ajax = null;

try {

ajax = new ActiveXObject("microsoft.xmlhttp");

}catch (e1){

try {

ajax = new XMLHttpRequest();

}catch (e2){

alert("你的浏览器不支持异步对象,请更换浏览器");

}

}

return ajax;

}

</script>

<script type="text/javascript">

document.getElementById("buttonID").onclick = function () {

/1.创建ajax异步对象

var ajax = createAJAX();

//2.准备发送请求

var method = "GET";

var url = "${pageContext.request.contextPath}/AjaxTimeServlet?time="+new Date().getTime();

ajax.open(method,url);

//3.真正发送请求体数据到服务器,如果请求体中没有内容,用null表示

ajax.send(null);

//==========等待

//4.ajax异步对象不断监听服务器的状态0-1-2-3-[4]

// 一定要状态变化后,才触发function函数

// 如果状态永远时4-4-4-4-4,不会触发function(){}函数

ajax.onreadystatechange = function () {

//如果状态码是4

if (ajax.readyState == 4){

//如果响应码是200

if (ajax.status == 200){

//5.用ajax异步对象中获取数据

var nowStr = ajax.responseText;

var spanElement = document.getElementById("time");

spanElement.innerHTML = nowStr;

}

}

}

}

</script>

</body>

</html>

package servlet;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.io.PrintWriter;

import java.text.SimpleDateFormat;

import java.util.Date;

/**

* Created by cxspace on 16-8-16.

*/

public class AjaxTimeServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String nowStr = sdf.format(new Date());

// System.out.println("拿到时间");

//以流的方式响应到ajax异步对象中

response.setContentType("text/html;charset=UTF-8");

PrintWriter pw = response.getWriter();

pw.write(nowStr);

pw.flush();

pw.close();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doPost(request,response);

}

}

什么是 AJAX 【 Asynchronous 异步的 JS 和 XML 】,工作原理与特点

( 1 )什么是同步:

请求 1-> 响应 1-> 请求 2-> 响应 2->

Web1.0 时代

( 2 )什么是异步:

请求 1-> 请求 2-> 请求 3-> 响应 1-> 响应 2-> 响应 3->

请求 1-> 响应 1-> 请求 2-> 请求 3-> 响应 2-> 响应 3->

Web2.0 时代

项目中: Web1.0 为主(整个浏览器刷新), Web2.0 为辅(浏览器局部刷新)

( 3 )什么是 AJAX

客户端(特指 PC 浏览器)与服务器,可以在【不必刷新整个浏览器】的情况下,与服务器进行异步通讯的技术

即, AJAX 是一个【局部刷新】的【异步】通讯技术

AJAX 不是全新的语言,是 2005 年 Google 公司推出的一种全新【编程模式】,不是新的编程语言

( 4 )不用刷新整个页面便可与服务器通讯的办法有:

( A ) Flash/ActionScript

( B )框架 Frameset

( C ) iFrame (内嵌入框架 )

( D ) XMLHttpRequest( 非 IE 浏览器 ) 和 ActiveXObject(IE 浏览器 )

背景:早上 IE5 时,微软就开发出了第一个异步通讯对象,叫 ActiveXObject 对象,

Firefox 等其它浏览器厂商也慢慢引入异步通讯对象,叫 XMLHttpRequest 对象,

IE 的高版本,也将这个异步对象取名叫 XMLHttpRequest 对象,但 IE 有向下兼容问题,

也可以使用 ActiveXObject 对象。

无需第三方 jar 包,现代中高版本浏览器中内置了这个异步通讯对象,只需通过 JavaScript 就可以创建

注意:所有浏览器中都内置了异步对象,在默认情况下,该异步对象并没有创建出来

function createAJAX(){

var ajax = null;

try{

ajax = new ActiveXObject("microsoft.xmlhttp");

}catch(e1){

ajax = new XMLHttpRequest();

}

return ajax;

}

( 5 ) AJAX 工作原理

( 6 ) AJAX 包含的技术

( 7 ) AJAX 开发步骤

步一:创建 AJAX 异步对象,例如: createAJAX()

步二:准备发送异步请求,例如: ajax.open(method,url)

步三:如果是 POST 请求的话,一定要设置 AJAX 请求头,例如: ajax.setRequestHeader()

如果是 GET 请求的话,无需设置设置 AJAX 请求头

步四:真正发送请求体中的数据到服务器,例如: ajax.send()

步五: AJAX 不断的监听服务端响应的状态变化,例如: ajax.onreadystatechange ,后面写一个无名处理函数

步六:在无名处理函数中,获取 AJAX 的数据后,按照 DOM 规则,用 JS 语言来操作 Web 页面

( 8 ) AJAX 适合用在什么地方

AJAX 【适合】不用来传递大量数据,而只用来【传递少量数据】,在用户的【体验】上,【更加人性化】

AJAX 是一个和服务器无关的技术,即服务器可使用: JavaEE , .NET , PHP ,。。。这些技术都可

AJAX 只管向服务器发送请求,同时只管接收服务器的 HTML 或 XML 或 JSON 载体响应

服务端不能使用转发或重定向到 web 页面,因为这样会起浏览器全面刷新

即只能以流的方式响应给浏览器

AJAX异步方式实现验证实例(GET方式)

<%--

Created by IntelliJ IDEA.

User: cxspace

Date: 16-8-16

Time: 下午7:15

To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

<title>以get方式异步检查数据库中是否已经存在该用户</title>

</head>

<body>

<form>

用户名:<input id="usernameID" type="text" name="username"/>

光标移出后立即检查结果

</form>

<hr>

<span id="resID"></span>

<script type="text/javascript">

function createAJAX() {

var ajax = null;

try {

ajax = new ActiveXObject("microsoft.xmlhttp");

}catch (e1){

try {

ajax = new XMLHttpRequest();

}catch (e2){

alert("你的浏览器不支持ajax,请更换浏览器")

}

}

return ajax;

}

</script>

<script type="text/javascript">

document.getElementById("usernameID").onblur = function () {

var username = this.value;

if(username.length == 0){

document.getElementById("resID").innerHTML = "用户名必填";

}else {

username = encodeURI(username);

// alert(username)

var ajax = createAJAX();

//    alert("创建ajax ok")

var method = "GET";

var url="${pageContext.request.contextPath}/UserServlet?time="+new Date().getTime()+"&username="+username;

ajax.open(method,url);

ajax.send(null);

ajax.onreadystatechange = function () {

if (ajax.readyState == 4){

if (ajax.status == 200){

var tip = ajax.responseText;

document.getElementById("resID").innerHTML = tip;

}

}

}

}

}

</script>

</body>

</html>

package servlet;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.io.PrintWriter;

/**

* Created by cxspace on 16-8-16.

*/

public class UserServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request,response);

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("utf-8");

String username = request.getParameter("username");

System.out.println(username);

String tip = "<font color=’green’> 可以注册 </front>";

if ("杰克".equals(username)){

tip = "<font color=’red’> 该用户已经存在 </front>";

}

response.setContentType("text/html;charset=UTF-8");

PrintWriter pw = response.getWriter();

pw.write(tip);

pw.flush();

pw.close();

}

}

以POST的方式实现异步验证实例

注意点:content中键值对表达式绝对不能有空格

<%--

Created by IntelliJ IDEA.

User: cxspace

Date: 16-8-17

Time: 上午9:37

To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

<title>以post方式验证检查注册的用户名是否在数据库中存在</title>

<script type="text/javascript"  src="js/ajax.js"></script>

</head>

<body>

用户名[POST]: <input id="usernameID" type="text" />

<span id="resID">

</span>

<hr/>

<script type="text/javascript">

document.getElementById("usernameID").onblur = function () {

var username = this.value;

//  alert(username);

var ajax = createAJAX();

var method = "POST";

var url = "${pageContext.request.contextPath}/UserServlet?time="+new Date().getTime();

ajax.open(method,url);

//设置ajax请求头为post,他会将请求体中的汉字自动进行utf-8的编码

ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");

//******键值对中间不能有空格,例如 username = aa; 服务端拿到为null

var content = "username="+ username;

ajax.send(content);

//wait

ajax.onreadystatechange = function () {

if (ajax.readyState == 4){

if (ajax.status == 200){

var tip = ajax.responseText;

var imgElement = document.("img");

imgElement.src = tip;

imgElement.style.width="12px";

imgElement.style.height="12px";

var spanElement = document.getElementById("resID");

spanElement.innerHTML = "";

spanElement.appendChild(imgElement);

}

}

}

}

</script>

</body>

</html>

package servlet;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.io.PrintWriter;

/**

* Created by cxspace on 16-8-16.

*/

public class UserServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

String username = request.getParameter("username");

//   System.out.println(username);

String tip = "images/MsgSent.gif";

if ("杰克".equals(username)){

tip = "images/MsgError.gif";

}

System.out.println(tip);

response.setContentType("text/html;charset=UTF-8");

PrintWriter pw = response.getWriter();

pw.write(tip);

pw.flush();

pw.close();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("utf-8");

String username = request.getParameter("username");

System.out.println(username);

String tip = "<font color=’green’> 可以注册 </front>";

if ("杰克".equals(username)){

tip = "<font color=’red’> 该用户已经存在 </front>";

}

response.setContentType("text/html;charset=UTF-8");

PrintWriter pw = response.getWriter();

pw.write(tip);

pw.flush();

pw.close();

}

}

文章来源:博客园

时间: 2024-08-24 11:27:22

如何实现服务端客户端异步通信的相关文章

Zabbix 服务端&客户端,安装

文档整理中,虽然格式有点乱,但思路不乱~~ 见谅 Zabbix Server 第1章 安装环境 1.1 系统环境 [[email protected] ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [[email protected] ~]# uname -r 2.6.32-573.el6.x86_64 [[email protected] ~]# ifconfig eth0|awk -F "[ :]+" 'NR==2 {

手机淘宝客应用(服务端+客户端+数据库)源码项目

欢迎大家光临我的个人网店:http://shop.662p.com/shop/view8.html 这是一款比较完整的应用源码,手机淘宝客应用(服务端+客户端+数据库),客户端是Java代码实现编程,另外服务端是采用了php的常见框架实现的,代码里面有一个sql文件是数据库导入文件 ,里面的apk是用来升级的版本 设置. 文件大小:10.94 MB 服务器:thinkphp 代码里面有一个sql文件是数据库导入文件 ,里面的apk是用来升级的版本 设置update.xml 用来跟之前安装的对比版

回显服务端/客户端

回显服务端/客户端 在这一章,我们将会实现一个小的客户端/服务端应用,这可能会是你写过的最简单的客户端/服务端应用.回显应用就是一个把客户端发过来的任何内容回显给其本身,然后关闭连接的的服务端.这个服务端可以处理任何数量的客户端.每个客户端连接之后发送一个消息,服务端接收到完成消息后把它发送回去.在那之后,服务端关闭连接. 因此,每个回显客户端连接到服务端,发送一个消息,然后读取服务端返回的结果,确保这是它发送给服务端的消息就结束和服务端的会话. 我们首先实现一个同步应用,然后实现一个异步应用,

WebService 服务端客户端 实例(一)

Delphi中WebService包含的组件解释(有7个)     (1) THTTPRIO-------:使用Http消息来调用远程使用SOAP的接口对象     (2) THTTPReqResp---:给服务器发送一个SOAP消息, THTTPReqResp在可调用接口上执行一个方法请求.       (3) TOPToSoapDomConvert ----:TOPToSoapDomConvert处理Soap方法请求的组合与分发     (4) TSoapConnection:TSoapCo

PHP-Socket服务端客户端发送接收通信实例详解

Socket介绍 什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务. Socket连接过程 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认.

unity手游《摩卡世界online》全套源码(服务端+客户端+数据库)

unity手游<摩卡世界online>全套源码(服务端+客户端+数据库),客户端用unity3d开发,服务端用java开发,包含服务端源码.客户端源码.工具源码.数据库.配置搭建文档说明.编译好的文件等,解压后2.32G大小,要的速度下,过期不候. 摩卡世界是一款人气火热的休闲类手机网游,画面精致,出场人物造型各异,十分讨人喜爱,同时摩卡世界操作都是通过功能按钮的组合来完成,全拟真的操作规则和爽快的打击节奏让我们找回街机般的操作手感,华丽的必杀技.便捷的操作和流畅的画面,会让格斗爱好者爱不释手

企业运维之域控篇(十四)-域共享文件(服务端&客户端)设置

在公司我们这类杂工最多面对的也就是文件共享服务器.....这个是公司的重中之重,希望公司的领导与我们这类的杂工能够关注:免得一失足成千古恨!!!! 共享文件的作用:主要是在方便大家共同拥有. 共享服务器里的文件只能是暂时存放,而不是让它成为永久的仓库... 可能是人的懒性吧,所以每个公司的员工都是喜欢直接在共享文件里进行工作操作(如:编辑等等),其实这个是最点服务器资源与危险的事情. eg: 当你编辑好文件,保存后才发觉原来改错了,要恢复?那真是有些悲剧了(自己找不到需要的资料,同时也造成同事不

MMORPG网页游戏斩仙录全套源码(服务端+客户端)

斩仙录全套源码(服务端+客户端),<斩仙录>是一款具有浓厚中国风的仙侠MMORPG网页游戏,游戏的背景取材于中国瑰丽多姿的神话故事和民间佳传,玩家可以穿越时空与不同时代的著名人物相遇,共同演绎改编自<山海经>.<白蛇传>.<倩女幽魂>.<画皮>.<精卫填海>.<西游记>.<封神榜>等传世佳作中的精彩桥段. 游戏的美术神话风很强,服务端用c++开发,网页端用flash as+js开发,含fla源文件,解压后702

Netty实例-简单的服务端-客户端实现,注释详细

       书籍推荐:                                       实例代码 :http://download.csdn.net/detail/jiangtao_st/7677503 Netty Server端实现 /** * * <p> * Netty Server Simple * </p> * * @author 卓轩 * @创建时间:2014年7月7日 * @version: V1.0 */ public class NettyServer