Applet 和 Servlet 之间的通信

来源:互联网 发布:tensorflow极客学院 编辑:程序博客网 时间:2024/04/30 15:25

今天有人问我怎么实现Applet 和 Servlet 之间怎么通信, 傻眼了,  之前也没留意过, 记得当时学java 的时候就没有好好学Applet, 只知道Applet 是在client 端运行的, 而servlet 是在servetr 端运行的, 两者要通讯的话 必然要让Applet 建立到server 的连接, 然后请求相应的servlet. 主要思想是这样的了, 但是具体怎么做呢? 可以有一下几种方法.

第一, 使用socket直接连接

因为这学期正在学computer networking, 要建立网络连接, 一下子想到的就是socket, 当然, 这种做发在理论上是完全可以的, 但是要自己完成与server 之间的http 交互, 就会有一些问题产生, 比如安全啊, 以及要考虑有写服务器没有完全按照rfc 来实现, 所以, 从应用的角度来看, 这种方法不是很可行.   但是这种方法也有它的优点, 就是 一点一个socket 连接上就可以循环使用(persistent), 而一般的http1.0 则补支持这种技术.

第二, 使用http 文字流.

Java的URL和URLConnection类型使得从一个URL读取数据变得很容易,你可以不用担心Socket和其它有关网络工作的通常的复杂问题。我们所需要的只是一个servet端的组件,这个组件应该可以通过URL发放信息。代码示例如下:
在Applet中的实现:
public void function()
     throws IOException
{
     URL url = new URL(getCodeBase(), "/servlet/myServlet");
     URLConnetion con = url.openConnection();
     con.setUseCaches(false);
     InputStream in = con.getInputStream();
     DataInputStream textStream = new DataInputStream(in);
     String line1 = textStream.readLine():
     String line2 =  textStream.readLine();
    //do something about the Strings
 
}

当然Applet中读到的两个String 是Servlet中发过去的, Servlet 的代码如下:
public void doGet(HttpServletRequest request,  HttpServletResponse reponse)
                               throws IOexception, ServletException
{
     response.setContentType("text/plain");
     PrintWriter out = response.getWriter();
    out.println('' this the first line.'');
    out.println('' this the second line.'');

}

这种方法能够应付一些简单的情况, 它的局限是要把所有要传送的数据转化为String, 下面的方法就更适合面向对象的要求了

第三, 使用http 对象流.

就是用http 直接传输对象的二进制代码, 这里要使用到的技术还有java 的Serializable. 这个使用方法和方法二 比较类似, 只是将InputStream 封装到ObjectInputStream中去.
Applet 端代码:
public void function()
{
     URL url = new URL(getCodeBase(), "/servlet/myServlet");
     URLConnetion con = url.openConnection();
     con.setUseCaches(false);
     InputStream in = con.getInputStream();
     ObjectInputStream objStream = new ObjectInputStream(in);
    MyObject mo = (MyObject)obj.readObject();
}

Servlet 中的代码为
public void doGet(HttpServletRequest request,  HttpServletResponse reponse)
                               throws IOexception, ServletException
{
    
OutputStream out;
    ObjectOutputStream objStream;
    out = res.getOutputStream();
    objStream = new ObjectOutputStream(out);
    MyObject mo= new MyObject();
    objStream.writeObject(mo);
}

 

ps: 参考资料 : http://www.linuxaid.com.cn/articles/5/4/54051516.shtml

原创粉丝点击