servlet是基于Java的Web组件,由容器进行管理,来生成动态内容。像其他基于Java的组件技术一样,servlet也是基于平台无关的Java类格式,被编译为平台无关的字节码,可以被基于Java技术的Web服务器动态加载并运行。容器(容器),有时候也叫做servlet引擎,是Web服务器为支持servlet功能扩展的部分。客户端通过servlet容器实现的请求/响应模式(请求/应答模式)与servlet进行交互。
每当一个Servlet版本发布都会对应一个Servlet版本的规范,比如Servlet2.5, Servlet3.0 Servlet3.1。
规范中描述了Java Servlet API的标准,定义了Java Servlet API中类,接口,方法签名的完整规范且附带的Javadoc文档供开发人员查阅,目的主要是为Java Servlet给出一个完整和清晰的解释。从下图可以看出Servlet规范版本和tomcat支持的版本的对应关系。比如Servlet3是从tomcat7以后开始支持的。
2,通过请求获取异步上下文AsyncContext.AsyncContext asyncCtx=request.startAsync ();
3、开启业务逻辑处理线程,并将AsyncContext传递给业务线程.executor。执行(新AsyncRequestProcessor (asyncCtx秒));
4、在异步业务逻辑处理线程中,通过asyncContext获取请求和响应,处理对应的业务。
5、业务逻辑处理线程处理完成逻辑之后,调用AsyncContext的完整的方法.asyncContext.complete();从而结束该次异步线程处理。
7.1, AsyncLongRunningServlet。java处理Servlet请求,并开启异步
包com.test.servlet3; 进口javax.servlet.AsyncContext; 进口javax.servlet.ServletException; 进口javax.servlet.annotation.WebServlet; 进口javax.servlet.http.HttpServlet; 进口javax.servlet.http.HttpServletRequest; 进口javax.servlet.http.HttpServletResponse; 进口java.io.IOException; 进口java.util.concurrent.ThreadPoolExecutor;/* * *由wangxindong: ID=" + Thread.currentThread () .getId ()); request.setAttribute (“org.apache.catalina。ASYNC_SUPPORTED”,真正的); 字符串时间=request.getParameter(“时间”); int秒=Integer.valueOf(时间);//max 10秒 如果(秒比;10000) 秒=10000; AsyncContext asyncCtx=request.startAsync (); asyncCtx。新AppAsyncListener addListener (()); asyncCtx.setTimeout(9000);//异步servlet的超时时间,异步servlet有对应的超时时间,如果在指定的时间内没有执行完操作,响应依然会走原来servlet的结束逻辑,后续的异步操作执行完再写回的时候,可能会遇到异常。 ThreadPoolExecutor执行人=(ThreadPoolExecutor)请求 .getServletContext () .getAttribute(“执行人”); 遗嘱执行人。执行(新AsyncRequestProcessor (asyncCtx秒)); 长endTime=System.currentTimeMillis (); 系统。println (“AsyncLongRunningServlet结束:Name=" + Thread.currentThread () . getname () + ":: ID=" + Thread.currentThread () .getId() + "::时间=" + (endTime -开始时间)+“女士”); } }浅谈servlet3异步原理与实践