这是我正在尝试做的事情(按顺序):
计划A)
1)向servlet发送HTTP请求
5)收到回复
计划B)
2)接收HTTP呼叫
3)做一些任务
4)写入outputStream
这是我的(非工作)代码:
计划A:
URL url = new URL(targetURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true); // this is to enable writing
conn.setDoInput(true); // this is to enable reading
OutputStream out = conn.getOutputStream();
out.write("blabla".getBytes());
InputStream is = conn.getInputStream();
计划B:
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
TestRunnable r= new TestRunnable(req,resp);
Thread t = new Thread(r);
t.start();
}
}
这里的问题是,由于任务在线程中处理,service()直接返回,因此程序A自动检索InputStream。 我想等待线程结束然后返回InputStream; 我可以直接在service()方法中完成任务,但它会阻塞,我不希望这样。
我想的越多,我认为就越不可能实现。
有人可以帮助我,或者告诉我为什么我试图达到这个目的是错误的?
答案 0 :(得分:-1)
Servlet已经是多线程的,在您的情况下,没有理由启动线程来执行该服务。
只需直接调用runnable的run方法,而无需使用Thread
构建r.run()
,或调用t.join()
等到线程结束。