部署一个简单的Spring MVC应用程序后出错404(没有web.xml)

我想完全基于注释学习一些Spring MVC的基础知识。 我从本教程开始。

克隆存储库后

hg clone https://bitbucket.org/arnelism/snoutbook 

并构建war文件

 mvn package 

我只是将war文件复制到我的Apache Tomcat 7.0.12实例的webapps目录中来部署应用程序。 我正在停止并启动服务器。

 信息:启动Servlet引擎:Apache Tomcat / 7.0.12
 2014年9月12日下午3:37:18 org.apache.catalina.startup.HostConfig deployWAR
信息:部署Web应用程序存档Snoutbook-1.0.0-SNAPSHOT.war
 2014年9月12日下午3:37:27 org.apache.catalina.startup.HostConfig deployDirectory
信息:部署Web应用程序目录文档
 2014年9月12日下午3:37:27 org.apache.catalina.startup.HostConfig deployDirectory
信息:部署Web应用程序目录示例
 2014年9月12日下午3:37:27 org.apache.catalina.startup.HostConfig deployDirectory
信息:部署Web应用程序目录主机管理器
 2014年9月12日下午3:37:27 org.apache.catalina.startup.HostConfig deployDirectory
信息:部署Web应用程序目录管理器
 2014年9月12日下午3:37:27 org.apache.catalina.startup.HostConfig deployDirectory
信息:部署Web应用程序目录ROOT
 2014年9月12日下午3:37:27 org.apache.coyote.AbstractProtocolHandler启动
信息:启动ProtocolHandler [“http-bio-8080”]
 2014年9月12日下午3:37:27 org.apache.coyote.AbstractProtocolHandler启动
信息:启动ProtocolHandler [“ajp-bio-8009”]
 2014年9月12日下午3:37:27 org.apache.catalina.startup.Catalina开始
信息:服务器启动时间为8826毫秒

不幸的是,在此操作之后,我通过显示页面收到错误404。

 http://localhost:8080/Snoutbook-1.0.0-SNAPSHOT/ 

我一直在寻找超过2小时的解决方案,但未能找到原因。 有人有类似的问题吗?

编辑

我尝试使用最新的Tomcat版本apache-tomcat-8.0.12 。 问题依然存在。 但是,在部署Web应用程序时,控制台中会打印更多信息。

 12-Sep-2014 17:13:20.038 INFO [localhost-startStop-1] org.apache.catalina.startu
 p.HostConfig.deployWAR部署Web应用程序存档D:\ Users \ b21090094 \ apac
他-的tomcat-8.0.12 \的webapps \ Snoutbook-1.0.0-SNAPSHOT.war
 12-Sep-2014 17:13:23.132 INFO [localhost-startStop-1] org.apache.catalina.util.S
 essionIdGeneratorBase.createSecureRandom为s创建SecureRandom实例
使用[SHA1PRNG]生成的激情ID花费了[255]毫秒。
 12-Sep-2014 17:13:23.169 INFO [localhost-startStop-1] org.springframework.web.se
 rvlet.FrameworkServlet.initServletBean FrameworkServlet'dispatcher':initializa
开始了
 12-Sep-2014 17:13:23.182 INFO [localhost-startStop-1] org.springframework.contex
 t.support.AbstractApplicationContext.prepareRefresh刷新WebApplicationCon
命名空间'dispatcher-servlet'的文本:启动日期[Fri Sep 12 17:13:23 CEST
 2014]; 上下文层次结构的根
 12-Sep-2014 17:13:23.278 INFO [localhost-startStop-1] org.springframework.contex
 t.annotation.ClassPathScanningCandidateComponentProvider.registerDefaultFilters
为组件scannin找到并支持JSR-250'javax.annotation.ManagedBean'
 G
 12-Sep-2014 17:13:23.281 INFO [localhost-startStop-1] org.springframework.web.co
 ntext.support.AnnotationConfigWebApplicationContext.loadBeanDefinitions注册
带注释的类:[class com.zeroturnaround.snoutbook.init.WebappConfigJpa]

 12-Sep-2014 17:13:23.429 INFO [localhost-startStop-1] org.springframework.contex
 t.annotation.ClassPathScanningCandidateComponentProvider.registerDefaultFilters
为组件scannin找到并支持JSR-250'javax.annotation.ManagedBean'
 G
 12-Sep-2014 17:13:23.921 INFO [localhost-startStop-1] org.springframework.beans。
 factory.support.DefaultListableBeanFactory.preInstantiateSingletons Pre-instanti
 org.springframework.beans.factory.support.DefaultListableBea中的单身人士
 nFactory @ 7169a1:定义bean [org.springframework.context.annotation.internal
 ConfigurationAnnotationProcessor,org.springframework.context.annotation.internal
 AutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequ
 iredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnn
 otationProcessor,org.springframework.context.annotation.internalPersistenceAnnot
 ationProcessor,webappConfigJpa,org.springframework.context.annotation.Configurat
 ionClassPostProcessor $ ImportAwareBeanPostProcessor#0,addPetForm,snoutContoller,S
 noutDao,org.springframework.aop.config.internalAutoProxyCreator,delegatingWebMvc
配置方面,requestMappingHandlerMapping,viewControllerHandlerMapping,beanName
 HandlerMapping的,resourceHandlerMapping,defaultServletHandlerMapping,requestMappin
 gHandlerAdapter,mvcConversionService,mvcValidator,httpRequestHandlerAdapter,SIMP
 leControllerHandlerAdapter,handlerExceptionResolver,proxyTransactionManagementCo
 nfiguration,org.springframework.transaction.config.internalTransactionAdvisor,TR
 ansactionAttributeSource,transactionInterceptor,transactionManager的,EntityManager的
厂,setupViewResolver,了getDataSource]。 工厂层级的根
 12-Sep-2014 17:13:24.225 INFO [localhost-startStop-1] org.springframework.orm.jp
 a.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory Buildi
用于持久性单元'default'的JPA容器EntityManagerFactory
 12-Sep-2014 17:13:24.657 INFO [localhost-startStop-1] org.hibernate.annotations。
 common.Version。  HCANN000001:Hibernate Commons Annotations {4.0.1.Final}

 12-Sep-2014 17:13:24.676 INFO [localhost-startStop-1] org.hibernate.Version.logV
 ersion HHH000412:Hibernate Core {4.1.2}
 12-Sep-2014 17:13:24.681 INFO [localhost-startStop-1] org.hibernate.cfg.Environm
 ENT。  HHH000206:找不到hibernate.properties
 12-Sep-2014 17:13:24.686 INFO [localhost-startStop-1] org.hibernate.cfg.Environm
 ent.buildBytecodeProvider HHH000021:字节码提供程序名称:javassist
 12-Sep-2014 17:13:24.772 INFO [localhost-startStop-1] org.hibernate.ejb.Ejb3Conf
 iguration.configure HHH000204:处理PersistenceUnitInfo [
        名称:默认
         ...]
 2014年9月12日17:13:25.524 INFO [localhost-startStop-1] org.hibernate.service.jdbc
 .connections.internal.ConnectionProviderInitiator.instantiateExplicitConnectionP
 rovider HHH000130:实例化显式连接提供者:org.hibernate.ejb
 .connection.InjectedDataSourceConnectionProvider
 12-Sep-2014 17:13:26.275 INFO [localhost-startStop-1] org.hibernate.dialect.Dial
等。  HHH000400:使用方言:org.hibernate.dialect.HSQLDialect
 12-Sep-2014 17:13:26.356 INFO [localhost-startStop-1] org.hibernate.engine.trans
 action.internal.TransactionFactoryInitiator.initiateService HHH000268:Transacti
策略:org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFacto
 RY
 12-Sep-2014 17:13:26.374 INFO [localhost-startStop-1] org.hibernate.hql.internal
 .ast.ASTQueryTranslatorFactory。  HHH000397:使用ASTQueryTranslatorFactory

 12-Sep-2014 17:13:26.498 INFO [localhost-startStop-1]。  HV0000
 01:Hibernate Validator 4.3.0.Final
 2014年9月12日17:13:27.699 INFO [localhost-startStop-1] org.springframework.web.se
 rvlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod Mapped“{[/ addP
 et],methods = [GET],params = [],headers = [],consumes = [],produce = [],custom = []}“on
 public java.lang.String com.zeroturnaround.snoutbook.controllers.AddPetForm.setu
 pForm(org.springframework.ui.Model)
 12-Sep-2014 17:13:27.700 INFO [localhost-startStop-1] org.springframework.web.se
 rvlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod Mapped“{[/ addP
 et],methods = [POST],params = [],headers = [],consumes = [],produce = [],custom = []}“into
  public java.lang.String com.zeroturnaround.snoutbook.controllers.AddPetForm.han
 dleSubmit(com.zeroturnaround.snoutbook.form.PetForm,org.springframework.validati
 on.BindingResult,org.springframework.web.bind.support.SessionStatus)
 12-Sep-2014 17:13:27.701 INFO [localhost-startStop-1] org.springframework.web.se
 rvlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod Mapped“{[/ pet /
 {petId}],methods = [],params = [],headers = [],consume = [],produce = [],custom = []}“ont
 o public java.lang.String com.zeroturnaround.snoutbook.controllers.SnoutContolle
 r.pet(java.lang.Long中,org.springframework.ui.Model)
 12-Sep-2014 17:13:27.702 INFO [localhost-startStop-1] org.springframework.web.se
 rvlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod Mapped“{[/ owne
 rs],methods = [],params = [],headers = [],consumes = [],produce = [],custom = []}“on pub
 lic java.lang.String com.zeroturnaround.snoutbook.controllers.SnoutContoller.lis
外地人(org.springframework.ui.Model)
 12-Sep-2014 17:13:27.762 INFO [localhost-startStop-1] org.springframework.web.se
 rvlet.handler.AbstractUrlHandlerMapping.registerHandler映射的URL路径[/ **] on
处理类型为[class org.springframework.web.servlet.resource.DefaultServle
 tHttpRequestHandler]
 2014年9月12日17:13:28.129 INFO [localhost-startStop-1] org.springframework.web.se
 rvlet.FrameworkServlet.initServletBean FrameworkServlet'dispatcher':initializa
在4960毫秒完成
 12-Sep-2014 17:13:28.140 INFO [localhost-startStop-1] org.apache.catalina.startu
 p.HostConfig.deployWAR部署Web应用程序存档D:\ Users \ b21090094 \
 apache-tomcat-8.0.12 \ webapps \ Snoutbook-1.0.0-SNAPSHOT.war已完成8,103
女士
 12-Sep-2014 17:13:28.141 INFO [localhost-startStop-1] org.apache.catalina.startu
 p.HostConfig.deployDirectory部署Web应用程序目录D:\ Users \ b21090
 094 \ Apache的Tomcat的8.0.12 \的webapps \文档
 12-Sep-2014 17:13:28.167 INFO [localhost-startStop-1] org.apache.catalina.startu
 p.HostConfig.deployDirectory部署Web应用程序目录D:\ Users \ b2
 1090094 \ apache-tomcat-8.0.12 \ webapps \ docs已在26毫秒内完成
 12-Sep-2014 17:13:28.168 INFO [localhost-startStop-1] org.apache.catalina.startu
 p.HostConfig.deployDirectory部署Web应用程序目录D:\ Users \ b21090
 094 \ Apache的Tomcat的8.0.12 \ web应用\例子
 2014年9月12日17:13:28.537 INFO [localhost-startStop-1] org.apache.catalina.startu
 p.HostConfig.deployDirectory部署Web应用程序目录D:\ Users \ b2
 1090094 \ apache-tomcat-8.0.12 \ webapps \ examples已在370毫秒内完成
 2014年9月12日17:13:28.538 INFO [localhost-startStop-1] org.apache.catalina.startu
 p.HostConfig.deployDirectory部署Web应用程序目录D:\ Users \ b21090
 094 \ Apache的Tomcat的8.0.12 \的webapps \主机经理
 2014年9月12日17:13:28.572 INFO [localhost-startStop-1] org.apache.catalina.startu
 p.HostConfig.deployDirectory部署Web应用程序目录D:\ Users \ b2
 1090094 \ apache-tomcat-8.0.12 \ webapps \ host-manager已在34毫秒内完成
 2014年9月12日17:13:28.573 INFO [localhost-startStop-1] org.apache.catalina.startu
 p.HostConfig.deployDirectory部署Web应用程序目录D:\ Users \ b21090
 094 \ Apache的Tomcat的8.0.12 \的webapps \经理
 12-Sep-2014 17:13:28.633 INFO [localhost-startStop-1] org.apache.catalina.startu
 p.HostConfig.deployDirectory部署Web应用程序目录D:\ Users \ b2
 1090094 \ apache-tomcat-8.0.12 \ webapps \ manager已在61毫秒内完成
 12-Sep-2014 17:13:28.633 INFO [localhost-startStop-1] org.apache.catalina.startu
 p.HostConfig.deployDirectory部署Web应用程序目录D:\ Users \ b21090
 094 \ Apache的Tomcat的8.0.12 \的webapps \ ROOT
 2014年9月12日17:13:28.659 INFO [localhost-startStop-1] org.apache.catalina.startu
 p.HostConfig.deployDirectory部署Web应用程序目录D:\ Users \ b2
 1090094 \ apache-tomcat-8.0.12 \ webapps \ ROOT已在26毫秒内完成
 12-Sep-2014 17:13:28.663 INFO [main] org.apache.coyote.AbstractProtocol.start St
 arting ProtocolHandler [“http-nio-8080”]
 12-Sep-2014 17:13:28.676 INFO [main] org.apache.coyote.AbstractProtocol.start St
 arting ProtocolHandler [“ajp-nio-8009”]
 2014年9月12日17:13:28.682 INFO [main] org.apache.catalina.startup.Catalina.start
服务器启动时间为8701毫秒

之后我仍然得到错误404。

尝试使用http://localhost:8080/Snoutbook-1.0.0-SNAPSHOT/owners

当您将war文件上传到tomcat的webapp文件夹时,默认情况下tomcat允许您使用war的名称访问webapp。 然后,当您查看Web应用程序初始化程序 ( web.xml的替代)时,它正在使用/ mapping注册DispatcherServlet 。 接下来,你看看控制器 ,它有@RequestMapping指向/owners 。 因此,路径是:

host:port + war-name + servlet-mapping + controller-mapping

等于

localhost:8080/ + Snoutbook-1.0.0-SNAPSHOT/ + / + owners

等于

http://localhost:8080/Snoutbook-1.0.0-SNAPSHOT/owners