如何解决Java Web中“Cannot parse null string”报错问题
排查并解决HTTP 500错误(java.lang.NumberFormatException)
1. 直接触发错误的前端表单问题
你的index.html中input标签的name属性存在语法错误,缺少了关键的=符号,导致表单提交时无法正确传递num1和num2参数,Servlet获取到的参数值为null,执行Integer.parseInt(null)时直接抛出NumberFormatException。
错误代码:
<input type="text" name"num1"/> <input type="text" name"num2"/>
修正后代码:
<input type="text" name="num1"/> <input type="text" name="num2"/>
2. Servlet代码的潜在问题及修复
(1)Servlet1的参数校验缺失
原代码没有对参数做非空和格式校验,即使前端修复,用户输入空值或非数字内容时仍会报错,建议补充校验逻辑:
package com.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/servlet1") public class Servlet1 extends HttpServlet{ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 先获取参数并做非空校验 String num1Str = req.getParameter("num1"); String num2Str = req.getParameter("num2"); if (num1Str == null || num1Str.isEmpty() || num2Str == null || num2Str.isEmpty()) { resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<h3>请输入有效的数字</h3>"); return; } try { int number1 = Integer.parseInt(num1Str); int number2 = Integer.parseInt(num2Str); int sum = number1 + number2; // 将原始数字也存入request属性,供Servlet2使用 req.setAttribute("num1", number1); req.setAttribute("num2", number2); req.setAttribute("s", sum); RequestDispatcher rd = req.getRequestDispatcher("/servlet2"); rd.forward(req, resp); } catch (NumberFormatException e) { resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<h3>请输入整数数字</h3>"); } } }
(2)Servlet2的多处错误
- 请求转发后,原表单参数不会自动传递,直接调用
req.getParameter会得到null,需从request属性中获取Servlet1传递的值 resp.setContentType("index/html")格式错误,应改为text/html- 创建了PrintWriter但未输出任何内容,用户无法看到结果
修正后的Servlet2代码:
package com.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/servlet2") public class Servlet2 extends HttpServlet{ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 从request属性获取Servlet1传递的数值 Integer number1 = (Integer) req.getAttribute("num1"); Integer number2 = (Integer) req.getAttribute("num2"); Integer sum = (Integer) req.getAttribute("s"); resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); if (sum != null && number1 != null && number2 != null) { int product = number1 * number2; out.println("<h2>计算结果</h2>"); out.println("两个数的和:" + sum + "<br>"); out.println("两个数的乘积:" + product); } else { out.println("<h3>参数错误,请重新输入</h3>"); } } }
内容的提问来源于stack exchange,提问作者ssc1234
相关产品推荐
相关产品推荐

