Servlet注解
<pre name="code" class="java">@WebServlet(urlPatterns = { "/basic" },asyncSupported=true)
public class BasicServlet extends HttpServlet {
注解方式中使用异步方式
<pre name="code" class="java">public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("进入Servlet的时间:" + new Date() + ".");
out.flush();
// 在子线程中执行业务调用,并由其负责输出响应,主线程退出
AsyncContext ctx = request.startAsync();
new Thread(new Executor(ctx)).start();
out.println("结束Servlet的时间:" + new Date() + ".");
out.flush();
}
public class Executor implements Runnable {
private AsyncContext ctx = null;
public Executor(AsyncContext ctx) {
this.ctx = ctx;
}
public void run() {
try {
// 等待十秒钟,以模拟业务方法的执行
Thread.sleep(10000);
PrintWriter out = ctx.getResponse().getWriter();
out.println("业务处理完毕的时间:" + new Date() + ".");
out.flush();
ctx.complete();
} catch (Exception e) {
e.printStackTrace();
}
}
}
在Servlet处理中,先执行完Servlet结束时间,然后过了10s才执行业务处理完毕的时间,体现了异步处理方式。但是,如果页面显示方式是通过forward方式的,这种方式还能体现出来优势?
个人认为这种异步处理的方式,只是适用于Ajax方式,不知道各位看客有什么见解,新人求指正!