所在类:org.springframework.web.servlet.DispatcherServlet

    1. protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
    2. HttpServletRequest processedRequest = request;
    3. HandlerExecutionChain mappedHandler = null;
    4. boolean multipartRequestParsed = false;
    5. WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);
    6. try {
    7. try {
    8. ModelAndView mv = null;
    9. Object dispatchException = null;
    10. try {
    11. processedRequest = this.checkMultipart(request);
    12. multipartRequestParsed = processedRequest != request;
    13. mappedHandler = this.getHandler(processedRequest);
    14. if (mappedHandler == null) {
    15. this.noHandlerFound(processedRequest, response);
    16. return;
    17. }
    18. HandlerAdapter ha = this.getHandlerAdapter(mappedHandler.getHandler());
    19. String method = request.getMethod();
    20. boolean isGet = "GET".equals(method);
    21. if (isGet || "HEAD".equals(method)) {
    22. long lastModified = ha.getLastModified(request, mappedHandler.getHandler());
    23. if ((new ServletWebRequest(request, response)).checkNotModified(lastModified) && isGet) {
    24. return;
    25. }
    26. }
    27. if (!mappedHandler.applyPreHandle(processedRequest, response)) {
    28. return;
    29. }
    30. mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
    31. if (asyncManager.isConcurrentHandlingStarted()) {
    32. return;
    33. }
    34. this.applyDefaultViewName(processedRequest, mv);
    35. mappedHandler.applyPostHandle(processedRequest, response, mv);
    36. } catch (Exception var20) {
    37. dispatchException = var20;
    38. } catch (Throwable var21) {
    39. dispatchException = new NestedServletException("Handler dispatch failed", var21);
    40. }
    41. this.processDispatchResult(processedRequest, response, mappedHandler, mv, (Exception)dispatchException);
    42. } catch (Exception var22) {
    43. this.triggerAfterCompletion(processedRequest, response, mappedHandler, var22);
    44. } catch (Throwable var23) {
    45. this.triggerAfterCompletion(processedRequest, response, mappedHandler, new NestedServletException("Handler processing failed", var23));
    46. }
    47. } finally {
    48. if (asyncManager.isConcurrentHandlingStarted()) {
    49. if (mappedHandler != null) {
    50. mappedHandler.applyAfterConcurrentHandlingStarted(processedRequest, response);
    51. }
    52. } else if (multipartRequestParsed) {
    53. this.cleanupMultipart(processedRequest);
    54. }
    55. }
    56. }