Skip to content

Instantly share code, notes, and snippets.

@marko-asplund
Last active August 29, 2015 14:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marko-asplund/bea38d1d751e9bc258fb to your computer and use it in GitHub Desktop.
Save marko-asplund/bea38d1d751e9bc258fb to your computer and use it in GitHub Desktop.
Servlet 3.1 API / Asynchronous processing / error handling: approach #2
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 #2
*
* @author marko asplund
*/
@WebServlet(urlPatterns={"/error2"}, asyncSupported=true)
public class AsyncErrorServlet2 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"))) {
errorDispatch(asyncContext, 503, "hello, erroneous world");
} else {
try {
asyncContext.getResponse().getWriter().write(generateResponse());
asyncContext.complete();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
}
private void errorDispatch(AsyncContext asyncContext, int statusCode, String message) {
asyncContext.getRequest().setAttribute("statusCode", statusCode);
asyncContext.getRequest().setAttribute("message", message);
// dispatch completes AsyncContext.
asyncContext.dispatch("/jsp/error.jsp"); // can't be placed in /WEB-INF
}
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