You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Glassfish 5.1中servlet-api.jar位置及javax.servlet导入报错问题

根本原因

你全局搜不到带javax.servlet的jar包,本质是踩中了Java EE移交Eclipse基金会改名Jakarta EE的版本过渡坑:

  • GlassFish 5.1本身是Java EE 8到Jakarta EE的过渡版本,你在modules目录找到的jakarta.servlet-api.jar就是Servlet规范的对应依赖包,不用怀疑。
  • 你grep整个目录搜不到javax.servlet字符串有两种可能:要么这个jar经过OSGi模块化重打包,class字节码做了特殊封装,直接搜明文搜不到;要么你实际装的是更高版本的GlassFish(6.0+对应Jakarta EE 9+),从这个版本开始所有Servlet类的包名已经从javax.servlet全量改成了jakarta.servlet,自然搜不到旧包名的内容。
解决办法

选其中一种方案就能解决编译报错:

  • 方案1:保留项目里javax.servlet的导入写法(兼容旧Java EE项目)
    不用硬扒GlassFish安装目录里的jar,直接在构建配置里引入官方提供的Servlet API依赖,注意把依赖范围设为provided——服务器运行时自带相关类,不需要把这个依赖打包进你的项目war包。
    如果是Maven项目,在pom.xml里加这段依赖:
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    
    如果是Gradle项目,加这行配置即可:
    compileOnly 'javax.servlet:javax.servlet-api:4.0.1'
    
  • 方案2:适配当前GlassFish自带的Jakarta EE规范
    把项目代码里所有import javax.servlet.*的语句全部替换成import jakarta.servlet.*,再把C:\Users\ian\GlassFish_Server\glassfish\modules路径下的jakarta.servlet-api.jar添加到项目的编译依赖路径,依赖范围同样设为provided,编译报错就会消失。
补充提示

后续新出的商用、开源应用服务器(包括GlassFish 6+、Tomcat 10+、Jetty 11+等)都已经全面切换到jakarta.*包名,不会再内置javax.servlet相关类,如果是新开发项目建议直接用Jakarta命名空间,减少后续迁移成本。

内容的提问来源于stack exchange,提问作者Ian Boyd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:27:21