2017-10-28 192 views
0

我的Spring版本是5.x,而tomcat版本是8.5,所以根据介绍,他们将支持在没有web.xml的情况下运行的web应用程序,但是我得到了404错误,请参阅下面的项目结构:404错误的Spring MVC应用程序

enter image description here

我用这个URL来访问我的应用程序,但得到404错误:
http://localhost:8080/SpringMVC/

见下面我的代码:

个RootConfig.java:

package spittr.config; 

import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.ComponentScan.Filter; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.FilterType; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 

@Configuration 
@ComponentScan(basePackages= {"spitter"}, 
       excludeFilters= {@Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class)} 
      ) 
public class RootConfig { 

} 

WebConfig.java:

package spittr.config; 

import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.ViewResolver; 
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 
import org.springframework.web.servlet.view.InternalResourceViewResolver; 


@Configuration 
@EnableWebMvc 
@ComponentScan("spittr.web") 
public class WebConfig implements WebMvcConfigurer{ 

    public ViewResolver viewResolver() 
    { 
     InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/WEB-INF/views/"); 
     resolver.setSuffix(".jsp"); 
     resolver.setExposeContextBeansAsAttributes(true); 
     return resolver; 
    } 

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

SpittrWebAppInitializer.java:

package spittr.config; 

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; 

public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

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

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

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

} 

HomeController.java:

package spittr.web; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
public class HomeController { 
    @RequestMapping(value="/",method=RequestMethod.GET) 
    public String home() 
    { 
     System.out.println("test"); 
     return "home"; 
    } 
} 

回到Home.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>this is the Home Jsp page</title> 
</head> 
<body> 
    <h1>Hello, Spring MVC!</h1> 
</body> 
</html> 

从Eclipse控制台,我可以看到输出的“测试”,这意味着Spring上下文找出控制器,但似乎无法找到jsp页面,我不知道原因,有人能告诉我我的代码有什么问题吗?

+0

尝试加入公共的ViewResolver视图解析器()方法的顶部@Bean注解。 –

+0

非常感谢,先生。现在正在工作。 – user2575502

+0

不客气。 –

回答

1

尝试在WebConfig#viewResolver()方法的顶部添加@Bean注释。所以,Spring容器管理你的方法为bean,你的自定义配置可能会起作用。

@Bean 
public ViewResolver viewResolver(){} 

Indicates that a method produces a bean to be managed by the Spring container.