Skip to content

Instantly share code, notes, and snippets.

@esfand
Forked from marko-asplund/AsyncErrorServlet1.java
Last active August 29, 2015 14:10
Show Gist options
  • Save esfand/6e8a04933768fb232ae3 to your computer and use it in GitHub Desktop.
Save esfand/6e8a04933768fb232ae3 to your computer and use it in GitHub Desktop.
package fi.markoa.experiment.servlet3;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Servlet 3.1 API / Asynchronous processing / error handling: approach #1
*
* @author marko asplund
*/
@WebServlet(urlPatterns={"/error1"}, asyncSupported=true)
public class AsyncErrorServlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
final AsyncContext asyncContext = req.startAsync();
asyncContext.start(new Runnable() {
@Override
public void run() {
if(isOperationFailed(asyncContext.getRequest().getParameter("fail"))) {
sendError(asyncContext, 503, "hello, erroneous world");
} else {
try {
asyncContext.getResponse().getWriter().write(generateResponse());
} catch (IOException e1) {
e1.printStackTrace();
}
}
asyncContext.complete(); // AsyncContext must be completed in both scenarios
}
});
}
private void sendError(AsyncContext asyncContext, int statusCode, String message) {
if(asyncContext.getResponse() instanceof HttpServletResponse)
try {
((HttpServletResponse) asyncContext.getResponse()).sendError(statusCode, message);
} catch (IOException e) {
e.printStackTrace();
}
}
private String generateResponse() {
return "hello, happy world";
}
private boolean isOperationFailed(String fail) {
return Boolean.valueOf(fail);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment