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的处理方式。本篇...
- 上下文状态栈 上下文状态栈为内存中的一块区域,它用来保存前上下文当的状态.我们获取的图层上下文当中其实两块区域,一...