Spring Boot을 사용하여 ViewResolver를 구성하면 URI 오류가 있는 HTTP 요청에 대해 매핑을 찾을 수 없습니다.
gradle, spring boot, spring mvc로 가장 심플한 뷰 리졸바와 html로 "hello world" 어플리케이션을 만들려고 합니다.
처음에 tymeleaf spring boot 예에서 시작했는데 tymeleaf를 제거하고 순수 html과 Internal Resource View Resolver를 사용하여 보다 심플한 mvc 어플리케이션을 만들고 싶었습니다.greeting.html은 src/main/webapp/WEB-INF에 있습니다.앱을 실행하면 표시된다.
No mapping found for HTTP request with URI [/WEB-INF/greeting.html] in DispatcherServlet with name 'dispatcherServlet'
이것은 일반적인 오류이며 웹에는 많은 답변이 있지만 도움이 되지 않는 것 같습니다.
여기 제 지원서가 있습니다.자바
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Greeting Controller.java 입니다.
@Controller
public class GreetingController {
@RequestMapping("/greeting")
public String greeting() {
return "greeting";
}
}
Mvc Configuration은 다음과 같습니다.자바
@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
다음은 몇 가지 힌트입니다.
- Tymeleaf 보기 해상도는 정상적으로 동작합니다.
- Internal Resource View Resolver가 올바른 경로로 해결됨
- WEB-INF 및 greeting.html이 전쟁 파일에 있는 것 같습니다.
- 저는 jsp나 jstl이 없기 때문에, 그 항아리를 놓치는 일은 없습니다.
제 가설은 디스패처 서블릿이 어떻게 해서든 이곳저곳과 같은 서비스가 아닌 /*에 서비스를 제공하도록 구성되어 있다는 것입니다.단, 저는 web.xml을 가지고 있지 않기 때문에, 이러한 어드바이스는 여기에 적용되지 않습니다.디스패처 서블릿을 프로그래밍 방식으로 설정하는 예는 많이 있습니다만, 앱을 최소한으로 유지하고 싶습니다.스프링 부트에서는 Tymeleaf에서 정상적으로 동작하기 때문에 정상적으로 설정되어 있을 것으로 생각됩니다.
디폴트 서블릿만 유효하게 하면 됩니다.이 조작은, 다음의 항목을 에 추가하는 것에 의해서 행해집니다.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();
}
}
기본적으로 스프링은 이러한 콘텐츠를 네이티브하게 처리하는 방법을 모르기 때문에(jsp say일 수 있음), 이 구성에 따라 컨테이너에 위임하도록 지시할 수 있습니다.
View Resolver를 설정할 수도 있습니다.application.properties다음과 같은 Spring-Boot 웹 응용 프로그램 파일:
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
자세히 조사한 결과 configureDefaultServletHandling 메서드를 추가하지 않고도 작동하는 대체 솔루션을 발견했습니다.build.gradle에 내장된 Tomcat jsp 엔진을 추가해야 합니다.
compile("org.apache.tomcat.embed:tomcat-embed-jasper")
configureDefaultServletHandling 메서드와 달리 이 솔루션은 플레인 html뿐만 아니라 jsp에서도 작동합니다.
모든 솔루션은http://https://github.com/driver-pete/spring-mvc-example 에서 구할 수 있습니다.이 솔루션은 마스터에서 이용할 수 있습니다.Biju의 솔루션은 Default ServletHandling_solution 브랜치에 있습니다.
5. 5.합니다.org.springframework.web.servlet.view.InternalResourceViewResolverorg.springframework.web.servlet.InternalResourceViewResolver의
언급URL : https://stackoverflow.com/questions/29953245/configure-viewresolver-with-spring-boot-and-annotations-gives-no-mapping-found-f
'programing' 카테고리의 다른 글
| Wordpress 블로그에 실제로 필요한 데이터베이스 권한은 무엇입니까? (0) | 2023.03.20 |
|---|---|
| WordPress - 쇼트 코드 덮어쓰기 (0) | 2023.03.20 |
| LogBack Appender를 프로그래밍 방식으로 구성합니다. (0) | 2023.03.20 |
| useEffect에서의 debounce 문제 (0) | 2023.03.20 |
| WordPress 검색은 페이지가 아닌 게시물에 대해서만 작동합니다. (0) | 2023.03.20 |