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其他新特性,还是值得研究。
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值