编辑:sx_chengl
2016-07-19
使用Java实体传输技术,可以有效解决网络编程中传递大量、复杂的各种类型数据的问题。这里是一篇Java实体传输的实现方法,让我们一起来看看详细内容吧~
摘要:实体传输可以在网络中直接传递或者存储对象,因而在网络编程中具有很重要的作用。文章介绍了Java实体传输的实现方法,Applet与 Servlet之间的远程方法调用(RMI)以及Java实体传输在网上采购系统中的应用。
关键词:实体传输;Applet ;Servlet ;RMI;网上采购系统
据统计,在大多数企业中,采购物料和物料的成本大大超过了劳动力或者其他成本。通过建立一个有效的网上采购系统,可以大大降低企业的采购周期和采购成本。同时,通过建立良好的采购商-供应商关系,可以形成一条低成本的、高效的、高质量的产品供应链,从而降低企业的生产成本,提高企业的竞争力。
在Web 实际应用中,B/S(Browser/Server)模式得到了广泛的应用。在这种结构中,客户端与服务器端之间传递大量的、复杂的各种类型的数据是很常见的。如果我们将要传输的信息封装在对象中,然后进行对象的传输,将会大大简化编程工作。在网上采购系统中,采购供应双方的电子数据交换是必不可少的内容。借助于Java实 体传输,结合XML技术,很容易建立起一个功能强大的、高效的网上采购系统。
1 Java实体传输的实现方法
实际上,Java 实体传输技术已经广泛地应用在JavaBean和Java远程方法调用(RMI)的技术中。其实现的方法很简单,可以分为两步:
(1) 首先将对象进行序列化(serialize)。对象序列化机制可以在对象写入流、文件或者是从流、文件中读出时自动进行对象状态的保存与恢复工作。对象序列化机制通过实现Java.io.Serializable 接口或者Java.io.Extenalizable接口来完成。具体的代码示例如下:
class Employee implements Serializable{
private String firstName;
private String lastName;
privare int age;
transient private float payRate;
......
}
transient关键字可以使得payRate属性不会被序列化。这样可以通过它来控制对象的哪一些属性不会被序列化。
(2) 通过使用对象流技术实现实体的传输。为此,首先要创建某些OutputStream对象,然后将其封装到ObjectOutputStream 对象中。此时,只需要调用writeObject()方法就可以完成对象的序列化。然后可以将对象的实体在网络上传输。当要恢复该对象时,将一个InputStream对象封装到ObjectInputStream内 ,然后调用readObject()方法,下溯造型为原来的对象即可。具体的代码示例如下:
Employee oneEmployee=new Employee("jiang","rui");
ObjectOutputStream out=
new ObjectOutputStream(
new ByteArrayOutputStream());
//输出对象
out.writeObject(oneEmployee);
out.flush();
//使用URL类进行网络传输
URL url=new URL(serverAddress);
URLConnection con=url.openConnection();
••••••
//读取返回对象
ObjectInputStream in=
new ObjectInputStream(
con.getInputStream());
Employee reEmployee=
(Employee)in.readObject();
2 Applet与 Servlet之间的远程方法调用
由于在目前的Web应 用中,数据库服务器和Web服务器通常位于不同的服务器上,因此单独使用Applet小应用程序不能直接访问数据库服务器来获取信息。解决这个问题的方法是:让Applet 与位于Web 服务器上的Servlet通信,由Servlet根 据Applet提交的信息去访问数据库服务器或者别的服务器,然后将结果返还给Applet。这里面就牵涉到了Applet 与Servlet 之间的通信。下面就简要介绍一下Applet与Servlet之间进行远程方法调用的方法与实现。
2.1远程方法调用(RMI)的概念
远程方法调用是对象序列化的姐妹概念。它允许用户沿着一个流传送一个对象,并且允许对象存放于不同的计算机并在这些计算机系统上激活该对象的方法。在Applet与Servlet 之间进行的RMI通常是指在客户端运行的程序中(Applet)直接调用服务器端的远程对象的方法(用Servlet来实现),并且获得该远程对象方法的返回值的过程。
2.2远程方法调用的实现
创建并实现远程对象通常需要5个步骤。下面给出一个简单的实例:客户程序调用位于服务器上的远程对象ProductImpl的 方法getDescription(),返回一个字符串。通过这个实例来说明创建并实现远程对象所需要的5个步骤(此处省略了所需要导入的Java包)。
(1)定义一个扩展远程接口的接口。该接口中的每一个方法必须声明它将抛出一个RemoteException异常。这个接口为客户机和服务器共享,并同时驻留在两个计算机中。Interface Product extends Remote{
public String getDescription()
throws Remote
Exception;
}
(2)定义一个实现该接口的类。该类驻留在服务器端。
public class ProductImpl
extends UnicastRemoteObject
implements Product{
public ProductImpl(String n)
throws RemoteException{
name=n;
}
public String getDescription()
throws RemoteException{
}
(3)使用rmic程序生成远程实现所需要的主干(stub)和框架(skeleton)。
rmic-v1.2 ProductImpl 会自动生成两个文件:Product-
Impl_Stub.class 和ProductImpl_Skel.class
(4)创建一个客户程序对服务器进行RMI调用。主要代码如下:
System.setSecurityManager(
new RMISecurityManager());
Product c1=(Product)Naming.
Lookup(url+"toaster");
System.out.println
(c1.getDescription());
注:setSecurityManager()方法是为了设置安全管理器。当Applet 与Servlet 之间进行远程方法调用时,由于Applet拥有自己的安全管理程序,因此此时不再需要设置安全管理器。
(5)启动Registy(登记)并运行自己的远程服务器和客户程序。
远程服务器主要代码如下:ProductImpl p1=new ProductImpl
("Blackwell Toaster");
Naming.rebind("toaster",p1);
在Applet 与Servlet之间进行远程方法调用的实现也一样。只需要把上面所提到的文件,加上用来运行Applet的网页文件,统统放到同一主机上即可,只是主干和框架文件需要与Applet程序放在同一个目录下。
3 Java实体传输在网上采购系统中的应用
采购对于企业和政府而言是非常关键的一个环节,无论是生产资料的采购,还是非生产资料和服务的采购,都将直接影响到成本或利润的升降。由于传统采购缺乏透明度和稳定性,且难于管理,因此网上采购正在被大型企业或政府接受成为主流。
3.1一个典型的采购工作流程
上海汽车工业集团的采购系统所采用的是以集中采购为主的网上集中采购系统,所有的采购任务均由集团供应商集中处理。其典型的采购工作流程如图1所示。
3.2 Java实体传输在工作流程中的应用
在上述网上采购系统的工作流程中,有许多环节需要进行客户端与服务器端的电子数据交换。比如:集团供应商提供给一般供应商的询价单;一般供应商的报价单;集团供应商的订单以及一般供应商的发货单等等。下面就以从集团供应商传递订单信息到一般供应商的过程为例,来说明Java实体传输在数据交换过程中的应用。
当集团供应商确认订单信息以后,订单信息存放于集团供应商的数据库中。然后系统会自动通知相关的一般供应商。一般供应商收到通知,通过身份认证,登录到集团供应商的社区后就可以查看或者生成自己的订单,或者通过客户端应用软件(Applet)将订单信息存入自己的数据库中。
众所周知,一般的Applet不能访问客户机的系统资源。但是经过签名认证的Applet 可以享有与Application相同的权限,如可进行与其他服务器的Socket连接、访问客户机本地文件等。所以以上过程可采用Applet 与Servlet技术来实现。
实现的方法如下:定义一个远程数据库操作类(Data-Opr)和一个可序列化的结果集对象(DateSet)。在Applet中调用远程数据库操作类进行数据库操作,返回结果集对象后在Applet 程序中取出数据生成XML文档并存放在本地机上。主要的代码如下:
(1) 定义远程数据库操作接口
public interface DataOpr extends Remote{
public int doSearch(String sqlStr)
throws RemoteException;
public DataSet getDataSet()
throws RemoteException;
••••••
}
(2)定义一个实现该接口的类
public class DataOprImpl
extends UnicastRemoteObject
implements DataOpr{//构造函数
public DataOprImpl()
throw RemoteException{
••••••
}
//执行数据库操作的方法为远程方法
public int doSearch(String sqlStr)
throw RemoteException{
••••••
}
//获得结果集的方法为远程方法
public DataSet getDataSet()
throw RemoteException{
return dataSet;
}
••••••
//成员变量
DataSet dataSet;
••••••
}
(3)定义一个可序列化的结果集对象
public class DataSet
implements Serializable{
••••••
}
(4)其余的服务器端程序、客户端程序、生成主干和框架的方法与前面介绍的Applet 与Servlet之间的远程方法调用的实现方法一样。
注意:上述代码中,DataSet类不是远程类,它的所有方法不需要声明抛出RemoteException。它作为远程操作类的成员变量而存在,用于封装doSearch方法执行的结果。
可以看出,通过使用Java实体传输技术,可以大大简化代码的编写,使得整个程序显得简洁易懂。同时,客户端采用经过签名认证的Applet技术,不仅可以达到与应用程序相同的功能,而且也使得客户端程序的维护和升级变得简单。
4结束语
使用Java实体传输技术,可以有效解决网络编程中传递大量、复杂的各种类型数据的问题。这在网上采购系统中有着很重要的应用价值。文章通过讨论Java实体传输的实现方法、Applet 与Servlet之间的远程方法调用以及采购系统的工作流程,探讨了Java实体传输在网上采购系统中的应用,为建立一个有效的、功能强大的网上采购系统提供了一个行之有效的方法。
参考文献
1 Horstmann C S,Cornell G.朱志,王怀,赵伟等译.Java2核心技术(卷II):高级特性[M].北京:机械工业出版社,2000
2陈海山.深入Java Servlet网络编程[M].北京:清华大学出版社,2002
3 Leenders M R,Fearon H E.张杰,张群译.采购与JAVA论文定制供应链管理[M].北京:机械工业出版社,2001
4沈兆阳.Java 与XML数据库整合应用[M].北京:清华大学出版社,2002
好了,这篇Java实体传输的实现方法的精彩内容就给大家介绍到这里了。希望大家继续关注我们的网站!
相关推荐:
标签:JAVA论文
精品学习网(51edu.com)在建设过程中引用了互联网上的一些信息资源并对有明确来源的信息注明了出处,版权归原作者及原网站所有,如果您对本站信息资源版权的归属问题存有异议,请您致信qinquan#51edu.com(将#换成@),我们会立即做出答复并及时解决。如果您认为本站有侵犯您权益的行为,请通知我们,我们一定根据实际情况及时处理。