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

如何解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:43:25