zoukankan      html  css  js  c++  java
  • Java Applet 与Servlet之间的通信

    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 )
    {
    。。。
    }

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

    DataInputStream dbStream new DataInputStreamservletURL.getInputStream() );

    While((inputLine= dbStream.readLine())!=null)
    {
    ••••••.
    }

    2.3.1.2利用URLConnection对象对Servlet的传值操作

    Applet向Servlet的有关参数传递,可以通过下面两种方法实现:

    可以通过在URL地址后附加参数以GET的方式实现参数的传递:

    servletURL new URL( "http://localhost:8080/servlet/dbServlet.DbServletsql=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.getConnectionconnetionString
    Statement st=conn.createStatement()
    ResultSet rsst.execute(sql)
    dbStream new ObjectOutputStream( response.getOutputStream() );
    // Write the object...
    dbStream.writeObject(rs );


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

    PrintWriter out response.getWriter();
    out.println("

    ");

     

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

  • 相关阅读:
    可以
    全链路压测方案
    PyTestReport使用
    查看mysql的版本号
    Centos7 下的SVN安装与配置
    confluence中org.apache.tomcat.util.net.NioEndpoint$Acceptor.run Socket accept failed的解决方法
    CentOS7安装部署zabbix3.4操作记录
    Aasible中cryptography兼容性报错解决办法
    windows10中git-bash闪退的解决办法
    jira发送邮件报错
  • 原文地址:https://www.cnblogs.com/teiba/p/8996515.html
Copyright © 2011-2022 走看看