You need to enable JavaScript to run this app. NetBeans 12.3运行Java Web项目报Servlet Allocate异常如何解决
优惠活动
大模型
产品
解决方案
定价
更多

NetBeans 12.3运行Java Web项目报Servlet Allocate异常如何解决

问题描述

我是Java编程新手,在做JSP/数据库相关练习时遇到了问题。我有一个项目在NetBeans 8.2中打开运行完全正常,但在NetBeans 12.3中运行时Servlet无法正常工作(该项目在NetBeans 11版本中可以正常运行),我全程使用GlassFish作为服务器。
即便是使用默认内容创建的测试Servlet也会抛出相同错误,我想知道当前使用的版本中出现该错误的原因,以便修复问题。

报错信息

浏览器端报错

浏览器端报错信息

GlassFish服务器端报错

服务器输出报错信息

配置信息

web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
    <servlet-name>Prueba</servlet-name>
    <servlet-class>controlador.Prueba</servlet-class>
</servlet>
<servlet>
    <servlet-name>Login</servlet-name>
    <servlet-class>controlador.Login</servlet-class>
</servlet>
<servlet>
    <servlet-name>Registrar</servlet-name>
    <servlet-class>controlador.Registrar</servlet-class>
</servlet>
<servlet>
    <servlet-name>CrearPelicula</servlet-name>
    <servlet-class>controlador.CrearPelicula</servlet-class>
</servlet>
<servlet>
    <servlet-name>EliminarPelicula</servlet-name>
    <servlet-class>controlador.EliminarPelicula</servlet-class>
</servlet>
<servlet>
    <servlet-name>CerrarSesion</servlet-name>
    <servlet-class>controlador.CerrarSesion</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Prueba</servlet-name>
    <url-pattern>/prueba</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Login</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Registrar</servlet-name>
    <url-pattern>/registrar</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>CrearPelicula</servlet-name>
    <url-pattern>/crearPelicula</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>EliminarPelicula</servlet-name>
    <url-pattern>/eliminarPelicula</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>CerrarSesion</servlet-name>
    <url-pattern>/cerrarSesion</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
</web-app>

问题原因与解决方案

核心原因

该问题是NetBeans 12.3默认的Jakarta EE 9+ 兼容性配置和你项目使用的Java EE 8/Servlet 3.1规范不兼容导致的:

  • NetBeans 8.2、11版本默认支持Java EE 8规范,Servlet相关API包名为javax.servlet.*
  • NetBeans 12.3开始默认优先适配Jakarta EE 9+规范,该版本把所有Java EE的包名从javax.*重命名为jakarta.*,而你项目里的Servlet代码用的还是javax.servlet相关的导入,GlassFish在加载时找不到对应的类就会抛出类加载异常。

修复方案

方案1:调整NetBeans项目的服务器适配规则(推荐,无需修改代码)

  1. 右键点击项目名称,选择「属性」
  2. 找到「运行」分类,确认选中的GlassFish服务器版本是支持Java EE 8的版本(GlassFish 5.x及以下支持Java EE 8,GlassFish 6.x及以上仅支持Jakarta EE 9+)
  3. 切换到「源」分类,将「Java EE版本」设置为「Java EE 8」或者「Servlet 3.1」,不要选Jakarta EE相关的版本
  4. 清理并重新构建项目后重新运行即可。

方案2:如果要继续使用高版本GlassFish(6.x+),需要修改代码导入

将所有Servlet相关的导入语句从javax.servlet.*替换为jakarta.servlet.*即可,其他业务逻辑无需修改。

额外排查点

如果执行上述操作后仍然报错,检查项目的依赖库:

  • 确认项目没有手动引入多余的servlet-api包,Servlet API应该由GlassFish服务器提供,不要打包到项目的WEB-INF/lib目录下
  • 检查NetBeans 12.3的全局服务器配置,确认你添加的GlassFish服务器的版本识别正常,没有被识别为Jakarta EE版本。

内容的提问来源于stack exchange,提问作者Isaías Carreño G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 13:06:00