2016-12-26 4 views
0

SpringMVCを学習し、HelloWorld Webアプリケーションを構築しようとしています。
私はアクション第4版、
SPINGからのコードを使って日食でこのプロジェクトをビルドするが、私はhttp://localhost:8080/homepage
を訪問し、私のブラウザ上でそれをテストしたとき、私は404エラーを得ました。
enter image description here

そして、最もweired事は、私はアクション
春が提供するMockMvc(メソッドを使用してコントローラをテストする場合、それはテストに合格する、である。
私が間違っているところをしましたので、私は疑問に思って?
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") 

あなたのパッケージ名は、ここで

@ComponentScan(basePackages={"spitter"} 

同じspittr.webにある

説明を追加しました:

@ComponentScanは(@Repository、@Serviceと@Controller含む@Componentを探しています)アノテーションされたクラスを、提供されたパッケージとそのすべてのサブパッケージに追加して、それらをSpringコンテキストに追加します。提供されたパッケージは存在しませんが、Springはコントローラを見つけられないので、作成しません。

テストで明示的に使用しているため、テストするときに機能します。

+0

私は非常に不注意です... :(ありがとう! – TomLeung

関連する問題