2015-10-14 99 views
0

我正在使用java配置創建示例hello world程序。我已經定義了調度程序servlet的配置,並提供了映射到「/」的defaultController。但總是以No mapping found for HTTP request with URI [/sample/] in DispatcherServlet with name 'dispatcher'無法正確映射請求

有人能指出這裏的問題嗎?

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.sample</groupId> 
    <artifactId>sample</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <name>sample</name> 

    <properties> 
     <org.springframework.version>4.1.7.RELEASE</org.springframework.version> 
    </properties> 

    <dependencies> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${org.springframework.version}</version> 
     </dependency> 

     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>${org.springframework.version}</version> 
     </dependency> 

     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>${org.springframework.version}</version> 
     </dependency> 

     <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.6</version> 
     </dependency> 

     <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
     </dependency> 

     <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <configuration> 
      <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 

     </plugins> 
    </build> 
    </project> 

ApplicationInitializer.java

package sample.config; 

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

    public class ApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

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

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

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

    } 

DispatcherServeltConfig.java

package sample.config; 

    import org.springframework.context.annotation.Bean; 
    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 
    public class DispatcherServeltConfig extends WebMvcConfigurerAdapter{ 

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

    } 

RootConfiguration.java

package sample.config; 

    import org.springframework.context.annotation.ComponentScan; 

    @ComponentScan(basePackages = {"sample.web"}) 
    public class RootConfiguration { 

    } 

DefaultController.java

package sample.web; 

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

    @Controller 
    public class DefaultController { 

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

    } 

回答

1

你需要告訴@EnabledWebMvc註釋到哪裏去尋找那些包含請求映射的類。可以通過添加@ComponentScan@EnableWebMvcDispatcherServeltConfig)註釋的類指向包含與請求的映射類的包(控制器)

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = {"sample.web"}) 
public class DispatcherServeltConfig extends WebMvcConfigurerAdapter 
要這樣做
0

我認爲你需要啓用<mvc:default-servlet-handler/>

這個處理程序將所有請求轉發到默認的Servlet

@Configuration 
@EnableWebMvc 
public class DispatcherServeltConfig extends WebMvcConfigurerAdapter{ 

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

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

}