我正在处理以下问题。
我有一个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;
}
答案 0 :(得分:2)
我们看不到StartConnection()
的来源显然只会返回未连接的URLConnection
。只是创建这个对象根本不与网络对话;只有在调用connect()
时才会发生这种情况。从输入流中读取隐式调用connect()
,这就是为什么这对你有用。你可以打电话给connect()
;你实际上不必阅读任何你不想要的数据。
答案 1 :(得分:1)
如果要将applet类的序列化实例发送到servlet,则必须像浏览器一样进行HTTP调用。您应该使用POST方法并将序列化字节作为POST参数发送。 这些东西的最佳库是Apache HttpClient。这是tutorial。