Spring Boot Java-Config - Kein mapping gefunden für den HTTP-request mit dem URI [/...] in DispatcherServlet mit dem Namen 'dispatcherServlet'
War dies ein ganz Allgemeines problem hier bei stackOverflow, aber keines der Themen, der das selbe problem löst mein.
Wir haben ein template-Konfiguration mit xml-config, aber jetzt versuchen wir, Weg von diesem und starten Sie es mit Java config.
Also ich habe ein neues Projekt mit Java config und Spring Boot. Wir sind auch mit JSP und Fliesen 3.
Problem ist: es scheitert zur Erbringung unserer admin-login-Seite.
Hier ist der code:
Main config-Klasse:
@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);
}
}
Den AppConfig.class
ist die wichtigste Paket. Durch die @ComponentScan
dass @SpringBootApplication
bringt, scannt er die andere Konfigurationen sind auf mainpackage.config
, so dass es importiert die view-config-Klasse:
@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;
}
}
Den LoginController.class
ist definiert als:
@Controller
@RequestMapping(value = "/adm")
public class LoginController {
@RequestMapping(value = "/login")
public ModelAndView login() {
return new ModelAndView("login-template-tiles");
}
}
Und in tiles-definitions.xml
ich habe die folgende definition für das login-template-Fliesen:
<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>
Beachten Sie, dass beide Dateien vorhanden sind.
Alles gegeben, dass die LoginController.login() nicht genannt, wenn ich versuche, auf /adm/login. Aber es nicht finden die richtige jsp-Datei, sich.
Gibt es eine 404. Mit ABLAUFVERFOLGUNG aktiviert, bekomme ich folgende log:
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'
Anregungen sind willkommen!
EDIT:
Ok. Durch Debuggen habe ich herausgefunden, dass es hat etwas zu tun mit dem eingebetteten Tomcat. Andere als die, ich habe keine Ahnung, was Los ist.
EDIT 2:
Gefunden, dass das problem in org.springframework.web.- servlet.DispatcherServlet#getHandler. Es geht einfach nicht finden HandlerMapping für diese Anfrage. Muss ich mich registrieren?
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK! Habe das problem gefunden.
Dieser link hat mir geholfen: https://samerabdelkafi.wordpress.com/2014/08/03/spring-mvc-full-java-based-config/
Genauer gesagt diese Konfiguration:
Durch setzen eines default-handler, ich würde nicht mehr eine weiße Seite erhalten, aber statt der JSP-code, wie html, das zeigt mir deutlich, dass die JSP-Datei wurde gefunden, aber nicht gerendert.
Also die Antwort wurde auf diese Seite: JSP-Datei nicht Rendern im Frühjahr Boot-web-Anwendung
Mir fehlte die tomcat-embed-jasper Artefakt.
Füge unten Abhängigkeit zu Ihrem pom.xml
Die Tipps hier, hat mir geholfen, wenn ich stecken mit einem ähnlichen problem. Ich fixe es nach dem hinzufügen dieses fragment auf meine Konfiguration