【servlet3.0新特性】Servlet 异步处理实例
Servlet3.0在MVC中作为控制器,控制器负责分发任务给MODEL完成,然后把结果交给JSP显示;
而如果有许多MODEL,其中有一个MODEL处理时间很长,则会导致整个页面的显示很慢;
异步处理关键点:将复杂业务处理另外开一个线程,而Servlet将执行好的业务先送往jsp输出,等到耗时业务做完后再送往JSP页面;
就是类似ajax的异步请求处理,避免页面加载时间过长。
servlet3.0异步处理注意点:需要在Annotation中注明 asyncSupported=true;
下面给出代码实例:
java代码:
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.*;
@WebServlet(name = "AsyncServlet", urlPatterns = {"/AsyncServlet"}, asyncSupported = true)
public class AsyncServlet extends HttpServlet {
/** */
private static final long serialVersionUID = 2432074905382867541L;
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("====页面加载开始====<hr />");
AsyncContext actx = request.startAsync();
actx.setTimeout(30 * 3000);
actx.start(new MyThread(actx));
out.println("====页面加载结束====<hr />");
out.println("</body>");
out.println("</html>");
out.flush();
}
}
class MyThread implements Runnable {
private AsyncContext actx;
public MyThread(AsyncContext actx) {
this.actx = actx;
}
public void run() {
try {
Thread.sleep(5 * 1000); // 消耗5秒
actx.dispatch("/index.jsp");
}
catch (Exception e) {
}
}
}
index.jsp页面:
<%@ page contentType="text/html;charset=GBK" pageEncoding="GBK" session="false"%>
<html>
<body>
<% out.println("======体验servlet3.0异步处理效果 ====");
out.println("======用户处理耗时业务 ====");
%>
</body>
</html>
以上代码就是servlet3.0的异步处理代码,要使用tomcat7.0及以上版本才能支持servlet3.0,
要不然javax.servlet.annotation.*会报错,提示“The import javax.servlet.annotation cannot be resolved”
来源://作者:/更新时间:2013-11-14
顶
踩
相关文章:






