복붙노트

[SPRING] Spring Boot, Java Config - 이름이 'dispatcherServlet'인 DispatcherServlet의 URI [/ ...]가있는 HTTP 요청에 대한 매핑이 없습니다.

SPRING

Spring 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. ==============================

    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. ==============================

    2.아래의 의존성을 pom.xml에 추가하십시오.

    아래의 의존성을 pom.xml에 추가하십시오.

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
    
  3. ==============================

    3.비슷한 문제가 생길 때 팁이 도움이되었습니다. 내 구성에이 조각을 추가 한 후 수정했습니다.

    비슷한 문제가 생길 때 팁이 도움이되었습니다. 내 구성에이 조각을 추가 한 후 수정했습니다.

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
    
  4. 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