`
sunqi
  • 浏览: 230837 次
  • 性别: 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

    tomcat7和8

    1. **Java EE 7支持**:Tomcat 8增加了对Java EE 7规范的支持,包括Servlet 3.1、JSP 2.3和EL 3.0等。这些更新提供了更多的API和功能,如WebSocket、异步处理等。 2. **改进的NIO2**:Tomcat 8引入了对Java NIO 2 ...

    Tomcat 7 的七大新特性

    基于Java 7的NIO 2 API,Tomcat 7实现了异步处理和文件通道功能,提升了I/O性能。这使得服务器能够同时处理更多的并发请求,显著提高了高负载场景下的性能。 3. **更好的集群和负载均衡**: 通过`cluster_load...

    servlet3异步请求

    要开始使用Servlet3的异步请求,首先你需要一个支持Servlet 3.0及以上版本的容器,如Tomcat 7+、Jetty 9+等。然后,你需要在`web.xml`配置文件或者通过Java注解声明一个支持异步的Servlet。使用`@AsyncSupported`...

    tomcat8和tomcat7

    Tomcat8于2013年发布,主要支持Java EE 7规范,包括Servlet 3.1、JSP 2.3和EL 3.0等,相比Tomcat7有以下改进: 1. **Servlet 3.1**:增加了HTTP/2协议支持,提高了数据传输效率,降低了延迟。 2. **WebSocket支持**...

    Tomcat7及Tomcat8

    2. **Jasper增强**:Tomcat 7的Jasper引擎对JSP编译进行了优化,支持JSP 2.2标准,提供了更多的错误检查和改进的开发体验。 3. **更好的安全管理**:增加了基于角色的安全管理(RBAC),可以更精细地控制用户的访问...

    tomcat 7 8 两个版本

    3. **API更新**:Servlet、JSP和EL的版本升级带来了新的特性和更好的开发体验。 4. **管理界面**:Tomcat 8的管理控制台提供了更多功能,便于日常运维。 总结: 选择Tomcat 7还是Tomcat 8,取决于项目需求和兼容性...

    tomcat 7和Tomcat8 两个包

    Tomcat 7还加强了错误处理,提高了性能,并且对Servlet、JSP和EL(Expression Language)等核心技术进行了更新。 Tomcat 8是在Tomcat 7的基础上进一步升级,于2013年发布,它支持Java EE 7规范。此版本引入了更多的...

    tomcat6和tomcat7

    1. 支持新规范:支持Java Servlet 3.0和JSP 2.2规范,引入了更多的API和特性。 2. 异步处理:增加了异步Servlet API,允许在不阻塞线程的情况下处理长时间运行的任务。 3. 组件改进:增强了过滤器、监听器和上下文...

    tomcat8.5 jsp servlet WebSocket等api文档

    Tomcat 8.5是其一个稳定版本,支持Java EE 7规范,包括Servlet 3.1、JSP 2.3和EL 3.0。在API文档中,开发者可以找到关于如何配置和管理Tomcat服务器,以及如何部署和运行Web应用的信息。 2. **JSP (JavaServer ...

    apache tomcat 7 pdf

    从书籍的版权和出版信息来看,Apache Tomcat 7的出版代表着当时对Web应用程序开发的关注和重视,它致力于提供一本深入、全面的指南,帮助开发者们理解和掌握Tomcat 7的使用方法及其带来的新特性。对于学习和使用...

    tomcat 7到9 版本

    Tomcat 7是Apache Tomcat的一个重要版本,它支持Java EE 6规范,包括Servlet 3.0、JSP 2.2和EL 2.2。这个版本引入了改进的部署功能,增强了安全管理,并且对性能进行了优化。在Eclipse中,开发者可以方便地配置...

    浅谈servlet3异步原理与实践

    Servlet异步处理流程图.png 接收到request请求之后,由tomcat工作线程从HttpServletRequest中获得一个异步上下文AsyncContext对象,然后由tomcat工作线程把AsyncContext对象传递给业务处理线程,同时tomcat工作线程...

    tomcat6 tomcat7

    总结来说,虽然Tomcat6和Tomcat7的配置大体相似,但在JSP和Servlet版本上有所升级,因此Tomcat7提供了更多新功能和优化。理解这些配置步骤对于开发者来说至关重要,有助于快速搭建和调试Java Web应用。

    tomcat 7 最新版本 apache-tomcat-7.0.109

    1. **Servlet 3.0支持**:Tomcat 7全面支持Servlet 3.0规范,这引入了诸如异步处理、注解配置、动态部署等功能,提高了Web应用的开发效率和性能。 2. **JSP 2.2支持**:它包含对JSP 2.2的实现,提供了更多的EL...

    tomcat服务器7和8

    综上所述,Tomcat 7和8都是Java Web开发中的重要工具,它们的差异主要体现在对Java EE规范的支持程度、性能优化以及新特性的引入。选择哪个版本取决于项目需求和对最新技术的支持。如果项目需要Java EE 7规范的支持...

    Servlet 3.0 API - Apache Tomcat 7.0.41

    7. **Pluggable Servlet上下文**:开发者可以通过实现`javax.servlet.ServletContextListener`来创建自定义的Servlet上下文,从而更灵活地控制Web应用程序的启动和停止过程。 8. **过滤器链的改进**:Servlet 3.0...

    how tomcat works和jetty-src和tomcat7-src

    【标题】"how tomcat works和jetty-src和tomcat7-src" 提及了三个关键概念:Tomcat的工作原理、Jetty源代码以及Tomcat 7的源代码。这些是Java Web服务器领域的核心元素,主要涉及到如何处理HTTP请求、部署Web应用...

Global site tag (gtag.js) - Google Analytics