Chinaunix首页 | 论坛 | 博客
  • 博客访问: 619745
  • 博文数量: 98
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1528
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-28 16:20
文章分类

全部博文(98)

文章存档

2011年(1)

2010年(11)

2009年(44)

2008年(42)

我的朋友

分类: Java

2008-04-25 15:37:21

    servlet高级编程
第九章 applet servlet通信

 

在本章将讲述几个appletservlet通信的示范。我们从一个与你的期望略微不同的角度来讲述本章。我们不是假定你有一个applet和一个servlet,而且他们之间要进行通信,而是假设有一个applet要与一个服务器端的实体进行通信,这个实体有时是servlet

首先,我们假设有一个applet要与server进行通信。这种情况经常存在,例如,Java Web Serveradministrator applet用来管理整个 Web Server ,它在客户端的执行,却管理服务器。要完成这项工作,appletserver之间要建立一个连续的通信。再来看另外的一个例子,当今最流行的applet聊天室,一个客户发出的消息,其它的人都看得到。它们是怎么工作的呢?当然不是appletapplet通信,而是每个applet把它的消息发送给一个中央server,中央server负责把消息更新到每个客户端。还有,我们假设用一个applet来显示一系列的股票的价格并提供一个连续(实时)的更新,还有更重要的是,applet怎么知道股票的价格发生了变化,答案是它和它的服务器进行的通信。

 

9.1 applet server通信的几种方式

 

applet有两种方式,trusted untrusted(在安全部分详细论述),它们的主要不同是untrusted applet SecurityManger管理下运行,它不能向客户端的文件系统中写入内容,也不能访问系统的特定的属性、接受新的连接请求、建立到除server外的其它socket等。

通常我们说的appletserver 的通信指的是untrusted applet。概括来讲,appletserver 的通信有以下几种方式:

 

9.1.1 HTTP 原始的套接口(socket)连接

JDK1.1servlet之前,它们是主要的applet-server通信方式。

 

(1)HTTP :用applet和服务器上的CGI程序建立一个HTTP连接,在这种通信方式中,applet像一个浏览器,请求一个页面,并分析服务器的响应来为applet使用。applet可以用POST方法向服务器提供信息也能接收服务器在返回的页面中的信息。

HTTP方式的优点:

l         容易编写。applet可以利用java.net.URLjava.net.URLConnection类等优势对通信进行管理,CGI程序可以和其它的CGI程序一样。

l         applet在防火墙后运行时也可以与server进行通信,防火墙允许HTTP连接通过,但通常不允许原始的套接口连接

l         允许applet与其他语言写的程序进行通信,CGI可以不用java,例如可以用cc++perl等。

l         允许加密通信,applet可以和server用加密的协议HTTPSHTTP + SSL)和server进行通信。

l         CGI可以被applet和浏览器同时进行访问

 

HTTP方式的缺点:

l       速度慢。由于HTTPrequest/response模式,appletCGI程序之间的通信不能交互。它们必须为每个requestresponse建立一个新的通信,CGI程序运行和初始化以处理一个request时时延是明显存在的。

l       它通常要求request把参数组织成难用的name/value值的数组的形式。

l       它强制response按照以前定义好的格式来组织。

l       只有 applet可以初始化通信。CGI程序在作出response之前,只能被动的等待一个appletrequest

 

(2)套接口(socket):applet可以在没有HTTP服务的server的机器上建立一个原始的套接口连接来实现applet-server通信。server 在特定的端口监听,用它们特定的协议进行通信。

套接口方式的优点:

l         它提供了一个双向的、持续的通讯。appletservlet用同一个(甚至是几个)套接口进行交互式通信,信息可以双向发送。为了安全,applet通过向服务器的一个套接口建立连接来开始通信,一旦套接口建立成功,双方在任何时间都可以向套接口发送信息。

l         它使许多高效的程序运行在服务器端,无HTTP服务的服务器可以不运行CGI程序来处理一个请求。

套接口方式的缺点:

l         applet在防火墙后运行时无效。

l         服务器端的程序比较复杂。

l         需要形成特殊的协议。

l         HTTP服务的服务器无法与web 浏览器进行交互。

 

 

9.1.2  servlet和对象串行化

 

java servlet 和对象串行化技术是一种新的applet-server通信技术。Servlet正在取代运行速度较慢的CGI程序,提高基于HTTPapplet-server通信的效果,使经常发生applet-server通信变的可能。虽然通常appletservlet为每一个requestresponse建立连接仍需要时间,但是,applet不需要等待CGI程序运行来再来处理request的时间。

Java的对象串行化简化了有关格式化response的问题。由于servletapplet都是用java写的,很自然的它们之间的通信可以通过交换java 对象来实现。

 

9.1.3 JDBCRMICORBA

 

JDBCJava  DataBase Connectivity API,允许java程序访问本机或其它机器上相关的数据库。JDBC允许applet直接访问数据库,而不通过applet-server 方式。但是applet通过servlet来访问数据库比直接访问数据库更具有优势。

 

RMIRemote Method InvocationAPI ,允许applet调用服务器上运行的java 对象的方法,在某些情况下,它也允许服务器调用applet的方法

RMI的优势:

l             它允许appletserver之间用一种高水平的,面向对象的模式进行通信。如果必要request可以作为方法调用,传递串行化对象的参数。Response可以作为串行化的对象被接收,或者作为远程对象的参数被接收。在这里提responserequest主要是和以前的HTTP方式做比较,其实,在RMI中,只有方法调用,没有requestresponse

l         它允许服务器的对象调用applet 的方法。

l         可以在防火墙后运行,因为其连接是包含在(HTTP协议内的)

RMI的缺点

l         实现复杂。RMI通信用对应每一个远程对象都有特殊的类,客户端想要获得远程对象的参数的话,都需要进行注册。

l         只有少数浏览器支持RMI方法。NetScape Navigator 4支持,而 IE 不支持。

l         只有java 的客户端被支持。

 

CORBACommon Object Request Broker Architecture)是一个与RMI类似的方法。不过,客户端可以是任何语言写的程序。

 

阅读(464) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~