servlet3.0异步处理

Servlet3是Tomcat7出现的新特性,所以需要先安装tomcat7

微信企业号使用回调模式时:

假如企业无法保证在五秒内处理并回复,可以直接回复空串,企业号不会对此作任何处理,并且不会发起重试。这种情况下,可以使用发消息接口进行异步回复。


在web.xml中的servlet节点配置:

<async-supported>true</async-supported>

代码


AsyncServlet.java
package testAsyncServlet;

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

import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AsyncServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;

	@Override  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {
		
		
		response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("下订单开始: " + new Date() + "<br/>");
        out.flush();
              
        AsyncContext ctx = request.startAsync();
        //异步去执行开通订单
        new Thread(new CheckOrder(ctx)).start();
        out.println("订购成功: " + new Date()+ "<br/>");
        out.flush();
		
    }  
	
	
}


CheckOrder.java
package testAsyncServlet;

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

import javax.servlet.AsyncContext;

public class CheckOrder implements Runnable {
	private AsyncContext ctx = null;

	public CheckOrder(AsyncContext ctx) {
		this.ctx = ctx;
	}

	public void run() {
		try {
			// 模拟开通等待
			Thread.sleep(10000);
			PrintWriter out = ctx.getResponse().getWriter();
			out.println("已经有权限了,let's go! : " + new Date());
			out.flush();
			ctx.complete();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>testAsyncServlet</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  
  <servlet>
  	<servlet-name>asyncServle</servlet-name>
  	<servlet-class>testAsyncServlet.AsyncServlet</servlet-class>
  	<async-supported>true</async-supported>
  </servlet>
  <servlet-mapping>
  	<servlet-name>asyncServle</servlet-name>
  	<url-pattern>/asyncServlet</url-pattern>
  </servlet-mapping>
  
</web-app>




你可能感兴趣的:(servlet3.0异步处理)