[SPRING] Spring Boot, Java Config - 이름이 'dispatcherServlet'인 DispatcherServlet의 URI [/ ...]가있는 HTTP 요청에 대한 매핑이 없습니다.
SPRINGSpring Boot, Java Config - 이름이 'dispatcherServlet'인 DispatcherServlet의 URI [/ ...]가있는 HTTP 요청에 대한 매핑이 없습니다.
이것은 stackOverflow에서 매우 공통적 인 문제 였지만 동일한 문제를 다루는 주제 중 어느 것도 나의 문제를 해결하지 못합니다.
우리는 xml 구성을 사용하는 템플릿 구성을 가지고 있지만 이제는 Java 구성을 사용하기 시작했습니다.
그래서 저는 Java config와 Spring Boot를 사용하는 새로운 프로젝트를 가지고 있습니다. 우리는 JSP와 Tiles 3도 사용하고 있습니다.
문제는 관리자 로그인 페이지를 렌더링하지 못합니다.
다음은 코드입니다.
기본 구성 클래스 :
@SpringBootApplication
@EnableScheduling
@Import(OnAdminBeans.class)
public class AppConfig extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(AppConfig.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(AppConfig.class);
}
}
AppConfig.class는 기본 패키지입니다. @SpringBootApplication이 가져 오는 @ComponentScan을 통해 mainpackage.config에있는 다른 구성을 검색하므로보기 구성 클래스를 가져옵니다.
@Configuration
@EnableWebMvc
public class ViewConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/adm/static/**").addResourceLocations("/adm/static/");
}
// @Override
// public void addViewControllers(ViewControllerRegistry registry) {
// registry.addViewController("/adm/login").setViewName("login-template-tiles");
// }
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.viewResolver(viewResolver());
registry.viewResolver(jspViewResolver());
registry.viewResolver(tilesViewResolver());
}
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setCookieName("locale");
localeResolver.setCookieMaxAge(30);
localeResolver.setDefaultLocale(new Locale("pt", "BR"));
return localeResolver;
}
@Bean
public MultipleViewResolver viewResolver() {
Map<String, ViewResolver> viewsResolvers = new HashMap<String, ViewResolver>();
viewsResolvers.put(MultipleViewResolver.ViewType.JSP.getKey(), jspViewResolver());
viewsResolvers.put(MultipleViewResolver.ViewType.TILES.getKey(), tilesViewResolver());
MultipleViewResolver viewResolver = new MultipleViewResolver();
viewResolver.setViewsResolvers(viewsResolvers);
viewResolver.setOrder(1);
return viewResolver;
}
@Bean
public InternalResourceViewResolver jspViewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");
viewResolver.setViewClass(JstlView.class);
viewResolver.setOrder(2);
return viewResolver;
}
@Bean
public UrlBasedViewResolver tilesViewResolver() {
UrlBasedViewResolver viewResolver = new UrlBasedViewResolver();
viewResolver.setViewClass(TilesView.class);
viewResolver.setOrder(3);
return viewResolver;
}
@Bean
public TilesConfigurer tilesConfigurer() {
TilesConfigurer configurer = new TilesConfigurer();
configurer.setDefinitions("/WEB-INF/tile-defs/tiles-definitions.xml");
return configurer;
}
}
LoginController.class는 다음과 같이 정의됩니다.
@Controller
@RequestMapping(value = "/adm")
public class LoginController {
@RequestMapping(value = "/login")
public ModelAndView login() {
return new ModelAndView("login-template-tiles");
}
}
그리고 tiles-definitions.xml에서 login-template-tiles에 대해 다음과 같은 정의가 있습니다.
<definition name="login-template-tiles" template="/WEB-INF/jsp/adm/templates/login-template.jsp">
<put-attribute name="admin-title" value="Admin" />
<put-attribute name="content" value="/WEB-INF/jsp/adm/templates/sections/login/index.jsp" />
</definition>
두 파일이 모두 존재 함을 유의하십시오.
모든 것을 감안할 때 / adm / login에 액세스하려고하면 LoginController.login ()이 호출됩니다. 그러나 그것은 적절한 jsp 파일을 찾는데 실패합니다.
404를 반환합니다. TRACE가 활성화되면 다음 로그가 표시됩니다.
DispatcherServlet with name 'dispatcherServlet' processing GET request for [/WEB-INF/jsp/adm/templates/login-template.jsp]
Testing handler map [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping@2118c09a] in DispatcherServlet with name 'dispatcherServlet'
Looking up handler method for path /WEB-INF/jsp/adm/templates/login-template.jsp
Did not find handler method for [/WEB-INF/jsp/adm/templates/login-template.jsp]
Testing handler map [org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping@2c148974] in DispatcherServlet with name 'dispatcherServlet'
No handler mapping found for [/WEB-INF/jsp/adm/templates/login-template.jsp]
Testing handler map [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping@784c3547] in DispatcherServlet with name 'dispatcherServlet'
No handler mapping found for [/WEB-INF/jsp/adm/templates/login-template.jsp]
Testing handler map [org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport$EmptyHandlerMapping@533e0604] in DispatcherServlet with name 'dispatcherServlet'
Testing handler map [org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport$EmptyHandlerMapping@cfd1b4e] in DispatcherServlet with name 'dispatcherServlet'
No mapping found for HTTP request with URI [/WEB-INF/jsp/adm/templates/login-template.jsp] in DispatcherServlet with name 'dispatcherServlet'
모든 제안을 부탁드립니다!
편집하다: 승인. 디버깅을 통해 임베디드 Tomcat과 관련이 있다는 것을 알게되었습니다. 그것 이외에, 나는 어떤 일이 벌어지고 있는지 전혀 모른다.
편집 2 :
문제가 org.springframework.web.servlet.DispatcherServlet # getHandler에 있음을 발견했습니다. 요청에 대한 HandlerMapping을 찾지 못합니다. 등록해야합니까?
해결법
-
==============================
1.승인! 문제를 찾았습니다.
승인! 문제를 찾았습니다.
이 링크는 나를 도왔습니다 : https://samerabdelkafi.wordpress.com/2014/08/03/spring-mvc-full-java-based-config/
보다 구체적으로이 구성은 다음과 같습니다.
@Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }
기본 처리기를 설정하면 더 이상 흰색 페이지가 아닌 html이라는 JSP 코드가 표시되어 JSP가 발견되었지만 렌더링되지 않았 음을 분명히 알 수 있습니다.
그래서 대답은이 페이지에 있습니다 : Spring 파일 웹 어플리케이션에서 렌더링되지 않는 JSP 파일
나는 바람둥이 삽입물 재스퍼 인공물을 놓치고 있었다.
-
==============================
2.아래의 의존성을 pom.xml에 추가하십시오.
아래의 의존성을 pom.xml에 추가하십시오.
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency>
-
==============================
3.비슷한 문제가 생길 때 팁이 도움이되었습니다. 내 구성에이 조각을 추가 한 후 수정했습니다.
비슷한 문제가 생길 때 팁이 도움이되었습니다. 내 구성에이 조각을 추가 한 후 수정했습니다.
@Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }
from https://stackoverflow.com/questions/30406186/spring-boot-java-config-no-mapping-found-for-http-request-with-uri-in by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Quartz JDBCJobStore에서 작업을 어떻게 비활성화 할 수 있습니까? (0) | 2019.02.17 |
---|---|
[SPRING] Spring : @RequestMapping 값을 속성 파일에 정의한다. (0) | 2019.02.17 |
[SPRING] ClassNotFoundException : org.hibernate.service.jndi.JndiException (0) | 2019.02.17 |
[SPRING] Spring 트랜잭션 JUnit 테스트에서 Hibernate Session을 autowire하는 적절한 방법 (0) | 2019.02.17 |
[SPRING] 왜 Spring MockMvc 결과는 쿠키를 포함하지 않는 것입니까? (0) | 2019.02.17 |