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时无法触发对应方法:
- 修改Servlet的映射注解,支持路径通配符:
将@WebServlet("/users")改为@WebServlet("/users/*"),确保所有以/users开头的请求都被该Servlet处理。 - 调整action的获取方式:
将String action = request.getServletPath();替换为String action = request.getPathInfo();,当访问/users/create时,action的值会是/create,能正确匹配switch分支。 - 修正后的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
相关产品推荐
相关产品推荐

