J2ME之家

匿名投稿 投稿指南 RSS订阅 J2ME通告:
搜索: 您的位置主页>Java技术>J2EE>Servlet>

Applet与Servlet通讯的四种方法及比较

2008-7-20 09:37:30 来源:ITPUB 责任编辑:来自ITPUB论坛 【 点击: 我要投稿 [进入论坛]

  【j2me之家技术频道】Applet与Servlet之间的联系一般是间接的,即页面请求由浏览器发送给Servlet,作为回答,Servlet将结果生成HTML文档发送给浏览器。很多时候在Servlet与Applet之间建立直接的联系是没有必要的,但如果要显示一些实时的动态数据,如聊天室窗口、新闻显示、股市行情等,建立两者之间的直接联系就很有用了。特别地,在较为复杂的分布式Java应用中,这种通讯更是必不可少。在客户端Java程序与服务器端Java程序之间建立这种复杂的交互方式仅仅使用Servlet与Applet API是不够的,本文为你介绍和比较四种通讯方式:通过HTML页面传递参数,用java.net包的网络功能建立直接网络连接,远程方法调用(RMI)与CORBA。

  一、通过HTML页面传递Applet参数

  通过HTML页面传递参数是在Servlet与Applet之间建立联系最为常用的方法。Servlet只要把传递给Applet的参数写入HTML页面就可以了。这种通讯是单向的,用于实现Servlet对Applet的控制。其实现方法类如:


Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/   //doGet()方法生成一个包含Applet的HTML页面,   // 该Applet需要一个Data参数   public void doGet(HttpServletRequest request,HttpServletResponse response)   throws ServletException, IOException { JAVA天堂   response.setContentType("text/html");   PrintWriter out = new PrintWriter ( response.getOutputStream());   out.write("< HTML>< HEAD>< TITLE> HTML Example< /TITLE> < /HEAD>< BODY>");   out.write("Servlet通过PARAM标记传递参数给Applet. ");   out.write("< APPLET code="SimpleApplet" width="225" height="149">");   // 写入PARAM标记   out.write("< param name="Data" value="");   out.write(java.text.DateFormat.getDateInstance().format(new java.util.Date()   ));   out.write("">< /APPLET>< /BODY>< /HTML>");   out.close();   }

  这种方法很简单,但它有两个缺点。首先,所有参数都是静态的,即一旦HTML页面发送完成,要更新其中部分数据就很困难了。虽然可以使用HTTP的刷新机制,但这种刷新需要重新下载整个页面,效率是很低的。第二,如果需要传递给Applet的数据量很大或数据结构很复杂,就会使得HTML页面过于庞大或复杂了。

  二、用java.net包建立双向通讯

  第二种方法是利用java.net包提供的网络能力。以有连接流通讯方式为例,在服务器端的操作为一般为:

  ⑴ 创建一个ServerSocket对象,在指定端口监听客户端发来的请求。

  ⑵ 在接收到请求时accept()方法将返回一个Socket对象。

  ⑶ 用上述Socket对象创建输入、输出流对象。

  ⑷ 通过输入、输出流与客户交互。

  ⑸ 交互完毕,关闭输入、输出流与Socket。

  ⑹ 服务程序运行结束,关闭ServerSocket。

  实现代码代码类如:


Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/   try{   boolean flag=true;   Socket clientSocket=null;   ServerSocket serverSocket = new ServerSocket(0);   System.out.println("Server listen on: " serverSocket.getLocalPort());   while(flag){   clientSocket=serverSocket.accept();   DataInputStream is=new DataInputStream( new bufferedInputStream(clientSocket   .getInputStream()));   PrintStream os=new PrintStream( new bufferedOutputStream(clientSocket.getOut   putStream()));   // 处理Applet请求   os.close();   is.close();   clientSocket.close();   }   serverSocket.close();   }catch( IOException e){   System.err.println(" Exception: " e);   }

  在客户端的操作为:

  ⑴ 创建Socket对象建立与服务器的连接。

  ⑵ 用该Socket对象创建输入、输出流。

  ⑶ 与服务器交互。

  ⑷ 交互完毕,关闭输入、输出流与Socket。

  实现代码类如:


Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/   try {   Socket clientSocket =new Socket("serverName",7);   OutputStream os

Tag:比较 方法 通讯 对象 服务器 远程 接口 Applet new RMI
责任编辑:来自ITPUB论坛
  • 用户名: (新注册)密码: 匿名:  请文明参与讨论,禁止漫骂攻击。
    评论总数: [ 查看全部 ] 网友评论