AsyncListener Example

In this section, you will learn about registering AsyncListener with the recently created AsyncContext with an example.

AsyncListener Example

AsyncListener Example

In this section, you will learn about registering AsyncListener with the recently created AsyncContext with an example.

The AsyncListener will be notified when an asynchronous events occurs.

Need of AsyncListener

AsyncEvent contains the details of the event occurred by the asynchronous processes. These events includes successfully completion of asynchronous cycle, times out, or results in an error . The AsyncListener will receive an AsyncEvent (asynchronous event object) when the above events(i.e. completion of asynchronous cycle, times out, or results in an error) occurs.

The AsyncListener will be notified in their creation/addition order.

EXAMPLE

In the given below example, AsyncListener MyAsyncListener is added to AsyncContext in the AsyncContextCompleteMethod.java class using addListener() method. On different asynchronous  events, MyAsyncListener  is notified through AsyncEvent object. MyAsyncListener displays the logged information on the console.

MyAsyncListener.java

package roseindia;

import java.util.logging.Logger;
import javax.servlet.AsyncEvent;
import javax.servlet.AsyncListener;

public class MyAsyncListener implements AsyncListener {
private static final Logger logger = Logger.getLogger("net.roseindia");

// Public constructor is required by servlet spec
public MyAsyncListener() {
}

public void onComplete(AsyncEvent ae) {
logger.info("AsyncListener: onComplete for request: "
+ ae.getAsyncContext().getRequest().getAttribute("ServletName"));
}

public void onTimeout(AsyncEvent ae) {
logger.info("AsyncListener: onTimeout for request");
}

public void onError(AsyncEvent ae) {
logger.info("AsyncListener: onError for request: ");
}

public void onStartAsync(AsyncEvent ae) {
logger.info("AsyncListener: onStartAsync");
}
}

AsyncContextCompleteMethod.java

package roseindia;

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

import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = "/AsyncListenerExample", asyncSupported = true)
public class AsyncListenerExample extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

Date date = new Date();
response.setContentType("text/html");
PrintWriter out = response.getWriter();

out.print("<h2>AsyncContext Example </h2>");
request.setAttribute("receivedAt", date);
out.println("Request Time :" + request.getAttribute("receivedAt"));
//Starting AsyncContext
AsyncContext asyncCtx = request.startAsync();
ServletRequest req = asyncCtx.getRequest();

req.setAttribute("ServletName", "AsyncListenerExample");

//adding AsyncListener named as 'MyAsyncListener'
asyncCtx.addListener(new MyAsyncListener());

asyncCtx.setTimeout(1000);

boolean bol2 = req.isAsyncSupported();
// This will return true
out.println("<br>AsyncSupported : " + bol2);

boolean bol = req.isAsyncStarted();

// This will return true
out.println("<br>AsyncStarted : " + bol);

if (bol) {
asyncCtx.dispatch("/asyncOutput.html");
}

boolean bol1 = req.isAsyncStarted();

// This will return false
out.println("<br>AsyncStarted : " + bol1);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

asyncListenerOutput.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Asynchronous Servlet 3.0 Example</title>
</head>
<body>
<h3>Given above the Servlet 3.0 AsyncListener example</h3>
</body>
</html>

OUTPUT

When you execute the above code, you will get the following output :

http://localhost:8080/Servlet3Examples/AsyncListenerExample

In console, you will get the following output :

INFO: Server startup in 376 ms
Jun 19, 2012 1:40:15 PM roseindia.MyAsyncListener onComplete
INFO: AsyncListener: onComplete for request: AsyncListenerExample              

Download Source Code