Tomcat 9.0服务器启动失败及Servlet请求500报错求助
Tomcat 9部署Web应用的两类问题排查
一、web.xml配置Servlet后服务器无法启动
这类问题的常见原因:
- web.xml语法错误:标签未正确闭合、
<servlet-name>与<servlet-mapping>里的名称不匹配,或者XML命名空间/版本配置错误(Tomcat 9对应Servlet 4.0,<web-app>的version需设为4.0,并配置正确的schema地址) - Servlet类路径错误:
<servlet-class>里的全类名拼写错误(比如controller.SaveServlet写成Controller.SaveServlet),或者编译后的class文件未生成在WEB-INF/classes对应目录下 - 映射冲突:同一个
url-pattern被多个Servlet重复配置 - 依赖缺失:Servlet类依赖的第三方jar包未放置在
WEB-INF/lib目录,导致Tomcat加载Servlet类失败
二、@WebServlet注解映射后出现HTTP 500空指针错误
从堆栈日志可以明确,错误出在controller.SaveServlet.doPost(SaveServlet.java:24),本质是调用Double.parseDouble()时传入了null值,触发空指针异常。具体原因:
- 前端请求参数缺失:后端代码尝试获取的某个数值型参数(比如价格、数量),前端表单未提交该参数,或者参数名拼写错误,导致
request.getParameter("xxx")返回null,直接传给Double.parseDouble()就会报错 - 代码未做null校验:在转换数值前,没有判断参数是否为null或空字符串,直接执行转换逻辑
对应解决办法:
- 核对前端表单的参数名与后端
request.getParameter()里的参数名完全一致,确保表单提交了目标参数 - 在代码中增加参数校验,示例:
String numStr = request.getParameter("targetParam"); double num = 0.0; if (numStr != null && !numStr.trim().isEmpty()) { num = Double.parseDouble(numStr); } else { // 处理参数缺失的情况,比如向前端返回参数错误提示 }
- 查看Tomcat完整服务器日志,准确定位第24行对应的参数,排查具体是哪个参数未正确传递
内容的提问来源于stack exchange,提问作者Aswin K
相关产品推荐
相关产品推荐

