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

关于servlet3.0异步操作实验程序

 
阅读更多

声明:本代码来源于北京圣思园张龙讲师

package com.jereh;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name="SecondServlet",urlPatterns="/SecondServlet",asyncSupported=true) // 蓝色字体表示servlet3.0(默认情况下为false)允许异步操作
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.println("servlet starts:" + new Date());
out.flush(); //刷新缓冲区

AsyncContext context = req.startAsync();
Thread thread = new MyThread(context) ;
thread.start();

out.println("servlet ends"+new Date());
}
}

-------------------------------------------分割线下为线程部分-----------------------------------------------------------------------------------------------------

package com.jereh;


import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.AsyncContext;
import javax.servlet.ServletResponse;

public class MyThread extends Thread {
private AsyncContext context ;
public MyThread(AsyncContext context)
{
this.context = context ;
}

@Override
public void run() {
try {
ServletResponse response = context.getResponse();
PrintWriter out = response.getWriter();
out.println("async starts:"+ new Date());
Thread.sleep(7000);
out.println("async ends:"+ new Date());

context.complete(); // 通知主线程,该线程已经完成
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

分享到:
评论
1 楼 string2020 2014-05-03  
楼主,能否写一个例子说说:
AsyncContext 类的 dispatch、dispatch(String path)
两个方法是干啥的

谢谢。

相关推荐

Global site tag (gtag.js) - Google Analytics