无法正确映射请求

时间:2015-10-14 07:28:20

标签: maven spring-mvc java-ee

我正在使用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";
        }

    }

2 个答案:

答案 0 :(得分:1)

您需要告诉@EnabledWebMvc注释在哪里搜索包含请求映射的类。您可以通过将@ComponentScan添加到注释为@EnableWebMvcDispatcherServeltConfig)的类来执行此操作,该类指向包含具有请求映射(控制器)的类的包

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"sample.web"})
public class DispatcherServeltConfig extends WebMvcConfigurerAdapter

答案 1 :(得分: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();
    }

}