我有一个要包装在servlet中的任务,以提供通过http请求远程运行该任务的能力。
我知道我可以使用REST API来实现这一点,但目前我假设(如果我错了,请纠正我)一个简单的servlet就可以了。
我想要实现的一件事是,如果向servlet发出了一个请求,而另一个请求仍在处理中,我会得到一个适当的响应--“任务已经在运行”。
我使用servlet-3.0构建了一个简单的servlet,它调用我想要运行的jar,但是当我发出两个请求时,直到第一个请求完成才会处理第二个请求。
编辑:
我的servlet是一个简单的http serlvet。服务方法被重写。我在开头有一个system.out.println("a")。当我在调试模式下调用servlet,然后(在断点处停止时)再次调用它时,消息只打印一次,并在释放断点和第一次运行结束时打印第二次。
发布于 2013-03-20 15:15:45
首先,这看起来一点也不像休息。如果你真的只想产生一个(单一的)后台任务,请确保你是在一个单独的工作线程中完成的,而不是请求线程。
发布于 2013-03-20 15:17:30
也许你需要一个锁:
public class Task extends HttpServlet {
// for singleton
//private volatile boolean running = false;
// or try this:
public static boolean running = false;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
if(running){
PrintWriter out = response.getWriter();
out.println("running");
return;
}
synchronized(Task.class){
if(!running){
running = true;
// run the task
running = false;
}
}
}
}https://stackoverflow.com/questions/15517329
复制相似问题