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

Servlet开发CRUD时创建页面请求资源不可用问题解决

问题解决步骤

一、修复HttpServlet类文件错误

控制台提示的bad class file: HttpServlet.class是核心问题,根源是Servlet API jar包冲突:

  • 打开项目的WEB-INF/lib目录,检查是否存在servlet-api.jar或jakarta.servlet-api.jar,如果有直接删除。Tomcat等Web容器本身已提供Servlet API,手动将该jar包放入项目会导致版本冲突,生成损坏的类文件。
  • 若使用Maven管理项目,确保Servlet API依赖的<scope>设为provided,避免打包时将该jar包加入项目:
    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>5.0.0</version> <!-- 版本需匹配你的Web容器,比如Tomcat 10+用此版本 -->
        <scope>provided</scope>
    </dependency>
    
  • 在NetBeans中执行Clean and Build操作,清除旧的损坏类文件,重新编译生成正确的类文件。

二、修正Servlet路径映射逻辑

当前代码的路径匹配逻辑错误,导致访问创建URL时无法触发对应方法:

  1. 修改Servlet的映射注解,支持路径通配符:
    将@WebServlet("/users")改为@WebServlet("/users/*"),确保所有以/users开头的请求都被该Servlet处理。
  2. 调整action的获取方式:
    将String action = request.getServletPath();替换为String action = request.getPathInfo();,当访问/users/create时,action的值会是/create,能正确匹配switch分支。
  3. 修正后的doGet方法:
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String action = request.getPathInfo();
    
        try {
            switch (action) {
                case "/create" -> createForm(request, response);
                default -> listUser(request, response);
            }
        } catch (SQLException ex) {
            throw new ServletException(ex);
        }
    }
    

三、验证其他细节

  • 确认user/form.jsp文件存在于项目的web/user/目录下,路径与RequestDispatcher指定的完全一致。
  • 检查项目Java编译版本:代码使用了Java 14+的switch表达式语法,需在NetBeans中设置项目的源版本和目标版本为Java 14或更高(右键项目→Properties→Sources→Source/Binary Format)。

完成上述步骤后重新部署项目,访问/users/create即可正常跳转到创建表单页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:07:27