我正在尝试在没有调度程序xml和web xml的情况下(即完全没有任何xml)设置Spring MVC项目。因此,我正在使用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; } }
Initializer.java
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 }; } }
HelloController.java
@Controller public class HelloController { @RequestMapping(value = "/", method = RequestMethod.GET) public String printWelcome() { System.out.println("in servlet"); return "index"; } }
And here is the pox.xml snippet:
<?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>
您的项目结构看起来不错,但是我怀疑Eclipse的配置。看起来您的软件包没有成为Java Source的一部分。
请执行以下步骤:
1.验证Source项目集。转到项目属性,Java Build Path然后在Source选项卡上,查找条目src\main\java和 src\main\resources。如果不存在,请单击Add Folder添加源文件夹
2.转到Deployment Assembly并验证您是否具有正确的部署条目映射。如果找不到Deployment Assembly,请前往Project Facets并选择将项目转换为多面形式的选项。在中Project Facets,您应该已经Dynamic Web Module选择。
Deployment Assembly应该从映射Maven Dependencies到WEB-INF/lib,/src/main/webapp到/,src/main/resources到WEB-INF/classes和src/main/java到WEB-INF/classes。如果缺少任何这些条目,则可以单击Add,然后根据需要选择Folder或Libraries。
3.如果要 通过Eclipse而不是通过maven或其他工具来部署应用程序,请确保使用项目中 提到的Context Root名称访问该项目。Web Project Settings
在上述情况下,可以通过 服务器端口随配置而变化的localhost:8080/UI位置访问应用程序。 8080