大家进来讨论一下吧,关于Servlet的...

seadaughter 2006-05-18 08:31:55
在Tomcat 下,我写了一个Servlet 如下:
功能是,不断从客户端读取数据,并显示:
public class UploadFileServlet extends HttpServlet
{
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
InputStream inf=request.getInputStream();
int len=0;
byte b[]=new byte[20];
while((len=inf.read(b))>0)
{
String str=new String(b,0,len);
System.out.println(str);
}
}
}

我的客户端代码如下 :
URL url=new URL("http://localhost:8080/Test");//这个url可以访问上面的Servlet
HttpURLConnection httpConnection=(HttpURLConnection) url.openConnection();
httpConnection.setRequestMethod("POST");

httpConnection.setDoOutput(true);
OutputStreamWriter osw=new OutputStreamWriter(httpConnection.getOutputStream());
osw.write("A is Writing Something");
osw.flush();
System.in.read();//暂停给服务端输入数据...

osw.write("\n Are you OK?");
osw.flush();
osw.close();

System.out.println(httpConnection.getContentType());

那么按照客户端的流程,服务端首先应该将 A is Writing Something 输出来,
然后等待客户端敲入一个字符后,服务端接收到 后一行字符,即\n Are you OK? 并输出。
但实际情况下,为什么,在服务端,这两行字符都要等到 客户端敲入一个字符后,才同时一起输出来呢?
...全文
173 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
seadaughter 2006-05-20
  • 打赏
  • 举报
回复
To ruanjiantaotao:
具体什么意思? 不好意思,我没懂。:)
ruanjiantaotao 2006-05-20
  • 打赏
  • 举报
回复
osw.write("A is Writing Something");
osw.flush();
System.in.read();//暂停给服务端输入数据... 有问题
osw.write("\n Are you OK?");
osw.flush();
osw.close();


楼主试试断开流以后,重新连接后发送第二句话
seadaughter 2006-05-20
  • 打赏
  • 举报
回复
在,什么意思?
ldjava 2006-05-20
  • 打赏
  • 举报
回复
老兄换在没
harston 2006-05-20
  • 打赏
  • 举报
回复
mark下,睡觉了
yyjzsl 2006-05-19
  • 打赏
  • 举报
回复
顶个,该睡觉了,^_^
seadaughter 2006-05-19
  • 打赏
  • 举报
回复
to chinabh(黑鹰) :
我知道,但我想知道他得那句话是什么意思?
所以open两次就可以得到你要的结果了?? 我怎么得到结果,代码大概是?
chinabh 2006-05-19
  • 打赏
  • 举报
回复
super_zzw(之支吾)已经说的很清楚了,http协议是无状态的
seadaughter 2006-05-19
  • 打赏
  • 举报
回复
To super_zzw(之支吾) :
所以open两次就可以得到你要的结果了
这句话什么意思??
能否用代码表示一下??
谢谢啊!
super_zzw 2006-05-19
  • 打赏
  • 举报
回复
因为在你close connection前请求数据没有post完成,虽然你flush(),但是你并没有说你的请求数据已经post结束了。所以直到close connection的时候服务端才认为你的POST数据已经结束,可以进行下一步处理了。
所以open两次就可以得到你要的结果了,但是是属于两次request.(http协议是无状态的)
seadaughter 2006-05-19
  • 打赏
  • 举报
回复
没有知道吗

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧