`
alex.Lin
  • 浏览: 65851 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Servlet3.0之异步支持

    博客分类:
  • java
阅读更多

将该部分单独拧出来,方便查看

3.3     异步的支持

3.3.1  AsyncContext接口

ServletRequest执行startAsync()或者startAsync(ServletRequest, ServletResponse) 进入异步模式,将会创建一个AsyncContext,将其需要异步的操作放在此AsyncContext

 

addListener(AsyncListener listener)//可以增加监听器

3.3.2  ServletRequest接口

startAsync()

startAsync(ServletRequest, ServletResponse)

将当前请求/响应 或指定请求/响应 放到异步模式中

3.3.3  AsyncListener异步监听器

void

onComplete(AsyncEvent event)
          Notifies this AsyncListener that an asynchronous operation has been completed.

 void

onError(AsyncEvent event)
          Notifies this AsyncListener that an asynchronous operation has failed to complete.

 void

onStartAsync(AsyncEvent event)
          Notifies this AsyncListener that a new asynchronous cycle is being initiated via a call to one of the
ServletRequest#startAsync methods.

 void

onTimeout(AsyncEvent event)

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("&nbsp;-------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();//完成异步操作

       }

}

 

推荐阅读

 

代码之余轻松一下:当前热门-人民的名义

 

 

JAVAEE容器如何管理EntityManager和PersistenceContext

0
0
分享到:
评论

相关推荐

    Servlet3.0参考手册

    总的来说,Servlet3.0通过增强的注解配置、异步处理、过滤器改进、上下文参数和监听器的注解支持,以及微容器概念,极大地提升了Java Web开发的效率和便利性。这份参考手册无疑是深入理解和掌握Servlet3.0技术的关键...

    servlet3.0推送聊天室

    Servlet 3.0作为Servlet规范的一个重要版本,引入了许多新特性,其中最引人注目的就是异步处理和支持Web插座(WebSocket),这使得实时通信如聊天室的实现变得更加便捷。本文将深入探讨如何利用Servlet 3.0的异步...

    servlet 3.0 异步 推送 聊天室

    综上所述,这个"Servlet 3.0异步推送聊天室"项目展示了如何利用Servlet 3.0的异步处理和推送技术构建一个实时交互的应用。通过理解和实践这些技术,开发者可以构建出更加高效、响应迅速的Web应用程序。

    servlet3.0.jar下载

    2. **异步处理**:Servlet 3.0引入了异步Servlet的概念,允许Servlet在处理请求时返回控制权给容器,然后在准备好响应时再重新获取控制权。这提高了性能,因为线程可以在等待I/O操作完成时被重用,而不是阻塞等待。 ...

    servlet 3.0 jar 包综合下载

    下载的`servlet3.0jar综合`压缩包包含了实现这些特性的关键库,对于进行Java EE 3.0开发的程序员来说是必不可少的工具。在实际开发中,结合相关的框架(如Spring MVC)和其他Java EE组件,可以构建出功能强大、易...

    Servlet3.0

    一、Servlet3.0的异步支持 1. **异步Servlet**: 在Servlet 3.0之前,Servlet生命周期中的service()方法是同步执行的,这意味着每次请求都会占用一个线程直到响应完成。而Servlet 3.0引入了异步处理,允许开发者将...

    servlet3.0.zip

    这个压缩包“servlet3.0.zip”包含两个核心的JAR文件:“javax.servlet-javadoc.jar”和“javax.servlet.jar”,它们分别提供了Servlet API的文档和实现。 1. **Servlet API**: - `javax.servlet`包是Servlet API...

    servlet3.0 jar包和doc

    2. **异步处理**:Servlet3.0支持异步处理,允许Servlet在接收到请求后启动一个后台线程进行处理,而主线程可以立即返回,提高了服务器对高并发请求的响应能力。通过`HttpServletRequest.startAsync()`方法,开发者...

    Jsp/Servlet3.0 ppt和代码

    【标题】"Jsp/Servlet3.0 ppt和代码"涉及的是Java服务器页面(JSP)和Servlet 3.0版本的关键技术。JSP是一种动态网页技术,它允许开发者将HTML代码与Java代码混合编写,从而实现服务器端的动态内容生成。而Servlet是...

    Servlet 3.0jar包和source包

    5. **WebSocket支持**:虽然Servlet 3.0本身不直接支持WebSocket,但它是WebSocket API的基础,为WebSocket的实现提供了基础设施。 接下来,我们关注两个jar包: - `javax.servlet-3.0-sources.jar`:这个文件包含...

    servlet3.0相关的包

    在实际开发中,将这些库导入到项目中,开发者可以利用Servlet3.0的异步处理能力,处理高并发场景下的请求;使用JSTL简化页面逻辑,提升开发效率。同时,由于不再依赖web.xml进行所有配置,项目的部署和扩展也变得...

    Servlet3.0特性详解

    Servlet3.0引入了异步处理能力,允许Servlet在处理请求时返回控制权给容器,然后在后台继续执行任务。通过实现`AsyncContext`,开发者可以创建非阻塞的应用,提高应用性能和响应速度。 3. **Pluggable Contexts**...

    servlet3.0-demo

    总结起来,"servlet3.0-demo"项目展示了Servlet 3.0的关键特性,包括使用注解声明Servlet、处理文件上传以及异步处理。这些改进极大地提升了开发效率,使得Servlet API更加现代化和易于使用。通过学习这个示例,...

    maven servlet 3.0 eclipse config video

    2. **异步处理**: Servlet 3.0允许开发者编写异步Servlet,通过`AsyncContext`对象实现非阻塞I/O,提高应用性能。 3. **监听器和过滤器**: 可以使用注解`@WebListener`和`@WebFilter`声明监听器和过滤器,简化了配置...

    Servlet3.0 异步处理 页面推送 Comet 实例

    在压缩包文件`CometTest`中,可能包含了一个简单的Comet实现示例,你可以通过学习和运行这个例子来深入理解Servlet3.0异步处理和Comet页面推送的工作原理。通过实践,你可以更好地掌握如何在实际项目中利用这些技术...

    servlet3.0 规范pdf 包含javadoc

    1. **异步处理**:Servlet 3.0引入了异步处理能力,允许Servlet在请求处理过程中挂起并稍后恢复,而不是阻塞线程,这极大地提高了应用的并发性能。通过`AsyncContext`接口,开发者可以实现非阻塞I/O,以更高效地处理...

    servlet 3.0新增功能详解

    本文将详细介绍 Servlet 3.0 的关键新特性,包括异步处理、新增的注解支持以及可插性支持等方面。 #### 异步处理支持 异步处理是 Servlet 3.0 中最为显著的新特性之一。这一特性解决了传统 Servlet 在处理长时间...

    Servlet 3.0 - Apache Tomcat 7.0.61

    2. 异步处理:Servlet 3.0引入了异步处理能力,允许Servlet在处理请求时启动一个新的线程,释放Servlet容器的线程资源,提高服务器性能。通过`AsyncContext`接口,开发者可以控制异步操作的生命周期。 3. 部署监听...

    idea创建maven Servlet3.0工具

    最后,关于"链接.txt"、"创建MavenWeb项目Servlet3.0的模板"和"Idea安装插件"这三个文件,它们可能是教程的补充资料。"链接.txt"可能包含其他相关资源的URL;"创建MavenWeb项目Servlet3.0的模板"可能是一个详细的...

Global site tag (gtag.js) - Google Analytics