<***——急!关于applet通过HTTP与servlet对话的问题!——***>

leolee 2001-10-16 06:26:01
加精
参考程序:
Applet端:
try{
URL url=new URL("http://localhost:8080/servlet/ServerServlet?Action=3");
URLConnection connect=url.openConnection();
connect.setDoOutput(true);
ObjectOutputStream objOut=new ObjectOutputStream(connect.getOutputStream());
objOut.writeObject("sdfsdfs");
objOut.flush();
objOut.close();
}catch(Exception e){
System.out.println(e);
}
servlet端:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("connection");
try{
ObjectInputStream objIn=new ObjectInputStream(request.getInputStream());
Object obj=objIn.readObject();
System.out.println(obj);
}catch(IOException ioe){
System.out.println("IOException:"+ioe);
}catch(ClassNotFoundException notFound){
System.out.println("ClassNotFoundException:"+notFound);
}
}

applet向servlet提交串行化的对象后,servlet没有任何响应,doGet方法没有执行!!
但是applet从servlet端读取串行化的对象是可以响应的:
ObjectInputStream inputStream=new ObjectInputStream(connect.getInputStream());
这是怎么回事啊!!!
...全文
123 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hugq 2001-10-19
我也碰到这个问题,不能向servlet写对象(writeObject()),但可以写
writeUTF(),希望交流一下!!!!

hugq@genomics.org.cn
回复
leolee 2001-10-18
to sharetop:
thank you very much.
代码下载下来了,我慢慢看,呵呵。
有什么体会在告诉你。

回复
sharetop 2001-10-18

好了,你的问题我总算调试过去了。

我也不知道为什么,不能只输出或只输入,必须同时输入和输出双向。

我把那本javaservlet编程指南书上的例子运行了一下,没问题,然后我一点一点去掉里面的东西,发现如果我在client只送不收,在servlet中只收不发,就铁定没有响应,……

即使我把system.out.println(strValue)放在前面,照理说收到信息也该在这里打印出来,可是也没有办法,非得加上整个输出的功能。

你试一下,源程序可以去这个站点: http://www.servletguru.com 有下的,你调试一下吧。

有什么心得与我分享。

回复
sharetop 2001-10-18

正是如此,因为这是一个http协议,与我们常用的打开Socket发收信息流不同,这正是被我们忽略的一点。

回复
leolee 2001-10-18
to sharetop:
我根据你说的不能只送不收,修改了applet的程序,在给servlet加上发送。如下:
Applet端:
try{
URL url=new URL("http://localhost:8080/servlet/ServerServlet?Action=3");
URLConnection connect=url.openConnection();
connect.setDoOutput(true);
ObjectOutputStream objOut=new ObjectOutputStream(connect.getOutputStream());
objOut.writeObject("sdfsdfs");
objOut.flush();
objOut.close();
ObjectInputStream inputStream=new ObjectInputStream(servletConnection.getInputStream());/*加入*/
。。。。。。。。
}catch(Exception e){
System.out.println(e);
}
servlet就响应了doPost方法。
非常奇怪,为什么每本参考书都没有讲到这个问题!!
回复
lliang2 2001-10-18
http协议没有只送不收的道理!
回复
sharetop 2001-10-17


Object obj=objIn.readObject();
过不去的原因是因为此时request.getInputStream()中根本没有东西过来。
回复
czb 2001-10-17
另外你的提交方式并没有错。
回复
czb 2001-10-17
我帮你调试了下程序,到
ObjectInputStream objIn=new ObjectInputStream(request.getInputStream());
Object obj=objIn.readObject();
就过过不去了,应该是这里错了吧。
回复
sharetop 2001-10-17

在doGet方法里只处理get方式过来的提交。而你是以什么方式过来的呢?当然不能响应了。

请参考这一帖子吧,前一阵的。(现在CSDN够差的了,才几天的帖子就跑掉了)

http://www.csdn.net/expert/topic/298/298350.shtm

还有什么问题再讨论。
回复
leolee 2001-10-17
太遗憾了!!
回复
leolee 2001-10-17
to sharetop:
我的提交方式是没错的,而且servlet端的程序也没有问题,但是为什么servlet就是不响应applet的连接呢?不执行doGet方法(第一句System.out.println("connection")控制台没有输出!)??输入流request.getInputStream()也为空??
回复
leolee 2001-10-17
to sharetop:
我的提交方式肯定是没错的,但是request.getInputStream()为什么会没有任何东西??
而且doGet方法也不响应applet的呼叫。
回复
leolee 2001-10-17
谢谢大家。csdn能回答问题的是越来越少了,我有问题都同时在csdn和jguru贴,很明显jguru要好得多。
servlet端程序是应该没有问题的,applet端在connect.getOutputStream()的时候没有任何迹象表明连接到server,但是connect.getInputStream()是绝对连接到server上的。
所有参考书都是这么写的代码,但是就是没有通过,servlet对connect.getOutputStream()不做任何反应!!!!
回复
leolee 2001-10-16
!!
没人知道吗!!!!!!!!!
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2001-10-16 06:26
社区公告
暂无公告