将该部分单独拧出来,方便查看
3.3 异步的支持
3.3.1 AsyncContext接口
ServletRequest执行startAsync()或者startAsync(ServletRequest, ServletResponse) 进入异步模式,将会创建一个
AsyncContext,将其需要异步的操作放在此
AsyncContext中
addListener(AsyncListener listener)//可以增加监听器
3.3.2 ServletRequest接口
startAsync
(ServletRequest, ServletResponse)
将当前请求/响应 或指定请求/响应 放到异步模式中
3.3.3 AsyncListener异步监听器
void |
onComplete |
|
onError |
|
onStartAsync |
|
onTimeout Notifies this AsyncListener that an asynchronous operation has timed out. |
可以给AsyncContext实例增加一个AsyncListener监听器,当AsyncContext调用complete()完成后即可触发onComplete(e)方法
3.3.4 例子
asyncSupported要定义为true
3.3.4.1简单例子
@WebServlet(name = "syncServlet", value = { "/syncServlet"},asyncSupported=true)
publicclass SyncTestServlet extends HttpServlet {
privatestaticfinallongserialVersionUID = -126107068129496624L;
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" Servlet Start:::<br>This is ");
out.print(this.getClass());
out.println("<br>using the GET method<br>");
out.flush();
//-------------增加一个异步线程
System.out.println("主response对象:"+response);
AsyncContext sc = request.startAsync(request,response);
Thread t = new Thread(new MyThread(sc));
t.start();
//-------------继续主线程
//注:主线程不需要等待子线程完毕,可以先执行并打印出来【异步进行】
out.println(" -------Servlet end.");
out.flush();
}
}
class MyThread extends Thread{
private AsyncContext syncContext;
public MyThread(AsyncContext syncContext){
this.syncContext = syncContext;
}
publicvoid run(){
System.out.println("MyThread start2....");
HttpServletResponse resp = (HttpServletResponse) syncContext.getResponse();
System.out.println("MyThread end2....");
try {
PrintWriter out = resp.getWriter();
out.println("<br><br>-----MyThread start----");
out.println("<br>-----wait running.....");
out.flush();//flush即可先输出,不需要等全部完成
System.out.println("子线程里的response对象(和主线程是同一个):"+resp);
Thread.sleep(3000);
out.println("<br>-----MyThread end----");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
//out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
syncContext.complete();//完成异步操作
}
}
推荐阅读
代码之余轻松一下:当前热门-人民的名义
相关推荐
总的来说,Servlet3.0通过增强的注解配置、异步处理、过滤器改进、上下文参数和监听器的注解支持,以及微容器概念,极大地提升了Java Web开发的效率和便利性。这份参考手册无疑是深入理解和掌握Servlet3.0技术的关键...
Servlet 3.0作为Servlet规范的一个重要版本,引入了许多新特性,其中最引人注目的就是异步处理和支持Web插座(WebSocket),这使得实时通信如聊天室的实现变得更加便捷。本文将深入探讨如何利用Servlet 3.0的异步...
综上所述,这个"Servlet 3.0异步推送聊天室"项目展示了如何利用Servlet 3.0的异步处理和推送技术构建一个实时交互的应用。通过理解和实践这些技术,开发者可以构建出更加高效、响应迅速的Web应用程序。
2. **异步处理**:Servlet 3.0引入了异步Servlet的概念,允许Servlet在处理请求时返回控制权给容器,然后在准备好响应时再重新获取控制权。这提高了性能,因为线程可以在等待I/O操作完成时被重用,而不是阻塞等待。 ...
下载的`servlet3.0jar综合`压缩包包含了实现这些特性的关键库,对于进行Java EE 3.0开发的程序员来说是必不可少的工具。在实际开发中,结合相关的框架(如Spring MVC)和其他Java EE组件,可以构建出功能强大、易...
一、Servlet3.0的异步支持 1. **异步Servlet**: 在Servlet 3.0之前,Servlet生命周期中的service()方法是同步执行的,这意味着每次请求都会占用一个线程直到响应完成。而Servlet 3.0引入了异步处理,允许开发者将...
这个压缩包“servlet3.0.zip”包含两个核心的JAR文件:“javax.servlet-javadoc.jar”和“javax.servlet.jar”,它们分别提供了Servlet API的文档和实现。 1. **Servlet API**: - `javax.servlet`包是Servlet API...
2. **异步处理**:Servlet3.0支持异步处理,允许Servlet在接收到请求后启动一个后台线程进行处理,而主线程可以立即返回,提高了服务器对高并发请求的响应能力。通过`HttpServletRequest.startAsync()`方法,开发者...
【标题】"Jsp/Servlet3.0 ppt和代码"涉及的是Java服务器页面(JSP)和Servlet 3.0版本的关键技术。JSP是一种动态网页技术,它允许开发者将HTML代码与Java代码混合编写,从而实现服务器端的动态内容生成。而Servlet是...
5. **WebSocket支持**:虽然Servlet 3.0本身不直接支持WebSocket,但它是WebSocket API的基础,为WebSocket的实现提供了基础设施。 接下来,我们关注两个jar包: - `javax.servlet-3.0-sources.jar`:这个文件包含...
在实际开发中,将这些库导入到项目中,开发者可以利用Servlet3.0的异步处理能力,处理高并发场景下的请求;使用JSTL简化页面逻辑,提升开发效率。同时,由于不再依赖web.xml进行所有配置,项目的部署和扩展也变得...
Servlet3.0引入了异步处理能力,允许Servlet在处理请求时返回控制权给容器,然后在后台继续执行任务。通过实现`AsyncContext`,开发者可以创建非阻塞的应用,提高应用性能和响应速度。 3. **Pluggable Contexts**...
总结起来,"servlet3.0-demo"项目展示了Servlet 3.0的关键特性,包括使用注解声明Servlet、处理文件上传以及异步处理。这些改进极大地提升了开发效率,使得Servlet API更加现代化和易于使用。通过学习这个示例,...
2. **异步处理**: Servlet 3.0允许开发者编写异步Servlet,通过`AsyncContext`对象实现非阻塞I/O,提高应用性能。 3. **监听器和过滤器**: 可以使用注解`@WebListener`和`@WebFilter`声明监听器和过滤器,简化了配置...
在压缩包文件`CometTest`中,可能包含了一个简单的Comet实现示例,你可以通过学习和运行这个例子来深入理解Servlet3.0异步处理和Comet页面推送的工作原理。通过实践,你可以更好地掌握如何在实际项目中利用这些技术...
1. **异步处理**:Servlet 3.0引入了异步处理能力,允许Servlet在请求处理过程中挂起并稍后恢复,而不是阻塞线程,这极大地提高了应用的并发性能。通过`AsyncContext`接口,开发者可以实现非阻塞I/O,以更高效地处理...
本文将详细介绍 Servlet 3.0 的关键新特性,包括异步处理、新增的注解支持以及可插性支持等方面。 #### 异步处理支持 异步处理是 Servlet 3.0 中最为显著的新特性之一。这一特性解决了传统 Servlet 在处理长时间...
2. 异步处理:Servlet 3.0引入了异步处理能力,允许Servlet在处理请求时启动一个新的线程,释放Servlet容器的线程资源,提高服务器性能。通过`AsyncContext`接口,开发者可以控制异步操作的生命周期。 3. 部署监听...
最后,关于"链接.txt"、"创建MavenWeb项目Servlet3.0的模板"和"Idea安装插件"这三个文件,它们可能是教程的补充资料。"链接.txt"可能包含其他相关资源的URL;"创建MavenWeb项目Servlet3.0的模板"可能是一个详细的...