2014-11-05 77 views
3

我用Java Config编写了一个小型的Spring MVC应用程序。它在Tomcat上工作得非常好,但不在JBoss EAP 6.2上。它被成功部署在JBoss上,但当我请求任何由Spring MVC定义的页面和浏览器中的404错误时,我会得到这个警告。在JBoss上使用Spring MVC Java Config发生404错误

WARN [org.springframework.web.servlet.PageNotFound] (http-/127.0.0.1:8080-1) No mapping found for HTTP request with URI [/example-web/pages/login.jsp] in DispatcherServlet with name 'dispatcher'

在这里你可以看到我的代码:

public class WebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

@Override 
protected Class<?>[] getRootConfigClasses() { 
    return new Class[] { RootConfiguration.class}; 
} 

@Override 
protected Class<?>[] getServletConfigClasses() { 
    return new Class[] { WebMvcConfig.class }; 
} 

@Override 
protected String[] getServletMappings() { 
    return new String[] { "/*" }; 
} 

@Override 
protected Filter[] getServletFilters() { 
    return new Filter[] { new HiddenHttpMethodFilter() }; 
} 
} 

这里是我的Spring MVC配置:

@EnableWebMvc 
@ComponentScan("com.spring.example.w.controller") 
@Configuration 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("login").setViewName("login"); 
     registry.setOrder(Ordered.HIGHEST_PRECEDENCE); 
    } 

    @Bean 
    public InternalResourceViewResolver getInternalResourceViewResolver(){ 
     InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/pages/"); 
     resolver.setSuffix(".jsp"); 
     return resolver; 
    } 
} 

而且RootConfig:

@Configuration 
@ComponentScan 
public class RootConfiguration { 
} 

在部署期间,我可以在日志中看到的请求也被映射:

INFO [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] (ServerService Thread Pool -- 71) Mapped "{[/start],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView com.spring.example.w.controller.StartController.handleStart() throws javax.servlet.ServletException,java.io.IOException 
INFO [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping] (ServerService Thread Pool -- 71) Mapped URL path [/login] onto handler of type [class org.springframework.web.servlet.mvc.ParameterizableViewController] 
INFO [org.springframework.web.context.ContextLoader] (ServerService Thread Pool -- 71) Root WebApplicationContext: initialization completed in 2530 ms 
INFO [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/example-web]] (ServerService Thread Pool -- 71) Initializing Spring FrameworkServlet 'dispatcher' 
INFO [org.springframework.web.servlet.DispatcherServlet] (ServerService Thread Pool -- 71) FrameworkServlet 'dispatcher': initialization started 

为什么我得到的404错误任何帮助,这警告高度赞赏。我应该再次强调它正在使用Tomcat。提前致谢。

+0

当你部署和启动应用程序时,你的环境是否正确? – Aeseir 2014-11-12 03:00:09

+0

你能解决这个问题吗? – Cleankod 2015-03-03 13:59:06

+0

不,使用注释仍然存在问题。但它可以像xml一样按预期工作。 – Samaneh 2015-03-13 09:14:22

回答

0

在从SivaLabs读取教程时,在JBoss上运行应用程序时出现了这样的问题,它可以与tomcat一起使用。问题是通过将DispatcherServlet映射更改为“/ app/*”来解决。您也可以尝试实现WebApplicationInitializer而不是使用抽象类。这里是例子:

@Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     WebApplicationContext context = getContext(); 
     servletContext.addListener(new ContextLoaderListener(context)); 
     ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("/"); // i have a more or less big website, and can't see advantages by using "/*" mapping, this can be also a problem. 
    } 

    private AnnotationConfigWebApplicationContext getContext() { 
     AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 
     context.setConfigLocations("ua.company.config.WebConfig", "ua.company.config.PersistenceConfig", "ua.company.config.SecurityConfig"); 
     return context; 
    } 
相关问题