Applet 和 Servlet 之間的通信

今天有人問我怎麼實現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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章