网站首页 > 技术教程 正文
最近没有发文,因为前几天写的两篇都被头条以全网出现过的理由拒掉了。技术文章不是每日新闻,部分内容重复是很正常的现象,有点怀疑头条不适合发技术文章了。
SpringMVC的学习,相信很多程序员是照虎画猫学的,而且版本迭代又快,没有太多时间去看一下到底是怎么回事。这不,一个小兄弟在实际应用过程中出现了一个问题,<mvc:annotation-driven>放置在不同的配置文件中有的不起作用。
问题描述
我们知道,一个maven web工程有至少有一个Spring配置文件(applicationContext.xml),一个SpringMVC配置文件(xxx-servlet.xml),一般都是这么命名的,如果第二个配置,那么SpirngMVC会默认找/WEB-INF/${servlet-name}-servlet.xml文件。
ApplicationContext.xml的配置(xml文件命名空间之类的不贴了,聚焦问题):
<context:annotation-config />
<context:component-scan base-package="com.niucoding.mall.controller"/>
这个主要是配置了Spring的注解和扫描的包,另一个springmvc-servlet.xml配置如下:
<mvc:annotation-driven/>
<!-- ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
<property name="viewClass">
<value>org.springframework.web.servlet.view.InternalResourceView</value>
</property>
<property name="order" value="1"/>
</bean>
很简答的工程,只有一个test.jsp,但是一直报错404, no mapping。
解决过程
首先检查各种配置,扫描路径,发现没问题,中间尝试无数次,血泪史不表...
最后,使出了必杀技能,copy了一份其他工程的配置,问题解决了,重点对比发现是:
<mvc:annotation-driven/>文件放置不对,如果放在applicationContext.xml中,就可以正常运行,而放在springmvc-servlet.xml中则不能运行。
问题分析
看着小弟一脸懵逼的神情,略微解释一下,不过,我也还有一点不太理解的地方,留着给各位看官解决吧。
首先,我们说一下web.xml的加载顺序,这个大家都不陌生了,listener之后才会加载servlet,也就是说applicationContext.xml首先被Spring容器(ApplicationContext)加载。
然后,servlet初识化的时候,SpringVMC容器(WebApplicationContext,这个是上一个容器的子容器,可以通过parent拿到Spring容器),加载springmvc-servlet.xml。
如果<mvc:annotation-driven/>标签放在applicationContext.xml中,这个没有问题,Spring容器初始化的时候会从@Controller等注解中提取url , 并建立url 到 方法的映射;
如果放在spingmvc-servlet.xml ,Spring 容器加载的时候并不知道这个标签存在,所以只提取了URL,而没有建立映射;
SpringMVC容器在初始化的时候也没建立映射,所以出现了no mapping的错误。
疑难杂症
关于上面的分析,我也看了一下源代码,应该是对的。但是,有一点没有搞清楚的是,SpringMVC容器(暂时这么叫吧)为什么没有建立这种映射?我觉得设计角度来说,这个职责本来就应该是SpringMVC的,而不是Spring的。诸位大侠,有时间有兴趣的可以看一下SpringMVC的代码,给我解惑。
猜你喜欢
- 2024-10-19 Java 项目编译提示 javax.xml.bind.annotation does not exist 错误
- 2024-10-19 Android annotation包下常用的注解
- 2024-10-19 Spring 中 AnnotationConfigUtils
- 2024-10-19 spring mvc 配置失效了?(springmvc的配置)
- 2024-10-19 为什么都爱着江南?黛瓦白墙,烟雨朦胧,是文人魂牵梦绕的故乡
- 2024-10-19 Spring框架系列之构造方法底层剖析01
- 2024-10-19 基于.NET6包含DDD,ES,CQRS等概念的开源
- 2024-10-19 spring 中 AnnotationUtils 的常用方法
- 2024-10-19 SpringBoot实战4-Spring基础-IoC容器
- 2024-10-19 Intellij IDEA安装并使用阿里p3c代码规约插件
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)