2015-05-22 12 views
8

Đâ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?

Trả lời

16

OK! Đã tìm thấy sự cố.

Liên kết này đã giúp tôi: https://samerabdelkafi.wordpress.com/2014/08/03/spring-mvc-full-java-based-config/

Cụ thể hơn cấu hình này:

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

Bằng cách đặt một handler mặc định, tôi sẽ không còn nhận được một trang trắng nhưng thay vì mã JSP như html, trong đó ghi rõ nói với tôi rằng JSP đã được tìm thấy nhưng không được trả lại.

Vì vậy, câu trả lời là trên trang này: JSP file not rendering in Spring Boot web application

tôi nhớ da diết những tomcat-nhúng-jasper artifact.

+0

này đã giúp tôi tiến hành :) – Krishna

0

Thêm dưới đây phụ thuộc để pom.xml của bạn

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

tôi đã phải đối mặt với cùng một vấn đề, thêm vào tomcat-nhúng-jasper để pom.xml nhưng nó đã chuyển hướng trang báo lỗi mặc định . Tôi đã thử thêm đậu InteralResourceViewResolver và nó đã làm việc. – Bheeman

Các vấn đề liên quan