복붙노트

[SPRING] Spring 부트 및 주석으로 ViewResolver를 구성하면 URI 오류가있는 HTTP 요청에 대한 매핑이 없습니다.

SPRING

Spring 부트 및 주석으로 ViewResolver를 구성하면 URI 오류가있는 HTTP 요청에 대한 매핑이 없습니다.

나는 가장 간단한 view resolver와 html로 gradle, spring boot, spring mvc로 "hello world"어플리케이션을 만들려고 노력하고있다.

나는 thymeleaf spring 부트 예제에서 시작했고 순수한 html과 InternalResourceViewResolver를 사용하여 더 단순한 mvc 애플리케이션을 만들기 위해 thymeleaf를 제거하기를 원했습니다. src / main / webapp / WEB-INF에있는 하나의 greeting.html 서비스하고 싶습니다. 앱을 실행하면

No mapping found for HTTP request with URI [/WEB-INF/greeting.html] in DispatcherServlet with name 'dispatcherServlet'

이것은 일반적인 오류이며 웹에 많은 답변이 있지만 아무 도움이되지 않는 것 같습니다.

여기 내 Application.java가있다.

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

여기 내 GreetingController.java입니다.

@Controller
public class GreetingController {
    @RequestMapping("/greeting")
    public String greeting() {
        return "greeting";
    }
}

다음은 내 MvcConfiguration.java입니다.

@Configuration
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{
    @Bean
    public ViewResolver getViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/");
        resolver.setSuffix(".html");
        return resolver;
    }
}

나는 gradle bootRun으로 실행한다.

다음은 코드를 사용한 레포입니다. https://github.com/driver-pete/spring-mvc-example

여기에 더 많은 단서가 있습니다 :

나의 가설은 dispatcher 서블릿이 어떻게 든 / * 대신 / / 여기에 / 모든 곳에서 같이 작동하도록 구성된다는 것이다. 그러나 web.xml이 없으므로 여기에 해당 조언이 적용되지 않습니다. Dispatcher 서블릿을 프로그래밍 방식으로 구성하는 방법에 대한 예제가 많이 있지만, 최소한 내 응용 프로그램을 유지하고 싶습니다. 스프링 부트는 thymeleaf와 잘 작동하기 때문에 구성해야한다고 생각합니다.

해결법

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

    1.기본 서블릿을 활성화하기 만하면됩니다. 이것은 MvcConfiguration에 다음을 추가하여 수행됩니다.

    기본 서블릿을 활성화하기 만하면됩니다. 이것은 MvcConfiguration에 다음을 추가하여 수행됩니다.

    @Configuration
    @EnableWebMvc
    public class MvcConfiguration extends WebMvcConfigurerAdapter{
        @Bean
        public ViewResolver getViewResolver() {
            InternalResourceViewResolver resolver = new InternalResourceViewResolver();
            resolver.setPrefix("/WEB-INF/");
            resolver.setSuffix(".html");
            return resolver;
        }
    
        @Override
        public void configureDefaultServletHandling(
                DefaultServletHandlerConfigurer configurer) {
            configurer.enable();
        }    
    }
    

    본질적으로 무슨 일이 벌어지고 있는가? Spring은 그러한 컨텐트의 처리를 네이티브 방식으로 처리하는 방법을 알지 못한다. (JSP 말)이 컨피그레이션을 컨테 이너에 위임하도록 지시하는 방법이다.

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

    2.더 자세히 조사한 후에 configureDefaultServletHandling 메서드를 추가하지 않고도 작동하는 대체 솔루션을 발견했습니다. build.gradle에 포함 된 Tomcat JSP 엔진을 추가해야합니다.

    더 자세히 조사한 후에 configureDefaultServletHandling 메서드를 추가하지 않고도 작동하는 대체 솔루션을 발견했습니다. build.gradle에 포함 된 Tomcat JSP 엔진을 추가해야합니다.

    compile("org.apache.tomcat.embed:tomcat-embed-jasper")
    

    configureDefaultServletHandling 메소드와는 달리이 솔루션은 일반 HTML뿐만 아니라 JSP에서도 작동합니다.

    모든 솔루션은 https://github.com/driver-pete/spring-mvc-example에서 다운로드 할 수 있습니다. 이 솔루션은 마스터에서 사용할 수 있습니다. Biju의 솔루션은 DefaultServletHandling_solution 분기에 있습니다.

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

    3.View Resolver는 Spring-Boot 웹 응용 프로그램의 application.properties 파일에서 다음과 같이 구성 할 수도 있습니다.

    View Resolver는 Spring-Boot 웹 응용 프로그램의 application.properties 파일에서 다음과 같이 구성 할 수도 있습니다.

    spring.mvc.view.prefix=/WEB-INF/jsp/
    spring.mvc.view.suffix=.jsp
    
  4. from https://stackoverflow.com/questions/29953245/configure-viewresolver-with-spring-boot-and-annotations-gives-no-mapping-found-f by cc-by-sa and MIT license