Linux中国  设为主页
 收藏本站
 
当前位置: > 首页 ->Linux技术 ->系统管理 ->不同Web主机上的Servlet之间数据对象的相互传输
  相关分类: 
入门与提高
系统管理
网络应用
嵌入式系统
内核研究
服务器相关
发行版专区
Linux程序设计
Linux安全
BSD相关
桌面应用
  站内搜索: 
热门文章排行
热门文章排行 Adaptec 2100S RAID卡安装快速指南 (05-05)
JSP专题:第六部分:用JSP实现聊天室(05-05)
Linux 99问(一)(05-05)
Linux系统中网络配置详解(05-05)
JSP专题:第六部分:用JSP实现聊天室(05-05)
精采文章排行
精采文章排行 Motorola微处理器bootloader分析与应(06-04)
Linux系统:让内存不再泄漏的实用技(06-04)
Fedora Core5 NFS服务器搭建过程介绍(06-04)
新手看招 手把手教你安装VMware虚拟(06-04)
“侵权事件” 红帽称微软企图干扰用(06-04)
 

不同Web主机上的Servlet之间数据对象的相互传输

作者:Webmaster   来源:Linux-cn.com   点击:   日期:2007-05-05 [收藏] [投稿]

  IE是否经常中毒?推荐您

为什么要这样做

  在目前所做的一个项目中,我们使用了两台独立的数据库服务器,出于安全方面的考虑,我们同时使用两台Web服务器分别操作这两个数据库。

  由于数据库服务器A和服务库服务器B之间存在着数据的交换,而WEB服务器A并不能直接访问数据库服务器B,同理WEB服务器B也不能直接访问数据库服务器A。这样的交换只能是通过两台Web主机来进行。而在绝大多数时候,我们涉及的是较大规模的数据交换,使用带参数的格式显然不能满足我们的要求,这就涉及了不同Web主机上的Servlet之间数据对象的相互传输的问题。

  使用通常的Application域或是Session域的javabean看上去不能满足我们的要求,虽然我们相信会有很多更为完美的方案可以解决这个问题,但是我们今天想看看如何直接通过HTTP连接来完成这样的传输。

  首先对于我们的每一个独立的应用来说,两台WEB服务器都会存在一个主次的关系,情况也许是这样的:访问者访问WEB服务器A上的一个servlet A,而这个servlet A产生一个数据对象传输到WEB服务器B上的另一个servlet B,servlet B接收到这个数据对象后对其进行相应的处理,然后它可能还会生成另一个数据对象传输到servlet A中。这样的过程看上去有点象一个远程函数调用的概念。限于篇幅的限制,我们这里讨论一种较为简单的情况,test将passobject传输到test2,test2对passobject进行处理后将其传回到test。

简单示例的源码

 passobject.java

  首先,我们需要在两台WEB主机上分别建立对passobject的定义,在两台主机上的定义应该是完全一样,这样的类定义和我们通常使用并没有什么不同。只是这样的类必须实现序列化,也就是要实现Serializable:


package test;
import java.io.*;
public class PassObject implements Serializable {
   String PassValue1;
   String PassValue2;
public void setNewPassObject()
   {PassValue1="yzysynew";
    PassValue2="new";
   }
public void setOldPassObject()
   {PassValue1="yzysyold";
   }
}

    test.java

  在其中的一台web主机上建立。除去加注释的那几行,这完全是一个通常意义上的用于显示的servlet,不过那几行的内容看上去也许会有点让你眼花缭乱。这几行将数据对象传输到了另一台主机的test2中,并接收经过test2处理的数据对象。对于这里所涉及的一些不太常用的API,我们将会在最后一并说明。


package test;
import java.sql.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.*;
import java.net.*;
public class Test extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
{PassObject passobject = new PassObject();
 passobject.setNewPassObject();
 PrintWriter out = response.getWriter();
 out.println(passobject.PassValue1);
 out.println(passobject.PassValue2);
  //创建一个新的URL实例url
 URL url = new URL("http://141.56.16.8/examples/servlet/test.Test2");
  //根据url建立连接
 URLConnection con = url.openConnection();
 //设置该连接可写
 con.setDoOutput(true);
 //禁用cache
 con.setUseCaches(false);
 //取出输出流
  OutputStream outs=con.getOutputStream();
 //将该输出流转换为对象输出流
 ObjectOutputStream objout = new ObjectOutputStream(outs);
 //将要传输的对象写入该对象输出流中
  objout.writeObject(passobject);
 //取得返回的输入流
 InputStream in = con.getInputStream();
 //将该输入流定义为对象输入流
 ObjectInputStream objStream;
 objStream = new ObjectInputStream(in);
 //按指定类的格式读取输入流的内容
  try {
      passobject=(PassObject)objStream.readObject();
      out.println(passobject.PassValue1);
      out.println(passobject.PassValue2);
     }
 catch (java.lang.ClassNotFoundException ysy )
     {
      out.println("fail");
     }
 }
    public void doPost(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
    {
        doGet(request, response);
    }
}

    test2.java

  在其中的另一台web主机上建立,用来接收test发送的数据对象,并对其进行处理后返回到test。

·Fedora Core5 NFS服务器搭建过程介绍 ·Linux系统:让内存不再泄漏的实用技巧 ·新手看招 手把手教你安装VMware虚拟机 ·“侵权事件” 红帽称微软企图干扰用户 ·删除Linux后 如何找回Windows启动菜单 ·菜鸟乐园 Linux中常见文件系统格式介绍 ·Linux操作系统下IPTables配置方法详解 ·实用技巧 Linux系统的经典使用技巧八则 ·Linux系统文件优化及磁盘检查方法介绍

package test;
import java.sql.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.*;
import java.net.*;
public class Test2 extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
    {//封装用于返回的对象输出流
   ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
     //封装用于接收的对象输入流
     ObjectInputStream in = new ObjectInputStream(request.getInputStream());
     PassObject passobject=new PassObject();
     //按指定类的格式读取对象输入流中的内容
     try {
         passobject=(PassObject)in.readObject();
         }
     catch (java.lang.ClassNotFoundException ysy )
        {
        }
     //对接受到的数据对象进行处理
     passobject.setOldPassObject();
     //将处理后的数据对象返回到对象输出流中
     out.writeObject(passobject);
    }
    public void doPost(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
    {
        doGet(request, response);
    }
}


 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<

上一页12 下一页

上一篇:JSP专题:第六部分:用JSP实现聊天室-2   下一篇:Java网络加载协议(JNLP)及Java Web Start
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论

   相关文章:
·Motorola微处理器bootloader分析与应用

   文章评论:(1条)
  
 请留名: 匿名评论   点击查看所有评论 论坛讨论
 

 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。