Servlet - Applet交互需要阅读响应

时间:2012-05-29 12:54:30

标签: java servlets applet

我正在处理以下问题。

我有一个servelt(使用doPost和doGet覆盖)和一个包含以下代码的applet:

        String urlStr="blabla";
        URLConnection conn = StartConnection("http","localhost",8084,urlStr);            
        InputObject obj = GetInputObject();
        ObjectOutputStream oos = new ObjectOutputStream(conn.getOutputStream());
        oos.writeObject(obj);
        oos.flush();

使用这段代码,servlet不会执行任何操作(doPost或doGet)。但是,如果我添加

        BufferedReader in=new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String result = in.readLine();
        log(result);

我进入了doPost体内。谷歌搜索什么都没有。即使我不需要,为什么我必须回读回复?

加入:

private URLConnection StartConnection(String protocol,String host,int port, String urlStr){
        URLConnection conn = null;
        try
        {
            URL currentPage=getCodeBase();
            URL dataURL=new URL(protocol,host,port,urlStr);
            conn = dataURL.openConnection();            
            conn.setDoOutput(true);
            conn.setDoInput(true);
        }
        catch(Exception ee){
                log(ee.getMessage().toString());
        }
        return conn;

    }

2 个答案:

答案 0 :(得分:2)

我们看不到StartConnection()的来源显然只会返回未连接的URLConnection。只是创建这个对象根本不与网络对话;只有在调用connect()时才会发生这种情况。从输入流中读取隐式调用connect(),这就是为什么这对你有用。你可以打电话给connect();你实际上不必阅读任何你不想要的数据。

答案 1 :(得分:1)

如果要将applet类的序列化实例发送到servlet,则必须像浏览器一样进行HTTP调用。您应该使用POST方法并将序列化字节作为POST参数发送。 这些东西的最佳库是Apache HttpClient。这是tutorial