一、概述
本人使用的是最新的JDK17、Tomcat10,在导入旧版本java项目时出现如下图问题。在出现该问题我的第一反应是“项目结构(Project Structure)”中架包出了问题,检查后并未发现问题。查询了多种解决办法都无效。以下总结一下我所查到的解决方式(通用解决办法)以及最终解决我问题的办法(最终办法)。
二、通用解决办法
有老哥解释说出现该问题是由于servlet和JSP不是Java平台JavaSE(标准版)的一部分,而是Java EE(企业版)的一部分,因此,必须告知编译器servlet的位置。所以给了以下解决办法(该部分解决办法皆来源于网络)
1.添加环境变量
- 查找架包:servlet-api.jar地址:apache-tomcat-7.0.29\common\lib
- 将环境变量CLASSPATH值添加该地址值:.;…apache-tomcat-7.0.29\common\lib\servlet-api.jar
- 把common/lib下的servlet-api.jar拷贝到JDK/jre\lib\ext下
针对该解决方案,我出现的问题:
- 我所使用的Tomcat版本该架包地址在:apache-tomcat-10.0.14\lib
- 我所使用的JDK版本为JDK17,JDK11以上版本没有JRE,因此不存在jre\lib\ext根目录,为此我尝试了手动创建JRE目录1,再将该架包导入到ext文件内。依然没有解决问题。
2.直接添加架包
在项目结构中直接添加依赖,通过“+”符号直接添加servlet-api.jar,对于我Tomcat10版本该包所在目录是Tomcat安装目录下的lib文件夹下,早期版本在…\common\lib文件目录下。然后选择引用即可。
而我引用的包都存在于我项目中的lib目录下,所以我只需要引用lib目录即可。而且一般如图中添加了Tomacat依赖就无需单独添加servlet包。因此该方式无用
三、最终解决办法
其他各色解决办法都无非以上两种办法的原理:修改环境变量以便IDEA识别、直接在IDEA添加缺失包解决问题。以上两种办法都没有解决我的问题,但并非无用。有需要的小伙伴可以尝试一下。实在解决不掉问题可以尝试安装低版本JDK再尝试以上方式。
我最终还是靠IDEA自动识别问题,添加java EE架包解决。如下图:
利用DOS在JDK目录下执行:bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre ↩︎