为什么@JavaConfig不能在SpringMVC中工作?

为什么@JavaConfig不能在SpringMVC中工作?,java,spring,maven,spring-mvc,spring-java-config,Java,Spring,Maven,Spring Mvc,Spring Java Config,我试图在没有DispatcherXML和WebXML的情况下设置SpringMVC项目(也就是说,根本没有任何xml)。因此,我使用Spring的@JavaConfig技术。然而,每当我试图在我的服务器上启动应用程序时,我的服务器就不工作了(没有抛出任何异常,它得到的是HTTP 404)。 以下是项目结构的快照… 下面是代码片段: WebConfig.java @EnableWebMvc @Configuration @ComponentScan({ "com.controller" }) p

我试图在没有DispatcherXML和WebXML的情况下设置SpringMVC项目(也就是说,根本没有任何xml)。因此,我使用Spring的@JavaConfig技术。然而,每当我试图在我的服务器上启动应用程序时,我的服务器就不工作了(没有抛出任何异常,它得到的是HTTP 404)。
以下是项目结构的快照…

下面是代码片段:
WebConfig.java

@EnableWebMvc
@Configuration
@ComponentScan({ "com.controller" })
public class WebConfig extends WebMvcConfigurerAdapter {

    private static final String VIEW_LOCATION = "/WEB-INF/views/";
    private static final String SUFFIX = ".jsp";

//  @Override
//  public void addResourceHandlers(ResourceHandlerRegistry registry) {
//      System.out.println("in resource");
//      registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");       
//  }

    @Bean
    public InternalResourceViewResolver viewResolver() {
        System.out.println("in view");
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix(VIEW_LOCATION);
        viewResolver.setSuffix(SUFFIX);
        return viewResolver;
    }

}
public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    private static final String MAPPING_URL = "/";

    @Override
    protected Class<?>[] getRootConfigClasses() {
        System.out.println("in config");
        return new Class[] { WebConfig.class };
    }

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

    @Override
    protected String[] getServletMappings() {
        System.out.println("dispatcher");
        return new String[] { MAPPING_URL };
    }

}
@Controller
public class HelloController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String printWelcome() {
        System.out.println("in servlet");
        return "index";
    }

}
Initializer.java

@EnableWebMvc
@Configuration
@ComponentScan({ "com.controller" })
public class WebConfig extends WebMvcConfigurerAdapter {

    private static final String VIEW_LOCATION = "/WEB-INF/views/";
    private static final String SUFFIX = ".jsp";

//  @Override
//  public void addResourceHandlers(ResourceHandlerRegistry registry) {
//      System.out.println("in resource");
//      registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");       
//  }

    @Bean
    public InternalResourceViewResolver viewResolver() {
        System.out.println("in view");
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix(VIEW_LOCATION);
        viewResolver.setSuffix(SUFFIX);
        return viewResolver;
    }

}
public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    private static final String MAPPING_URL = "/";

    @Override
    protected Class<?>[] getRootConfigClasses() {
        System.out.println("in config");
        return new Class[] { WebConfig.class };
    }

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

    @Override
    protected String[] getServletMappings() {
        System.out.println("dispatcher");
        return new String[] { MAPPING_URL };
    }

}
@Controller
public class HelloController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String printWelcome() {
        System.out.println("in servlet");
        return "index";
    }

}
下面是pox.xml代码片段:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com</groupId>
  <artifactId>UI</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>UI Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.2.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
    <finalName>UI</finalName>
  </build>
</project>

4.0.0
通用域名格式
用户界面
1.0-快照
战争
UI Maven Webapp
http://maven.apache.org
org.springframework
SpringWebMVC
4.2.1.1发布
javax.servlet
javax.servlet-api
3.1.0
org.apache.maven.plugins
maven战争插件
假的
用户界面

您的代码没有问题。我在
tomcat8
applicationserver上执行它们时没有做任何更改。
使用Maven打包
war
mvn干净的包

您的代码没有问题。我在
tomcat8
applicationserver上执行它们时没有做任何更改。
使用Maven打包
war
mvn干净的包

您的代码没有问题。我在
tomcat8
applicationserver上执行它们时没有做任何更改。
使用Maven打包
war
mvn干净的包

您的代码没有问题。我在
tomcat8
applicationserver上执行它们时没有做任何更改。
使用Maven来打包
war
mvn clean package

您的项目结构看起来不错,但我怀疑Eclipse配置。看起来您的包不是Java源代码的一部分

请执行以下步骤:

1.验证项目的
源代码设置。转到项目属性,
Java构建路径
并在
Source
选项卡上,查找条目
src\main\Java
src\main\resources
。如果不存在,请单击
添加文件夹
,添加源文件夹,其应类似于以下内容:

2.转到
部署程序集
,并验证部署条目映射是否正确。如果未找到部署程序集
,请转到项目面,然后选择将项目转换为面形式的选项。在
projectfacets
中,您应该选择了
dynamicwebmodule

Deployment Assembly
应该具有从
Maven Dependencies
WEB-INF/lib
/src/main/webapp
/code>,
src/main/resources
WEB-INF/classes
src/main/java
WEB-INF/classes>的映射。如果缺少这些条目中的任何一个,您可以单击
添加
,然后根据需要选择
文件夹

3.如果您是通过Eclipse而不是maven或其他工具部署应用程序,请确保使用项目的
Web项目设置中提到的
上下文根目录
名称访问项目


在上述情况下,您可以通过
localhost:8080/UI
访问应用程序,其中服务器端口
8080
可能会因配置而异。

您的项目结构看起来不错,但我怀疑Eclipse配置。看起来您的包不是Java源代码的一部分

请执行以下步骤:

1.验证项目的
源代码设置。转到项目属性,
Java构建路径
并在
Source
选项卡上,查找条目
src\main\Java
src\main\resources
。如果不存在,请单击
添加文件夹
,添加源文件夹,其应类似于以下内容:

2.转到
部署程序集
,并验证部署条目映射是否正确。如果未找到部署程序集
,请转到项目面
,然后选择将项目转换为面形式的选项。在
projectfacets
中,您应该选择了
dynamicwebmodule

Deployment Assembly
应该具有从
Maven Dependencies
WEB-INF/lib
/src/main/webapp
/code>,
src/main/resources
WEB-INF/classes
src/main/java
WEB-INF/classes>的映射。如果缺少这些条目中的任何一个,您可以单击
添加
,然后根据需要选择
文件夹

3.如果您是通过Eclipse而不是maven或其他工具部署应用程序,请确保使用项目的
Web项目设置中提到的
上下文根目录
名称访问项目


在上述情况下,您可以通过
localhost:8080/UI
访问应用程序,其中服务器端口
8080
可能会因配置而异。

您的项目结构看起来不错,但我怀疑Eclipse配置。看起来您的包不是Java源代码的一部分

请执行以下步骤:

1.验证项目的
源代码设置。转到项目属性,
Java构建路径
并在
Source
选项卡上,查找条目
src\main\Java
src\main\resources
。如果不存在,请单击
添加文件夹
,添加源文件夹,其应类似于以下内容:

2.转到
展开程序集
并验证是否有展开条目m