SpringMVC 项目中 AbstractAnnotationConfigDispatcherServletInitializer 没有被加载

问题场景

使用 IDEA 和 local Tomcat 运行一个本地的 SpringMVC 项目,从 Tomcat 的日志发现部署成功,并且这个项目也是能够正常运行起来的,同时项目的首页也是成功显示的。但是当我输入其他需要控制器参与处理的 URL 时,却显示 HTTP 404。

分析

由于项目首页可以正常显示,说明项目的构建和部署是没有问题的。那么为什么会 404 呢?我想最可能是控制器处理不了相关的 URL,但是在检查代码并写了测试验证后排除了这一可能。此时怀疑的方向就指向了控制器的 bean 配置或者 HandlerMapping 的配置,这部分的配置我是使用了 AbstractAnnotationConfigDispatcherServletInitializer 的子类进行配置。

在 WebConfig 中使用 @EnableWebMvc 注解启用了 MVC 并且使用了 @ComponentScan 注解扫描配置了控制器所在的包。于是在上面这个 SpittrWebAppInitializer 类中的三个方法打了断点,启动项目调试后发现这个类的这三个方法并没有别调用,也就是说任何组件都没有进行 bean 配置,包括了控制器,怪不得访问指定 URL 时会 404。

解决方案

至于为什么会这样,原因出在 IDEA 构建输出的 Artifacts 中没有输出项目的依赖包(lib)。

知道了为什么会这样之后就需要添加这个 lib 文件夹并将依赖包添加到这个文件夹中。步骤如下

一、按照 File --> Project Structure 打开 Project Structure。选择需要添加依赖的 Artifacts,然后在 WEB-INF 文件夹下新建一个文件夹,命名为 “lib”。

二、选中新建的 lib 文件夹,点击添加依赖包。

三、选中所有显示的依赖包,点击 OK。

四、最后点击 Project Structure 右下角的 OK。

五、重新部署运行,解决问题。

2022.02.17 补充

原来是自己在创建 Artifacts 的时候没有选择根据 Modules 来创建 Artifacts,而是选择了 Empty。如果选择 Empty 那么输出就是没有 lib 依赖包的文件夹的。因为没有基准项目作为基础,当成是一个空项目来进行构建输出,自然不会有依赖包。

然后在弹出的 Modules 列表处选择要输出的 Modules 即可。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值