`
sunqi
  • 浏览: 227907 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

tomcat7和Servlet3之异步特性体验

阅读更多

今天发现tomcat7发布bate版了,对Servlet3的支持令值得期待,尤其是异步这个特性,

之前bate版都没有,只有拉它主干自己编译tomcat跑的。赶紧来尝试下吧~  
    在我们项目中,应用异步最典型场景就是订购后等待开通这个等待过程了,
在之前Servlet版本,一个请求必须要完全处理完后才能返回,这样等待开通后跳转到产品
就必须要去轮询有没有权限了,如果可以异步,那一个请求就能搞定。
 
模拟如下
首先要把tomcat7中的servlet-api.jar 和tomcat-api.jar 加到eclipse引用中,这样可以开发而打包的时候不会包含这两个jar,直接在tomcat7上跑
@WebServlet(name="Servlet3", urlPatterns={"/demo", "/servlet"},asyncSupported=true)//此为Servlet3新增的注解支持,asyncSupported=true表示支持异步
//也可在web.xml中添加<async-supported>true</async-supported>
public class Servlet3 extends HttpServlet{  
    @Override   
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out = resp.getWriter();
        out.println("下订单开始: " + new Date() + "<br/>");
        out.flush();
              
        AsyncContext ctx = req.startAsync();
//异步去执行开通订单
        new Thread(new CheckOrder(ctx)).start();
        out.println("订购成功: " + new Date()+ "<br/>");
        out.flush();
    } 
    @Override   
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {   
        this.doGet(req, resp);   
    }   
}   
 
 
public class CheckOrder implements Runnable{   
    private AsyncContext ctx = null;   
       
    public CheckOrder(AsyncContext ctx) {   
        this.ctx = ctx;   
    }          
    public void run() {   
        try {   
//模拟开通等待
            Thread.sleep(3000);   
            PrintWriter out = ctx.getResponse().getWriter();   
            out.println("已经有权限了,let's go! : " + new Date() );   
            out.flush();   
            ctx.complete();   
        } catch (Exception e) {   
            e.printStackTrace();   
        }
    }   
 
 
运行结果
下订单开始: Thu Jul 08 15:49:30 CST 2010
订购成功: Thu Jul 08 15:49:30 CST 2010
 
没有等待那个模拟开通就直接返回了,过了三秒在打印出
已经有权限了,let's go! : Thu Jul 08 15:49:33 CST 2010
 
     这样好处是一个请求就能解决原来多次请求,减少了请求数,但也可以看到,在打印出前面的结果后,这个请求连接一直
保持的,这就考验了服务器了,因为个人感觉适合于立刻返回处理结果,但后续异步操作也能快速返回的情景,如果说异步操
作的时间很长就不适合了,还是原来那种再发起请求的好。
    大家讨论拍砖,Servlet3其他新特性,还是值得研究。
分享到:
评论
2 楼 kentkwan 2013-07-02  
完全看不出哪里异步新特性了 新开一个线程 servlet3以下都可以吧
1 楼 5cai 2012-07-28  
D:\install\tomcat-7.0.29\webapps\webDemo\WEB-INF\classes>java -version
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode)

tomcat-7.0.29

按照您的方法 怎么只能出来一下内容啊 ?

下订单开始: Sat Jul 28 15:28:37 CST 2012



是否需要配置其他参数 ?

相关推荐

    3-6Tomcat处理源码实现与异步Servlet源码实现(1).mp4

    3-6Tomcat处理源码实现与异步Servlet源码实现(1).mp4

    详解Tomcat是如何实现异步Servlet的

    在前几篇博客我们讨论了Tomcat在SpringBoot框架中是如何启动的,讨论了Tomcat的内部组件是如何设计以及请求是如何流转的,那么我们这边博客聊聊Tomcat的异步Servlet,Tomcat是如何实现异步Servlet的以及异步Servlet...

    Tomcat怎么实现异步Servlet

    对于这种情况servlet规范中定义了异步处理方式,由于Servlet中等待阻塞会导致Web容器整体的处理能力低下,所以对于比较耗时的操作可以放置到另外一个线程中进行处理,此过程保留连接的请求和响应对象,在处理完成...

    异步servlet上传文件,解决网速慢以及大文件,耗完线程问题

    假如一个场景,用户上传文件,某些用户网速较慢,同时存在100个这样的用户,如果BIO且最大线程设为100会导致线程用完。...本实例采用tomcat8作为容器,开启异步servlet读写事件,解决高并发IO传输问题。

    3-6Tomcat处理源码实现与异步Servlet源码实现(2).mp4

    3-6Tomcat处理源码实现与异步Servlet源码实现(2).mp4

    apache-tomcat-7.0.28

     根据Mark Thomas,Tomcat 7委员会的经理的说法,Tomcat 7最显著的三个特征是Servlet 3.0,内存检测泄露和增强的安全特性。  Tomcat 7的例子程序中,包含了Eclipse的工程文件和Ant的构建文件,以方便去构建war文件...

    Apache服务器tomcat7.0.12最新版,加入probe线程监视

    TOMCAT 7新特性  1 使用随机数去防止跨站脚本攻击。  2 改变了安全认证中的jessionid... 根据Mark Thomas,Tomcat 7委员会的经理的说法,Tomcat 7最显著的三个特征是Servlet 3.0,内存检测泄露和增强的安全特性。

    Servlet和Jsp学习指南(带详细书签)

    第11章展示如何利用servlet 3的文件上传特性,以及如何在客户端改善用户的体验;第12章解释如何通过编程方式将资源发送到浏览器;第13章介绍如何利用decorator模式以及类来改变servlet请求和响应的行为;第14章讨论...

    servlet和jsp学习指南_pdf.rar

    第11章展示如何利用servlet 3的文件上传特性,以及如何在客户端改善用户的体验;第12章解释如何通过编程方式将资源发送到浏览器;第13章介绍如何利用decorator模式以及类来改变servlet请求和响应的行为;第14章讨论...

    servlet和jsp学习指南

    第11章展示如何利用Servlet 3的文件上传特性,以及如何在客户端改善用户的体验;第12章解释如何通过编程方式将资源发送到浏览器;第13章介绍如何利用Decorator模式以及类来改变Servlet请求和响应的行为;第14章讨论...

    Servlet和jsp学习指南

    第11章展示如何利用Servlet 3的文件上传特性,以及如何在客户端改善用户的体验;第12章解释如何通过编程方式将资源发送到浏览器;第13章介绍如何利用Decorator模式以及类来改变Servlet请求和响应的行为;第14章讨论...

    Servle和JSP学习指南,完整扫描版

    第11章展示如何利用Servlet 3的文件上传特性,以及如何在客户端改善用户的体验;第12章解释如何通过编程方式将资源发送到浏览器;第13章介绍如何利用Decorator模式以及类来改变Servlet请求和响应的行为;第14章讨论...

    Servle和JSP学习指南

    第11章展示如何利用Servlet 3的文件上传特性,以及如何在客户端改善用户的体验;第12章解释如何通过编程方式将资源发送到浏览器;第13章介绍如何利用Decorator模式以及类来改变Servlet请求和响应的行为;第14章讨论...

    apache-tomcat-8.0.0-RC5

    最新版tomcat8.0,1.支持servlet3.1, jsp 2.3, el表达式3.0 and Java WebSocket 1.0. 2.默认http与ajp请求实现non-blocking技术,即NIO技术。 3.多个应用发布的时候可以先打成jar包,然后打成一个总的war发布。(这...

    tomcat-8.0.21

    Tomcat8新版本特性: 1.支持servlet3.1, jsp 2.3, el表达式3.0 and Java WebSocket 1.0. 2.默认http与ajp请求实现non-blocking技术,即NIO技术。 3.多个应用发布的时候可以先打成jar包,然后打成一个总的war发布。...

    servlet3-filter-async-test

    Servlet 3 过滤器链异步模式测试 源自及其示例代码的(非常有用的)帖子。 异步模式下的过滤器链(servlet 规范 3.0+)在 servlet 规范中似乎受到严重限制(整个过滤器-servlet 处理链必须在同一线程中运行)并且并...

    开源的JMS服务器和源码

    OpenJMS是一个开源的Java Message Service API 1.0.2 规范的实现,它包含有... 能够与Jakarta Tomcat这样的Servlet容器结合。 *. 支持RMI, TCP, HTTP 与SSL协议。 *. 客户端验证 *. 提供可靠消息传输、事务和消息过滤

    Spring5的Servlet和反应式技术栈解析

    1.Java大力转向了异步和非阻塞并发。...Spring5提供了Servlet和反应式这两种Web技术栈,在应用层面充分向异步和非阻塞并发靠拢。文中我分别使用“Servlet栈”和“反应式栈”来指代Spring5所提供的两种技

Global site tag (gtag.js) - Google Analytics