-1

我正在处理以下问题。

我有一个servelt(覆盖了doPost和doGet)和一个带有以下代码的小程序:

        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;

    }
4

2 回答 2

2

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

于 2012-05-29T12:57:29.443 回答
1

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

于 2012-05-29T15:59:39.363 回答