2011-10-24 1 views

답변

8

here을 시작하고 도움이되는지 확인하십시오. 그렇지 않은 경우보다 구체적인 질문을하십시오. 또한 Spring 문서의 this section은 기본 어댑터와 주석 구성과의 관계에 대해 설명합니다.

간단히 말해서 처리기 어댑터는 어떤 컨트롤러 (및 메서드)가 요청을 호출할지 결정합니다.

+0

링크가 끊어졌습니다. – Vishnu

+0

@Vishnu 6 년 후에 상황이 바뀐 것 같습니다. –

2

HandlerMapping은 메소드를 URL에 매핑하기 만하면됩니다. 대부분의 초보자는이 객체를 직접 사용하지 않고 대신 RequestMapping을 사용합니다. 매핑 된 메소드의 반환 유형 (일반적으로)은 SpringMVC가 응답을 렌더링하는 데 사용할 뷰를 결정합니다. 하는 것,

@RequestMapping(value={"/", "/home"}, method=RequestMethod.GET) 
public String getHome() { 
    return "homepage"; 
} 

방법은 뷰의 문자열 이름을 반환 :

예를 들어, 다음 RequestMapping은 "/"또는 "/ 홈"이 메소드를 호출하는 GET 요청에 대한 모든 HandlerMapping을 생성합니다 일반적으로 "/WEB-INF/views/homepage.jsp"로 결정됩니다 (물론 귀하의 ViewResolver에 달려 있습니다)

시작을위한 fyi : 귀하에게 필요한 매개 변수로 다른 개체를 추가 할 수 있습니다 메서드 (Locale, HttpServletRequest 등). 자세한 정보는 RequestMapping javadoc을 참조하십시오.

+1

그는 HandlerAdapter에 대해 물었습니다. HandlerMapping에 대해 설명했습니다. –

9

HandlerMapping은 메서드를 URL에 매핑하므로 DispatcherServlet은 특정 요청에 의해 호출되어야하는 메서드를 알고 있습니다. 그런 다음 DispatcherServletHandlerAdapter을 사용하여 메소드를 호출합니다.

왜 DispatcherServlet이 직접 메소드를 호출하지 않는 이유는 무엇입니까? 주석처럼 메소드를 호출하는 방법에는 여러 가지가 있기 때문에

, XML 등 HandlerAdapter 드 결합시킨다 DispatcherServlet 및 호출 된 행동.

3

HandlerAdapter에서 어댑터를 찾을 수 있으며 그 이름의 일부는 어댑터 패턴에서 가져옵니다. 어댑터는 두 객체 사이의 다리와 같으며 HandlerAdapter는 핸들러 객체와 디스패처 서블릿 사이의 다리입니다.

Spring 설명서에서 가져온 HandlerAdapter 소스 코드에서 알 수 있듯이 ModelAndView 반환 유형의 핸들 메서드가 하나 있습니다. 모든 HandlerAdapter는이 메소드를 구현하여 HttpServletRequest 및 HttpServletResponse를 핸들러 객체에 위임하므로 핸들러 객체는 이러한 HttpServletRequest/Response를 사용하여 응용 프로그램 논리를 실행합니다.

public interface HandlerAdapter { 

    //Check if controller is supported 
    boolean supports(Object handler); 

    //handle request 
    ModelAndView handle(HttpServletRequest rqst, 
         HttpServletResponse rsp, 
         Object handler) throws Exception; 

이 응용 프로그램 논리 실행은 모델과 뷰를 생성합니다. 뷰는 뷰 이름 String 또는 View 객체의 형태 일 수 있습니다. 모델에는 뷰를 렌더링하는 데 사용할 데이터가 들어 있습니다. HandlerAdapter는 ModelAndView 객체에서 모델과 뷰를 래핑합니다. ModelAndView 객체를 처리하기위한 디스패처 서블릿 작업입니다.

Dispatcher 서블릿은 핸들러 오브젝트를 알지 못하며 응용 프로그램 논리를 직접 처리하지 않아도됩니다. HandlerAdapter는 모델과 뷰를 ModelAndView 객체로 변환하는 것을 덜어주었습니다. HandlerAdapter는 그 변환 작업을 수행 할 것이기 때문입니다.

관련 문제