2015-05-22 2 views
8

Это была довольно распространенная проблема здесь, в stackOverflow, но ни одна из тем одной и той же проблемы решает мой.Spring Boot, Java Config - Не найдено сопоставления для HTTP-запроса с URI [/ ...] в DispatcherServlet с именем 'dispatcherServlet'

У нас есть конфигурация шаблона, в которой используется xml config, но теперь мы пытаемся отойти от этого и начать использовать конфигурацию Java.

Итак, у меня есть новый проект с использованием конфигурации Java и 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 это является основной пакет. Через @ComponentScan что @SpringBootApplication приносит, он сканирует другие конфигурации, которые находятся на 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 у меня есть следующее определение для шаблонов входных шаблонов:

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

Обратите внимание, что оба файла существуют ,

Учитывая все, что LoginController.login()действительно дозвонились, когда я пытаюсь получить доступ к /ADM/логин. Но он не может найти надлежащий файл jsp, по-видимому.

Он возвращает . С включенным TRACE я получаю следующий журнал:

DispatcherServlet with name 'dispatcherServlet' processing GET request for [/WEB-INF/jsp/adm/templates/login-template.jsp] 

Testing handler map [org.springframework[email protected]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 [or[email protected]2c148974] in DispatcherServlet with name 'dispatcherServlet' 

No handler mapping found for [/WEB-INF/jsp/adm/templates/login-template.jsp] 

Testing handler map [[email protected]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.c[email protected]533e0604] in DispatcherServlet with name 'dispatcherServlet' 

Testing handler map [org.springframework.web.servlet.c[email protected]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' 

Любые предложения приветствуются!

EDIT: Ok. Отлаживая, я узнал, что это как-то связано со встроенным Tomcat. Кроме этого, я понятия не имею, что происходит.

EDIT 2:

Найдено, что проблема заключается в org.springframework.web.servlet.DispatcherServlet # getHandler. Он просто не находит HandlerMapping для этого запроса. Должен ли я регистрировать его?

ответ

16

OK! Нашел проблему.

Эта ссылка помогла мне: https://samerabdelkafi.wordpress.com/2014/08/03/spring-mvc-full-java-based-config/

Более конкретно эта конфигурация:

@Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
     configurer.enable(); 
    } 

Установив обработчик по умолчанию, я больше не будет получать белую страницу, но вместо того, чтобы код JSP, как HTML, который четко говорит, что JSP был найден, но не отображен.

Таким образом, ответ был на этой странице: JSP file not rendering in Spring Boot web application

я пропускал -кот встраивать-яшма артефакт.

+0

это помогло мне продолжить :) – Krishna

0

Добавить ниже зависимости к pom.xml

<dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-jasper</artifactId> 
     <scope>provided</scope> 
    </dependency> 
+0

Я столкнулся с аналогичной проблемой, добавил TOMCAT-встраивать-яшму в pom.xml, но он перенаправляет страницу ошибки по умолчанию , Я попробовал добавить bean InteralResourceViewResolver, и он сработал. – Bheeman

Смежные вопросы

 Смежные вопросы