通信过程包括下述两个方面: 2.1 Applet对Servlet的访问及参数传递的实现 2.1.1创建URL对象 在JAVA程序中,可以利用如下的形式创建URL对象 URL servletURL = new URL( "http://localhost:8080/servlet/dbServlet.DbServlet" ); 2.1.2 与URL地址建立连接 在成功的创建了URL对象之后,可以调用URL类中的openConnection()函数来建立连接。openConnection()函数在建立连接的同时,进行通信连接的初始化工作。 URLConnection servletConnection = servletURL.openConnection(); 2.1.3 利用URLConnection对象进行读写操作 2.1.3.1 利用URLConnection对象读取Servlet返回的信息 在获得URLConnection对象之后,如果Servlet向Applet传送的是JAVA对象,则可以利用URLConnection对象的openStream()方法获得输入流,然后新生成一个ObjectInputStream对象,利用ObjectInputStream对象的readObject()方法即可得到Servlet传回的JAVA对象。 ResultSet rs = null; // Temporary storage for the data. URL servletURL = null; // The URL to the servlet. URLConnection servletConnection = null; // The connection to the servlet. ObjectInputStream dbStream = null; // The stream from the servlet. try { servletURL = new URL( "http://localhost:8080/servlet/dbServlet.DbServlet" ); servletConnection = servletURL.openConnection(); dbStream = new ObjectInputStream( servletURL.openStream() ); // Read an object from the servlet stream and cast it to a DataSetData // object. data = (ResultSet) dbStream.readObject(); } catch( Exception e ) { 。。。 } 如果Servlet向Applet传送的是普通的文本,则可以利用URLConnection对象的getInputStream()方法获得输入流,然后新生成一个DataInputStream对象,利用DataInputStream对象的readLine()方法依次取得Servlet传回的文本。 DataInputStream dbStream = new DataInputStream ( servletURL.getInputStream() ); // Read text from the servlet stream line by line. While((inputLine= dbStream.readLine())!=null) { ••••••. } 2.3.1.2利用URLConnection对象对Servlet的传值操作 Applet向Servlet的有关参数传递,可以通过下面两种方法实现: 可以通过在URL地址后附加参数以GET的方式实现参数的传递: servletURL = new URL( "http://localhost:8080/servlet/dbServlet.DbServlet?sql=select * from hklhzsj where total>100" ); 另一种方法是从URLConnection连接获得输出流,这个输出流被连接到公共网关程序的(服务器端)的标准输入流上,然后把要传送的有关数据写入输出流,发送完毕关闭输出流。 servletConnection.setDoOutput(true); PrintStream outStream=new PrintStream(servletURL.openConnection()); outStream.println(“sql=select * from hklhzsj where total>100”); outStream.close(); 2.2 Servlet向Applet的数据传递的实现 可以通过Servlet对象的request参数的getParameter()获得Applet传递过来的参数:String sql=request.getParameter("sql"); 通过Servlet对象的request参数的getOutputStream()所得到的输出流新生成一个对象输出流ObjectOutputStream类型的对象,然后通过该对象的writeObject()方法输出JAVA类型的对象。 Class.forName(“sun:jdbc:odbcdriver”); Connection conn =DriverManager.getConnection(connetionString) Statement st=conn.createStatement() ResultSet rs=st.execute(sql) dbStream = new ObjectOutputStream( response.getOutputStream() ); // Write the object... dbStream.writeObject(rs ); 通过request参数的getWriter ()方法得到PrintWriter类型的输出,通过此对象的println()方法可以从Servlet想Applet输出文本: PrintWriter out = response.getWriter(); out.println("<head><title>DataCenter</title></head>"); 通过上面的分析我们通过Servlet 实现了对非宿主机上的数据库的访问,Servlet 与Applet通信提供了语言级别上的互相传递JAVA对象的便利,我们同样可以利用Applet通过CGI对各种服务器端的CGI程序或其它脚本应用程序(如ASP、JSP等)提供访问,以文本的方式实现通信。 本文出自 51CTO.COM技术博客 |