Java Applet 与Servlet之间的通信
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之间的通信的更多相关文章
- Java多线程编程-线程之间的通信
转载自:这里 学习了基础的线程知识 看到了 线程之间的通信 线程之间有哪些通信方式呢? 1.同步 这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信. public ...
- Java开发之Servlet之间的跳转
一.转向(Forward) 1.要点说明 转向是通过RequestDispatcher对象的forward()方法来实现的.RequestDispatcher可以通过HttpServletReques ...
- Thread线程源码解析,Java线程的状态,线程之间的通信
线程的基本概念 什么是线程 现代操作系统在运行一个程序的时候,会为其创建一个进程.例如,启动一个Java程序,操作系统就会创建一个Java进程.线代操作系统调度的最小单位是线程.也叫做轻量级进程.在一 ...
- 应用java多线程实现server端与多client之间的通信
应用多线程来实现server与多线程之间的通信的基本步骤 1.server端创建ServerSocket,循环调用accept()等待client链接 2.client创建一个Socket并请求和se ...
- java和C#之间SOCKET通信的问题
转自:http://www.cdtarena.com/javapx/201307/9170.html java和C#之间SOCKET通信的问题 一.服务器端(使用java编写) /** * 监听客户端 ...
- 关于Java和.NET之间的通信问题(JSON)
前言: 最近项目在某XX领导的所谓指引下,非要转型Java,转就转吧,在转的过程前期是个痛苦期,特别.NET旧有项目和Java新项目需要通信时. 进入主题,Java和.NET之间需要通信,这时媒介很多 ...
- Mac OS中Java Servlet与Http通信
Java中一个Servlet其实就是一个类,用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序.Servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器 ...
- struts2 servlet之间通信
Servlet之间通信的方式有两大类,每个类有三种不同的方法 1.request 2.session 3.application 不实现ServletContextAware,SessionAware ...
- java之线程(线程的创建方式、java中的Thread类、线程的同步、线程的生命周期、线程之间的通信)
CPU:10核 主频100MHz 1核 主频 3GHz 那么哪一个CPU比较好呢? CPU核不是越多越好吗?并不一定.主频用于衡量GPU处理速度的快慢,举个例子10头牛运送货物快还是1架飞机运 ...
随机推荐
- JavaScript中对象数组 根据某个属性值进行排序
将下列对象数组,通过工资属性,由高到低排序 var BaiduUsers = [], WechatUsers = []; var User = function(id, name, phone, ge ...
- Day4_生成器_三元表达式_列表解析_生成器表达式
生成器:在函数内部包含yield关键,那么该函数执行的结果就是生成器. 生成器就是迭代器. def func(): print('first') yield 111111 print('second' ...
- 【计算机视觉】深度相机(一)--TOF总结
http://www.voidcn.com/blog/lg1259156776/article/p-6302915.html 1.1 TOF初探 TOF是Time of flight的简写,直译为飞行 ...
- 寻找DevExpress破解经历之旅
众所周知DevExpress是收费的,但是破解版的也不少,近期公司需要做发票套打的功能让我找个打印工具,我寻思着DevExpress这个软件好像挺不错的,功能强大,看了下价格方面,好吧!2W多呢,市面 ...
- IE条件注释,为IE单独写js
<!--[if IE ]> <body class="ie"> <![endif]--> <!--[if !IE]>--> & ...
- webpack的css压缩不兼容IOS8问题探索
webpack使用postcss的autoprefixer插件,并在压缩css时使用了cssnano,处理不当的情况下会导致压缩css后,部分兼容前缀(比如-webkit-)被删除的问题. postc ...
- Effective C++ 读书笔记(1-7)
作者 Scott Meyers 翻译作者 侯捷 C++ 神牛 台湾人 术语: 1.explicit C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生.声明 ...
- Java CAS 原理分析
1.简介 CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制(可以把 CAS 看做乐观锁).CAS 操作包含三个操作数 -- 内存位置.预期数值和新值.CAS ...
- 在AspNetCore 中 使用Redis实现分布式缓存
AspNetCore 使用Redis实现分布式缓存 上一篇讲到了,Core的内置缓存:IMemoryCache,以及缓存的基础概念.本篇会进行一些概念上的补充. 本篇我们记录的内容是怎么在Core中使 ...
- MySQL varchar类型数据转tinyint类型
在mysql数据库中性别字段以前存的是'男'和'女',使用varchar类型存储的,但是在我mongo库中这个字段使用的是'1'和'0'存储的,在两个库之间的数据转换就很不方便,于是想要统一存储类型, ...