2016-12-26 5 views
0

Я изучаю SpringMVC и пытаюсь создать веб-приложение HelloWorld.
Я строю этот проект с затмением, используя код из Sping в действии 4-е издание,
, но когда я проверить это на моем браузере, посетив http://localhost:8080/homepage
я получил сообщение об ошибке 404.
enter image description here

И самое weired вещь, если я проверить контроллер с помощью MockMvc (метод, предусмотренный Spring в действии, он будет проходить тест.
SO мне интересно, где я сделал не так?Контроллер SpringMVC не работает

структура моего проекта:
enter image description here

SpittrWebAppInitializer.java:

package spittr.config; 

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

public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     // TODO Auto-generated method stub 
     return new Class<?>[] {RootConfig.class}; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     // TODO Auto-generated method stub 
     return new Class<?>[] {WebConfig.class}; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     // TODO Auto-generated method stub 
     return new String[]{"/"}; 
    } 

} 


WebConfig.java

package spittr.config; 

import org.springframework.context.annotation.Bean; 
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.WebMvcConfigurerAdapter; 
import org.springframework.web.servlet.view.InternalResourceViewResolver; 

@Configuration 
@EnableWebMvc 
@ComponentScan("spitter.web") 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Bean 
    public ViewResolver viewRseolver(){ 
     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(); 
    } 

} 


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 { 

} 


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 
@RequestMapping({"/","/homepage"}) 
public class HomeController { 

    @RequestMapping(method=RequestMethod.GET) 
    public String home(){ 
     return "home"; 
    } 

} 

ответ

2
@ComponentScan("spitter.web") 

Ваше имя пакета spittr.web

@ComponentScan(basePackages={"spitter"} 

здесь же

ADDED ОБЪЯСНЕНИЕ:

@ComponentScan ищет @Component (включая @Repository, @Service и @Controller) аннотированных классов на поставляемом пакете и всех его подпакетах, чтобы добавить их в контекст Spring. Пока поставляемых пакетов не существует, Spring не находит ваш контроллер, чтобы он не создавал его.

Он работает, когда вы проверяете его, потому что используете его явно в своих тестах.

+0

Я так небрежен ... :(Спасибо! – TomLeung