복붙노트

[SPRING] 기본 Spring MVC 설정 : InternalResourceViewResolver를 사용하는 PageNotFound

SPRING

기본 Spring MVC 설정 : InternalResourceViewResolver를 사용하는 PageNotFound

첫 번째 Spring 3 MVC 설정을 실행하려고합니다.

내 응용 프로그램은 "grapevine"이라는 서버 컨텍스트와 함께 tomcat에서 실행됩니다.

테스트 목적으로 http : // localhost : 8080 / grapevine / test에서 WEB-INF / jsp / noSuchInvitation.jsp의 내용을 렌더링하기위한 요청을 얻으려고합니다.

내가 이것을 시도 할 때, 나는 404를 얻고있다. 그리고 로그는 나의 jsp가 존재하지 않는다고 제안한다 :

WARN  org.springframework.web.servlet.PageNotFound  - No mapping found for HTTP request with URI [/grapevine/WEB-INF/jsp/noSuchInvitation.jsp] in DispatcherServlet with name 'grapevine'

나는 이것을 어딘가 잘못 설정 했음에 틀림 없다. 그러나 내가 잘못한 것을 볼 수는 없다.

다음은 모든 관련 스 니펫입니다.

웹 :

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

내 맥락에서 :

<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

제어 장치:

@Controller
public class ParticipantInvitationController {

@RequestMapping("/test")
public ModelAndView test()
{
    return new ModelAndView("noSuchInvitation");
}

로그:

DEBUG org.springframework.web.servlet.DispatcherServlet  - Rendering view [org.springframework.web.servlet.view.JstlView: name 'noSuchInvitation'; URL [/WEB-INF/jsp/noSuchInvitation.jsp]] in DispatcherServlet with name 'grapevine'
DEBUG org.springframework.web.servlet.view.JstlView  - Forwarding to resource [/WEB-INF/jsp/noSuchInvitation.jsp] in InternalResourceView 'noSuchInvitation'
DEBUG org.springframework.web.servlet.DispatcherServlet  - DispatcherServlet with name 'grapevine' processing GET request for [/grapevine/WEB-INF/jsp/noSuchInvitation.jsp]
WARN  org.springframework.web.servlet.PageNotFound  - No mapping found for HTTP request with URI [/grapevine/WEB-INF/jsp/noSuchInvitation.jsp] in DispatcherServlet with name 'grapevine'
DEBUG org.springframework.security.web.context.HttpSessionSecurityContextRepository  - SecurityContext contents are anonymous - context will not be stored in HttpSession. 
DEBUG org.springframework.web.servlet.DispatcherServlet  - Successfully completed request

해결법

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

    1.이것은 web.xml의 이 너무 넓기 때문입니다. 값이 / *는 서블릿이 모든 요청을 수신하도록 구성되었으며 서블릿에서 JSP에 대한 요청을 포함한다는 것을 의미합니다. 표시되는 오류 메시지는 자체 전달 된 요청을받는 DispatcherServlet에서 온 것입니다.

    이것은 web.xml의 이 너무 넓기 때문입니다. 값이 / *는 서블릿이 모든 요청을 수신하도록 구성되었으며 서블릿에서 JSP에 대한 요청을 포함한다는 것을 의미합니다. 표시되는 오류 메시지는 자체 전달 된 요청을받는 DispatcherServlet에서 온 것입니다.

    보다 구체적인 을 선택해야합니다. / xyz / * 을 입력하면 URL이 http : // localhost : 8080 / grapevine / xyz / test가됩니다.

  2. ==============================

    2.그냥 / *를 URL 패턴으로 바꾸십시오. 그것은 작동합니다 ...

    그냥 / *를 URL 패턴으로 바꾸십시오. 그것은 작동합니다 ...

  3. ==============================

    3.해결 방법 1 : * .html 및 * .json (또는 xml, gif, png ...)에서 서블릿을 등록 할 수 있습니다.

    해결 방법 1 : * .html 및 * .json (또는 xml, gif, png ...)에서 서블릿을 등록 할 수 있습니다.

    <servlet>
        <servlet-name>RestServlet</servlet-name>
        <servlet-class>
           org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    </servlet>
    
    <servlet-mapping>
      <servlet-name>RestServlet</servlet-name>
      <url-pattern>/</url-pattern>
      <url-pattern>*.html</url-pattern>
      <url-pattern>*.json</url-pattern>
     </servlet-mapping>
    

    해결 방법 2 : / *에 서블릿을 매핑하려면 spring.xml 파일에 다음을 추가하십시오.

    <mvc:default-servlet-handler/> 
    

    web.xml 파일에 다음과 같이 입력합니다.

    <servlet-mapping>
      <servlet-name>jsp</servlet-name>
      <url-pattern>/WEB-INF/jsp/*</url-pattern>
     </servlet-mapping>
    
    <servlet>
      <servlet-name>jsp</servlet-name>
      <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    </servlet>
    

    여기에 설명 된 이유는 spring, web.xml입니다. / *보다 우선 순위가 높은 JSP 페이지에 대한 명시 적 핸들러를 등록합니다.

  4. ==============================

    4.BEWARE : 오해의 소지가있는 오류 메시지 일 수 있습니다. 방금 나에게 일어났다.

    BEWARE : 오해의 소지가있는 오류 메시지 일 수 있습니다. 방금 나에게 일어났다.

    오류 메시지가 예기치 않게 / ContextName / ...을 경로의 시작 부분에 포함한다고해도 내부 접미사 또는 접두어 중 하나에서 철자가 틀릴 수 있습니다.

    <property name="prefix" value="/WEB-INF-typo-Here/jsp/"/>
    

    또는 파일 경로 자체.

    필자는 필자의 오자를 수정 했으므로 잘 동작합니다. 나는 컨텍스트가 오류 메시지에 왜 표시되는지 모르며, 내 바보 오타를 무시하고이 질문에 대한 훌륭한 다른 공헌을 시도하게 만들었습니다. 그것이 당신에게 일어나지 않게하십시오!

    BTW, 나는 봄 4.0.0 릴리스를 사용하고 있습니다.

  5. ==============================

    5.나에게 나는 .jsp 템플릿뿐만 아니라 .html을 사용하여 문제를 해결했다.

    나에게 나는 .jsp 템플릿뿐만 아니라 .html을 사용하여 문제를 해결했다.

  6. from https://stackoverflow.com/questions/3878957/basic-spring-mvc-config-pagenotfound-using-internalresourceviewresolver by cc-by-sa and MIT license