【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
顶
踩
相关文章: