Đây là một vấn đề khá phổ biến ở đây trong stackOverflow, nhưng không có chủ đề nào trong cùng một vấn đề giải quyết của tôi.Khởi động mùa xuân, Cấu hình Java - Không có ánh xạ nào được tìm thấy cho yêu cầu HTTP với URI [/ ...] trong DispatcherServlet với tên 'dispatcherServlet'
Chúng tôi có cấu hình mẫu sử dụng cấu hình xml, nhưng bây giờ chúng tôi đang cố gắng di chuyển khỏi cấu hình đó và bắt đầu sử dụng cấu hình Java.
Vì vậy, tôi có một dự án mới bằng cách sử dụng cấu hình Java và Khởi động mùa xuân. Chúng tôi cũng đang sử dụng JSP và Tiles 3.
Vấn đề là: không thể hiển thị trang đăng nhập quản trị của chúng tôi.
Đây là mã:
Main cấu hình lớp:
@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);
}
}
Các AppConfig.class
là là gói chính. Qua @ComponentScan
rằng @SpringBootApplication
mang lại, nó quét các cấu hình khác có trên mainpackage.config
, vì vậy nó nhập khẩu lớp xem cấu hình:
@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;
}
}
Các LoginController.class
được định nghĩa là:
@Controller
@RequestMapping(value = "/adm")
public class LoginController {
@RequestMapping(value = "/login")
public ModelAndView login() {
return new ModelAndView("login-template-tiles");
}
}
Và trong tiles-definitions.xml
Tôi có định nghĩa sau cho mẫu đăng nhập-mẫu:
<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>
Lưu ý rằng cả hai tệp đều tồn tại .
Với tất cả những gì LoginController.login()không được gọi khi tôi cố gắng để truy cập /adm/login. Nhưng nó không tìm thấy tập tin jsp thích hợp, một cách rõ ràng.
Nó trả về một . Với TRACE được bật, tôi nhận được nhật ký sau:
DispatcherServlet with name 'dispatcherServlet' processing GET request for [/WEB-INF/jsp/adm/templates/login-template.jsp]
Testing handler map [org.springframework.web.se[email protected]a] 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'
Bất kỳ đề xuất nào được đánh giá cao!
EDIT: Ok. Bằng cách gỡ lỗi, tôi phát hiện ra rằng nó có liên quan đến Tomcat được nhúng. Ngoài ra, tôi không biết đầu mối gì đang diễn ra.
EDIT 2:
Tìm thấy rằng vấn đề là ở org.springframework.web.servlet.DispatcherServlet # getHandler. Nó chỉ đơn giản là không tìm thấy một HandlerMapping cho yêu cầu đó. Tôi có phải đăng ký không?
này đã giúp tôi tiến hành :) – Krishna