3.1.从零开始学springboot-记一次tomcat7报错

博主因使用过旧的Tomcat版本,在运行带有Spring Security的Java项目时遇到错误。错误提示与Servlet 3.1+环境兼容性有关。通过升级至Tomcat 9.0,问题得以解决,项目运行正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

博主时隔多年,再次进行java的开发,本地环境为jdk1.8+IDEA+tomcat7+maven3.6,检出公司项目,运行报错,艰难排之

报错信息

ERROR 2019-03-06 09:31:23o.s.w.c.ContextLoaderContext initialization failed
org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'springSecurityFilterChain' defined in class 
org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration: 
Bean instantiation via factory method failed; nested exception is 
org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: 
Factory method 'springSecurityFilterChain' threw exception; nested exception is 
java.lang.IllegalStateException: HttpServletRequest.changeSessionId is undefined. 
Are you using a Servlet 3.1+ environment?

搜索引擎限制了长度,所以博主只能一段一段的百度,试图找到相同遭遇的道友,奈何前面的一大坨都没有找到相似的,最后Are you using a Servlet 3.1+ environment?这段找到了一些信息

1.png

博主一想,有些道理,可能真是自己的tomcat太过老旧,遂安装最新9.0,运行,成功。。。。。

总结

内在原因在截图中已经描述了,看来软件还是用最新的比较好

请关注我的订阅号

订阅号.png

<think>嗯,用户之前遇到了安装包时出现404错误的问题,现在又提出了一个新的疑问。用户输入的命令是安装本地的.tgz文件,但报错信息却提到了另一个包名swsys-usb-switching,这明显不一致。为什么会这样呢? 首先,我需要理解用户的具体操作。用户使用npm install命令指定了本地文件路径,并添加了--legacy-peer-deps参数。按理说,这应该直接从本地安装,而不去访问npm仓库。但错误信息却显示npm尝试从registry下载swsys-usb-switching,导致404。这说明在安装过程中,npm仍然在尝试获取这个不存在的包,可能和本地包中的依赖有关。 接下来,考虑到用户之前提到过他们从Qualcomm下载的包名是swsys-qmvs-3.1.33.7.tgz,而错误中提到的包名是swsys-usb-switching,这可能意味着本地包中的package.json文件里声明了依赖项,依赖了swsys-usb-switching这个包。当用户安装本地包时,npm会解析该包的依赖,并尝试从registry下载,但由于该包不存在,所以报错404。 另外,用户可能没有意识到,即使安装本地包,npm仍然会处理该包的依赖项。如果这些依赖项在公共registry中不存在,就会导致错误。这种情况下,错误信息中的包名和用户安装的包名不同,说明问题出在依赖链中。 用户可能还尝试过使用--legacy-peer-deps和-g参数,但同样报错,这表明问题根源在于依赖项的解析,而非安装方式。需要检查本地.tgz包中的package.json文件,确认是否有依赖声明了swsys-usb-switching。 此外,用户可能没有解压或查看过.tgz文件的内容,导致不清楚内部依赖的情况。这时候需要指导用户如何检查包内的package.json,或者建议他们联系Qualcomm确认依赖是否正确配置。 总结来说,问题在于本地包的依赖项引用了不存在的公共包,导致npm在安装时尝试下载,从而报错。解决方法包括检查本地包的依赖,联系供应商确认,或者配置私有仓库。</think>--- ### **问题根源分析** 你输入的安装命令确实指向本地 `.tgz` 文件,但报错信息中提到的 `swsys-usb-switching` 与此无关。出现这种矛盾的根本原因是: **该 `.tgz` 包内部的 `package.json` 文件声明了依赖项 `swsys-usb-switching@^1.4.8`,而这一依赖在公共 npm 仓库中不存在。** --- ### **详细解释** 1. **安装流程拆解** 当你运行 `npm install "C:\...\swsys-qmvs-3.1.33.7.tgz"` 时,实际分为两步: - **步骤1**:安装本地 `.tgz` 包(`swsys-qmvs`)。 - **步骤2**:解析该包的 `package.json` 中的依赖项(即 `swsys-usb-switching@^1.4.8`),并尝试从 npm 仓库下载。 2. **矛盾现象的原因** - **本地包安装成功**:`swsys-qmvs` 会正确安装到 `node_modules`。 - **依赖安装失败**:`swsys-usb-switching@^1.4.8` 不存在于公共仓库,触发 `404 Not Found` 错误。 --- ### **验证方法** 1. **检查 `.tgz` 包内的 `package.json`** 解压 `swsys-qmvs-3.1.33.7.tgz`,查看其 `package.json` 中的 `dependencies` 字段: ```bash tar -xzvf swsys-qmvs-3.1.33.7.tgz cat package/package.json | grep dependencies ``` 大概率会发现类似内容: ```json "dependencies": { "swsys-usb-switching": "^1.4.8" } ``` 2. **公共仓库核验** 通过 npm 官网直接搜索 `swsys-usb-switching`,确认该包不存在: - 访问:https://www.npmjs.com/package/swsys-usb-switching - 结果:显示 `404 This package could not be found`。 --- ### **解决方案** #### 1. **忽略依赖安装(临时绕过)** 通过 `--no-optional` 或 `--omit=optional` 跳过可选依赖(若 `swsys-usb-switching` 是可选依赖): ```bash npm install "C:\Program Files (x86)\Qualcomm\QMVS\swsys-qmvs-3.1.33.7.tgz" --legacy-peer-deps --no-optional ``` #### 2. **联系 Qualcomm 获取完整依赖链** - **可能性1**:`swsys-usb-switching` 是 Qualcomm 私有包,需配置私有仓库地址: ```bash npm config set registry <Qualcomm私有仓库URL> ``` - **可能性2**:该依赖已废弃或更名,需更新 `.tgz` 包内的 `package.json`。 #### 3. **手动移除无效依赖(高风险)** 解压 `.tgz` 包,删除 `package.json` 中对 `swsys-usb-switching` 的依赖声明,重新打包并安装: ```bash tar -xzvf swsys-qmvs-3.1.33.7.tgz cd package # 编辑 package.json,删除依赖项 npm pack npm install ./swsys-qmvs-3.1.33.7-modified.tgz --legacy-peer-deps ``` --- ### **操作建议** - **优先联系 Qualcomm 支持团队**:确认 `swsys-usb-switching` 的来源及安装方式。 - **检查私有仓库配置**:确保所有依赖均能从私有仓库拉取。 - **对比文档与包版本**:确认下载的 `.tgz` 包版本与文档要求一致。 --- ### **总结** - **核心矛盾**:安装本地包时,其依赖项 `swsys-usb-switching` 触发了对公共仓库的请求。 - **解决关键**:需明确该依赖是否为必需项,并通过 Qualcomm 获取正确的安装渠道。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值