Java 在servlet中异步编辑文本文件

Java 在servlet中异步编辑文本文件,java,file,servlets,asynchronous,Java,File,Servlets,Asynchronous,我正在基于servlet的doPost方法中的某个HttpServletResponse编辑一个文本文件。使用firefox海报,当我发布请求时,应该对文件进行编辑 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { JSONObject obj = myrequesthandler.han

我正在基于servlet的
doPost
方法中的某个
HttpServletResponse
编辑一个文本文件。使用firefox海报,当我发布请求时,应该对文件进行编辑

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
   JSONObject obj = myrequesthandler.handleRequest(request);
   editTextfile(obj);
}

我希望它能够以这样一种方式工作,在文件被完全编辑之前,我的servlet不会再处理post请求。它应该等待第一个post请求的编辑完成,然后开始第二个post请求的编辑。

因为您使用的是servlet 3.0,我认为这就是您需要的

从这篇文章中:

@WebServlet(name=“myServlet”,urlPatterns={”/slowprocess},asyncSupported=true)
公共类MyServlet扩展了HttpServlet{
public void doGet(HttpServletRequest请求、HttpServletResponse响应){
AsyncContext aCtx=request.startAsync(请求,响应);
ServletContext appScope=request.getServletContext();
((队列)appScope.getAttribute(“slowWebServiceJobQueue”)).add(aCtx);
}
}

@WebServletContextListener
公共类SlowWebService实现ServletContextListener{
public void contextInitialized(ServletContextEvent sce){
队列作业队列=新ConcurrentLinkedQueue();
sce.getServletContext().setAttribute(“slowWebServiceJobQueue”,jobQueue);
//池大小与Web服务容量匹配
Executor Executor=Executors.newFixedThreadPool(10);
while(true)
{
如果(!jobQueue.isEmpty())
{
final AsyncContext aCtx=jobQueue.poll();
executor.execute(新的Runnable(){
公开募捐{
ServletRequest=aCtx.getRequest();
//获取参数
//调用Web服务端点
//设定结果
aCtx.forward(“/result.jsp”);
}                    
});             
}
}
}
公共无效上下文已销毁(ServletContextEvent sce){
}
}

听起来像是你要找的东西。谢谢@johny的回复。我正在寻找一种方法,使编辑变得异步,而不是使整个servlet异步。我想servlet将自己处理异步调用。
@WebServlet(name="myServlet", urlPatterns={"/slowprocess"}, asyncSupported=true)
public class MyServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        AsyncContext aCtx = request.startAsync(request, response); 
        ServletContext appScope = request.getServletContext();
        ((Queue<AsyncContext>)appScope.getAttribute("slowWebServiceJobQueue")).add(aCtx);
    }
}
@WebServletContextListener
public class SlowWebService implements ServletContextListener {

    public void contextInitialized(ServletContextEvent sce) {
        Queue<AsyncContext> jobQueue = new ConcurrentLinkedQueue<AsyncContext>();
        sce.getServletContext().setAttribute("slowWebServiceJobQueue", jobQueue);
        // pool size matching Web services capacity
        Executor executor = Executors.newFixedThreadPool(10);
        while(true)
        {
            if(!jobQueue.isEmpty())
            {
                final AsyncContext aCtx = jobQueue.poll();
                executor.execute(new Runnable(){
                    public void run() {
                        ServletRequest request = aCtx.getRequest();
                        // get parameteres
                        // invoke a Web service endpoint
                        // set results
                        aCtx.forward("/result.jsp");
                    }                    
                });             
            }
        }
    }

    public void contextDestroyed(ServletContextEvent sce) {
    }
}