日期:2014-05-18  浏览次数:20722 次

高手帮忙看下这个servlet,在线等,马上结帐!
编译通过了,然后放进去后发现只实现了前半个功能,各位达人能否帮忙改一下,小弟在此感激不尽!

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PublicAsk extends HttpServlet{
  public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
long lastmodify=new File("fz.jpg").lastModified();

String addrFrom = request.getParameter("addrFrom");
String addrTo = request.getParameter("addrTo");
String msg = addrFrom + " " + addrTo;
BufferedWriter out = new BufferedWriter(new FileWriter("addr.txt"));
out.write(msg);
out.close();//这一段都没问题

int count = 0;
PrintWriter output = response.getWriter();
while(count < 10){
  long l=new File("fz.jpg").lastModified()-lastmodify;
  if(l!=0)break;
output.println("waiting...");//页面上没显示,不知道提示是不是这样输出的?
count++;
  try {
  Thread.sleep(100);
  } catch (Exception e) {
  // TODO Auto-generated catch block
  System.err.println(e.toString());
  }
  }
if(count == 10){
output.println("Timeout!");
try {
  Thread.sleep(300);
  } catch (Exception e) {
  // TODO Auto-generated catch block
  System.err.println(e.toString());
  }
request.getRequestDispatcher("/public.jsp").forward(request, response);//超时返回
}
else{
request.getRequestDispatcher("/showmap.jsp").forward(request,response);//没超时跳转一个显示图片的网页
}
}
}

------解决方案--------------------
如果你想在页面上显示,那应该在showmap.jsp中写相应代码,否则没法知道你的
output.println("waiting...");
output.println("Timeout!"); 
应该显示在什么地方。

另外,如果你不打算forward,则应该有output.flush();output.close();这样的语句。
这会将你上面的println()直接返回给客户端。注意,这不算是一个完整的页面。因为没有<html><body>等标准元素。

最后,你的代码估计达不到需要的效果。可能的结果是,一次性返回多个"waiting..."给客户端,而不是逐个返回。
从我的估计来看,也需要使用ajax才能达到你想要的效果。
------解决方案--------------------
output.println("waiting...");//页面上没显示,不知道提示是不是这样输出的? 

这样肯定是不会输出的,output.println("");不是即时的
要等这个servlet执行完后页面才会有反应的,而你的执行完后又跳到另外一个地方去了,那就看不到了