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. jquery选择器项目实例分析

    首先废话一句,jQuery选择器真心很强大!  在项目中遇到这么一个问题easyui的问题 如图所示,当前页面显示的是"原始报文查询"的页面,当时左侧导航栏却选中的是"重 ...

  2. Android之Drawable

    Android 中图片和常见的颜色都可以是一个Drawable. Drawable可以方便我们做出一些特殊的UI效果,这一点在UI相关的开发工作中尤其重要.其主要优点有: 使用简单,比自定义View成 ...

  3. 各种代码版本控制工具下使用http代理的方法

    原文:各种SCM工具下使用http代理下载源码:http://www.linuxeden.com/html/develop/20090723/66951.html SCM是软件配置管理的简称,常见的S ...

  4. Aptana版本回滚的方法

    最近Aptana对Django1.7的编译支持有点问题,开发环境必须使用Django1.6版本,今天看了一眼它的官网,版本已经到3.6.1,我的版本还是3.4.2,就checkupdate升级到3.6 ...

  5. activeMq的入门程序

    生产者 1.导入相关依赖 2.交给Spring管理,写入相关配置JmsTemplate @RunWith(SpringJUnit4ClassRunner.class) @ContextConfigur ...

  6. python flask中的代码约定

    在Python社区中有许多关于代码风格的约定.如果你写过一段时间Python了,那么也许对此已经有些了解. 我会简单介绍一下,同时给你一些URL链接,从中你可以找到关于这个话题的详细信息. 让我们提出 ...

  7. 分享一下 常用的转换方法(例如:数字转金钱,文本与html互转等)

    public sealed class SAFCFormater { /// <summary> /// 文本格式到HTML /// </summary> /// <pa ...

  8. Reactor三种线程模型与Netty线程模型

    文中所讲基本都是以非阻塞IO.异步IO为基础.对于阻塞式IO,下面的编程模型几乎都不适用 Reactor三种线程模型 单线程模型 单个线程以非阻塞IO或事件IO处理所有IO事件,包括连接.读.写.异常 ...

  9. python_code list_1

    >>> def is_not_empty(s): return s and len(s.strip()) > 0 >>> filter(is_not_empt ...

  10. Spring源码阅读笔记

    前言 作为一个Java开发者,工作了几年后,越发觉力有点不从心了,技术的世界实在是太过于辽阔了,接触的东西越多,越感到前所未有的恐慌. 每天捣鼓这个捣鼓那个,结果回过头来,才发现这个也不通,那个也不精 ...