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架飞机运 ...
随机推荐
- jquery选择器项目实例分析
首先废话一句,jQuery选择器真心很强大! 在项目中遇到这么一个问题easyui的问题 如图所示,当前页面显示的是"原始报文查询"的页面,当时左侧导航栏却选中的是"重 ...
- Android之Drawable
Android 中图片和常见的颜色都可以是一个Drawable. Drawable可以方便我们做出一些特殊的UI效果,这一点在UI相关的开发工作中尤其重要.其主要优点有: 使用简单,比自定义View成 ...
- 各种代码版本控制工具下使用http代理的方法
原文:各种SCM工具下使用http代理下载源码:http://www.linuxeden.com/html/develop/20090723/66951.html SCM是软件配置管理的简称,常见的S ...
- Aptana版本回滚的方法
最近Aptana对Django1.7的编译支持有点问题,开发环境必须使用Django1.6版本,今天看了一眼它的官网,版本已经到3.6.1,我的版本还是3.4.2,就checkupdate升级到3.6 ...
- activeMq的入门程序
生产者 1.导入相关依赖 2.交给Spring管理,写入相关配置JmsTemplate @RunWith(SpringJUnit4ClassRunner.class) @ContextConfigur ...
- python flask中的代码约定
在Python社区中有许多关于代码风格的约定.如果你写过一段时间Python了,那么也许对此已经有些了解. 我会简单介绍一下,同时给你一些URL链接,从中你可以找到关于这个话题的详细信息. 让我们提出 ...
- 分享一下 常用的转换方法(例如:数字转金钱,文本与html互转等)
public sealed class SAFCFormater { /// <summary> /// 文本格式到HTML /// </summary> /// <pa ...
- Reactor三种线程模型与Netty线程模型
文中所讲基本都是以非阻塞IO.异步IO为基础.对于阻塞式IO,下面的编程模型几乎都不适用 Reactor三种线程模型 单线程模型 单个线程以非阻塞IO或事件IO处理所有IO事件,包括连接.读.写.异常 ...
- python_code list_1
>>> def is_not_empty(s): return s and len(s.strip()) > 0 >>> filter(is_not_empt ...
- Spring源码阅读笔记
前言 作为一个Java开发者,工作了几年后,越发觉力有点不从心了,技术的世界实在是太过于辽阔了,接触的东西越多,越感到前所未有的恐慌. 每天捣鼓这个捣鼓那个,结果回过头来,才发现这个也不通,那个也不精 ...