복붙노트

[SPRING] DispatcherServlet, Resolver 및 Controllers는 어떻게 상호 작용합니까?

SPRING

DispatcherServlet, Resolver 및 Controllers는 어떻게 상호 작용합니까?

좋아, 그래서 나는 꽤 일반적인 오류가 발생했습니다 :

경고 : 이름이 'app'인 DispatcherServlet의 URI [/WEB-INF/jsp/index.jsp]가있는 HTTP 요청에 대한 매핑이 없습니다.

기존 답변을보고 있는데 구성 요소가 상호 작용하는 방식에 대해 정말 잘 설명하지 못했습니다. 기존 답변을 바탕으로 내 문제를 해결할 수 없으므로 DispatcherServlet 및 Resolvers의 기능에 대한 자세한 설명을 제공 할 수 있기를 바랍니다.

Eclipse로 개발하면서, 나는 다음과 같은 구조를 가지고있다 :

/src/com/whiuk/philip/web/controller/IndexController.java
/WebContent
/WebContent/WEB-INF
/WebContent/WEB-INF/web.xml
/WebContent/WEB-INF/app-servlet.xml
/WebContent/WEB-INF/jsp/index.jsp

Eclipse Deployment Assembly는 다음과 같이 전개된다는 것을 의미합니다.

/src -> WEB-INF/classes
/WebContent -> /
/ivy.xml[*] -> WEB-INF/lib

DispatcherServlet과 모든 파일 (/ *)에 대한 매핑을 정의하는 web.xml 파일이 있습니다.

<servlet>
    <servlet-name>app</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

패키지를 검색하고 InternalResourceViewResolver를 정의하는 app-servlet.xml 파일이 있습니다.

<context:component-scan base-package="com.whiuk.philip.web" />
<mvc:annotation-driven />
<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

인덱스에 대한 RequestMapping있는 IndexController 있어요 :

 @Controller
 public class IndexController {
      @RequestMapping(value = "/index", method = RequestMethod.GET)
      public ModelAndView index() {
             return new ModelAndView();
      }
 }

이 등록 된 것을 보여주는 로그 :

org.springframework.web.servlet.handler.AbstractHandlerMethodMapping registerHandlerMethod
INFO: Mapped "{[/index],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}"
onto public org.springframework.web.servlet.ModelAndView 
com.whiuk.philip.web.controller.IndexController.index()

마지막으로 index.jsp 파일이 있습니다.

어떤 사람이 잘못된 구성이 무엇인지 설명해 주시면 오류가 맨 위에 표시되고, 가능한 경우 DispatcherServlet, Resolvers 및 컨트롤러로 보내는 방법에 대해 문장을 제공합니다.

해결법

  1. ==============================

    1.Spring의 DispatcherServlet이 / *로 매핑 되었기 때문에 모든 요청 (괜찮습니다)마다 호출되는 경향이 있지만, 요청이 JSP 페이지 (/ WEB-INF / jsp / index.jsp)를 호출합니다.

    Spring의 DispatcherServlet이 / *로 매핑 되었기 때문에 모든 요청 (괜찮습니다)마다 호출되는 경향이 있지만, 요청이 JSP 페이지 (/ WEB-INF / jsp / index.jsp)를 호출합니다.

    내가 알고있는 해결책은 다음과 같습니다.

    기본 서블릿 경로 /에 매핑하십시오.

    <servlet-mapping>
        <servlet-name>app</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    

    위와 같이 볼 수있는 한 가지 문제는 웹 애플리케이션의 루트 아래에있는 리소스가 불행하게도 DispatcherServlet에 의해 처리된다는 것입니다. DispatcherServlet은 그걸로 무엇을 해야할지 모르기 때문에 기본 서블릿 핸들러를 이런 식으로 등록해야합니다.

    <mvc:default-servlet-handler />
    
  2. ==============================

    2.스프링 웹 MVC 애플리케이션에서 요청의 "흐름"을 설명하려고 노력할 것이다.

    스프링 웹 MVC 애플리케이션에서 요청의 "흐름"을 설명하려고 노력할 것이다.

    신청서에 신청서를 보낼 때 다음과 같은 일이 발생합니다 :

    100 % 정확하지 않거나 내가 뭔가를 놓친다면 자유롭게 저를 수정하십시오 :-)

  3. from https://stackoverflow.com/questions/14015642/how-does-the-dispatcherservlet-resolver-and-controllers-interact by cc-by-sa and MIT license