package com.czy.servlet;
import java.io.IOException;
import javax.servlet.AsyncContext;
import javax.servlet.AsyncEvent;
import javax.servlet.AsyncListener;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author czy
*
*/
@WebServlet(urlPatterns={ "/message.do" },loadOnStartup=1,asyncSupported=true)
public class MessageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*String message = request.getParameter("message");
System.out.println(message);*/
AsyncContext asyncContext = request.startAsync();
asyncContext.setTimeout(5000);
asyncContext.addListener(new AsyncListener() {
@Override
public void onTimeout(AsyncEvent arg0) throws IOException {
//异步超时时
}
@Override
public void onStartAsync(AsyncEvent arg0) throws IOException {
//异步开始时
}
@Override
public void onError(AsyncEvent arg0) throws IOException {
//异步错误时
}
@Override
public void onComplete(AsyncEvent arg0) throws IOException {
//异步完成时
}
});
//将耗时间的操作放在异步上下文中执行主要的好处是不影响Tomcat单位时间
//接入的用户请求的数量,如果没有异步环境Tomcat默认的200个线程用完之后
//其他用户请求就必须排队等待Tomcat接入,这样越靠后的请求等待时间越长
//甚至可能半分钟时间都无法正常接入
//启动异步上下文进行异步接入
asyncContext.start(() -> {
//ServletRequest req = asyncContext.getRequest();
//ServletResponse resp = asyncContext.getResponse();
//执行耗时间的操作
//耗时间操作完成之后,要么结束异步上下文
//asyncContext.complete();
//要么将请求派发到某个页面上
asyncContext.dispatch("index.jsp");
});
System.out.println("1234");
}
}
Servlet开启异步上下文
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 异步异常与上下文 在Python黑魔法---上下文管理器最后关于上下文的使用,提到了tornado的处理方式。本篇...
- 上下文状态栈 上下文状态栈为内存中的一块区域,它用来保存前上下文当的状态.我们获取的图层上下文当中其实两块区域,一...