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;


URL servletURL = null;
.

URLConnection servletConnection = null; 


ObjectInputStream dbStream = null; 

try

{

servletURL = new URL( "http://localhost:8080/servlet/dbServlet.DbServlet" );

servletConnection = servletURL.openConnection();

dbStream = new ObjectInputStream( servletURL.openStream() );

data = (ResultSet) dbStream.readObject();

}

catch( Exception e )

{

。。。

}

如果Servlet向Applet传送的是普通的文本,则可以利用URLConnection对象的getInputStream()方法获得输入流,然后新生成一个DataInputStream对象,利用DataInputStream对象的readLine()方法依次取得Servlet传回的文本。


DataInputStream dbStream = new DataInputStream( servletURL.getInputStream() );


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连接获得输出流,这个输出流被连接到公共网关程序的(服务器端)的标准输入流上,然后把要传送的有关数据写入输出流,发送完毕关闭输出流。

String url1 = "http://localhost:8080/myApplet/servlet/SavePointToDBServlet";//servlet的地址

URL servletU = new URL(url1);

URLConnection servletC = servletU.openConnection();

servletC.setDoOutput(true);//允许输出

servletC.setDoInput(true);//允许写入

servletC.setUseCaches(false);

servletC.setRequestProperty("Content-Type","application/x-java-serialized-object");

OutputStream out = servletC.getOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(out);

oos.writeObject(newLocation);//向servlet输出一个对象

oos.flush();

oos.close();

servletC.getHeaderField(0);//这句话是很重要的,没有它服务器是没有反应的

2.2 Servlet向Applet的数据传递的实现

1.可以通过Servlet对象的request参数的getParameter()获得Applet传递过来的参数:

String sql=request.getParameter("newLocation");//引号里放参数的名称

2.可以通过request的getIntputStream()获得IO流连接

ObjectInputStream oin = new
ObjectInputStream(request.getInputStream());//获得连接 Map newPoint
=
(Map)
oin.readObject();
;

3.通过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 );

4.通过request参数的getWriter ()方法得到PrintWriter类型的输出,通过此对象的println()方法可以从Servlet向Applet输出文本:

PrintWriter out = response.getWriter();

out.println("

");

通过上面的分析我们通过Servlet 实现了对非宿主机上的数据库的访问,Servlet 与Applet通信提供了语言级别上的互相传递JAVA对象的便利,我们同样可以利用Applet通过CGI对各种服务器端的CGI程序或其它脚本应用程序(如ASP、JSP等)提供访问,以文本的方式实现通信。

Java Applet 与Servlet之间的通信的更多相关文章

  1. Java多线程编程-线程之间的通信

    转载自:这里 学习了基础的线程知识 看到了 线程之间的通信 线程之间有哪些通信方式呢? 1.同步 这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信. public ...

  2. Java开发之Servlet之间的跳转

    一.转向(Forward) 1.要点说明 转向是通过RequestDispatcher对象的forward()方法来实现的.RequestDispatcher可以通过HttpServletReques ...

  3. Thread线程源码解析,Java线程的状态,线程之间的通信

    线程的基本概念 什么是线程 现代操作系统在运行一个程序的时候,会为其创建一个进程.例如,启动一个Java程序,操作系统就会创建一个Java进程.线代操作系统调度的最小单位是线程.也叫做轻量级进程.在一 ...

  4. 应用java多线程实现server端与多client之间的通信

    应用多线程来实现server与多线程之间的通信的基本步骤 1.server端创建ServerSocket,循环调用accept()等待client链接 2.client创建一个Socket并请求和se ...

  5. java和C#之间SOCKET通信的问题

    转自:http://www.cdtarena.com/javapx/201307/9170.html java和C#之间SOCKET通信的问题 一.服务器端(使用java编写) /** * 监听客户端 ...

  6. 关于Java和.NET之间的通信问题(JSON)

    前言: 最近项目在某XX领导的所谓指引下,非要转型Java,转就转吧,在转的过程前期是个痛苦期,特别.NET旧有项目和Java新项目需要通信时. 进入主题,Java和.NET之间需要通信,这时媒介很多 ...

  7. Mac OS中Java Servlet与Http通信

    Java中一个Servlet其实就是一个类,用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序.Servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器 ...

  8. struts2 servlet之间通信

    Servlet之间通信的方式有两大类,每个类有三种不同的方法 1.request 2.session 3.application 不实现ServletContextAware,SessionAware ...

  9. java之线程(线程的创建方式、java中的Thread类、线程的同步、线程的生命周期、线程之间的通信)

    CPU:10核 主频100MHz 1核  主频    3GHz 那么哪一个CPU比较好呢? CPU核不是越多越好吗?并不一定.主频用于衡量GPU处理速度的快慢,举个例子10头牛运送货物快还是1架飞机运 ...

随机推荐

  1. C语言的产生

    一:C语言的产生 C语言是1972年由美国的Dennis Ritchie设计发明的,并首次在UNIX操作系统的DEC  PDP-11计算机上使用的. 它由早期的编程语言BCPL 演变而来,随着微型计算 ...

  2. LAMP的搭建

    可以在网上找整合包: httpd-2.4.18 + mysql-5.6.29 + php-5.5.30编译安装过程: 编译源代码后安装软件的位置:/usr/local/ 一.编译安装apache ap ...

  3. 解读2017之Service Mesh:群雄逐鹿烽烟起

    https://mp.weixin.qq.com/s/ur3PmLZ6VjP5L5FatIYYmg 在过去的2016年和2017年,微服务技术得以迅猛普及,和容器技术一起成为这两年中最吸引眼球的技术热 ...

  4. linux定时清理数据库过期记录

    cron服务是Linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: /sbin/service crond start//没打开的话首先要打开. /sbin/service cr ...

  5. 多层嵌套的json数据

    很多时候我们见到的json数据都是多层嵌套的,就像下面这般: {"name":"桔子桑", "sex":"男", , & ...

  6. remove duplicate of the sorted array

    description: Given a sorted array, remove the duplicates in place such that each element appear only ...

  7. PyQuery详解

    1.What is Pyquery? 答:灵活强大的网页解析库 2.安装: pip3 install pyquery 3.基本使用 初始化操作: 前言:在介绍之前小伙伴们我们先来了解下CSS的基本语法 ...

  8. 从一个微型例子看“C/C++的内存分配机制”和“数组变量名与指针变量名”(转)

    C++的内存有五大分区:堆区.栈区.自由存储区.全局/静态存储区.常量存储区. 五个数据段:数据段.代码段.BSS段.堆.栈 内存分配方式有三种: 从静态存储区域分配.内存在程序编译的时候就已经分配好 ...

  9. Python 基础【二】 下

    str()的方法 字符串练习 1.str.capitalize str.capitalize #返回首字母大写,其他字母小写的字符串 >>> a = 'gwdsr' >> ...

  10. MySQL 8 新特性之持久化全局变量的修改

    在8之前的版本中,对于全局变量的修改,其只会影响其内存值,而不会持久化到配置文件中.数据库重启,又会恢复成修改前的值.从8开始,可通过SET PERSIST命令将全局变量的修改持久化到配置文件中. 试 ...