如何让servlet响应多个请求?

时间:2013-03-20 07:06:06

标签: java servlets

我有一个任务要包装在servlet中,以便能够通过http请求远程运行任务。

我知道我可以使用REST API来实现这一点,但是现在我假设(如果我错了请纠正我)一个简单的servlet会做。

我想要实现的一件事是,如果在处理另一个请求的同时向servlet发出请求,我将得到一个适当的响应 - “任务已在运行”。

我使用servlet-3.0构建了一个简单的servlet,它调用我想要运行的jar,但是当我发出2个请求时,第二个请求在第一个请求完成之前不会被处理。

编辑:

我的servlet是一个简单的http serlvet。服务方法覆盖。 我在开始时有一个system.out.println(“a”)。 当我在调试模式下调用servlet然后(在断点处停止时)再次调用它时,消息只打印一次并在我释放断点并第一次运行完成时第二次打印。

2 个答案:

答案 0 :(得分:0)

首先,这似乎不像REST。如果您真的只想生成(单个)后台任务,请确保在单独的工作线程中执行,而不是请求线程。

答案 1 :(得分:0)

也许你需要一把锁:

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;
            }
        }
    }
}