Spring/Spring MVC

DispatcherServlet, doDispatch

doriver 2024. 10. 3. 18:23
public class DispatcherServlet extends FrameworkServlet { ~ }

public abstract class FrameworkServlet extends HttpServletBean implements ApplicationContextAware { ~ }

public abstract class HttpServletBean extends HttpServlet implements EnvironmentCapable, EnvironmentAware { ~ }

public interface ApplicationContextAware extends Aware { ~ }

 

HttpServlet - HttpServletBean - FrameworkServlet - DispatcherServlet

 

요청 받으면 service메소드가 실행됨

HttpServletBean에선 service메소드 @Override 안돼있고, FrameworkServlet에서 돼있음

 

FrameworkServlet에서 

service, doGet, doPost, doPut, doDelete, doOptions, doTrace 메서드에서 processRequest가 실행됨

메서드 processRequest에서 doService메서드가 실행됨

protected abstract void doService(HttpServletRequest request, HttpServletResponse response)
			throws Exception;

 

DispatcherServlet에서

doService가 @Override돼있음, 여기서 doDispatch 사용됨

메서드 doDispatch가 1031 ~ 1111 line에 있음

@SuppressWarnings("deprecation")
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
	~

	try {
    	ModelAndView mv = null;
		Exception dispatchException = null;
        
        try {
        
        	~ ~
        
        	// Actually invoke the handler.
			mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
   
   			~ ~
            
        } catch (Exception ex) {
    		dispatchException = ex;
   		} catch (Throwable err) {
    		// making them available for @ExceptionHandler methods and other scenarios.
			dispatchException = new NestedServletException("Handler dispatch failed", err);
    	}
        
        processDispatchResult( ~ , mv, dispatchException);
    
    } catch (Exception ex) {
    	triggerAfterCompletion(processedRequest, response, mappedHandler, ex);
    } catch (Throwable err) {
    	triggerAfterCompletion(processedRequest, response, mappedHandler,
					new NestedServletException("Handler processing failed", err));
    } finally {
    	if () {
        
        } else {
        
        }
    }
}

 

요청 받으면 service메소드가 실행됨 > processRequest실행 > doService실행 > doDispatch실행