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

如何解决NumberFormatException?Servlet数字相加报错求助

问题定位与修复方案

异常根源

你遇到的NumberFormatException是因为直接对null或者空字符串调用了Integer.parseInt()。触发场景包括:

  • 跳过前端表单,直接访问Servlet的URL(比如http://localhost:8080/你的应用名/add),此时请求里没有num1和num2参数,getParameter()返回null;
  • 用户未输入任何内容就提交表单,此时参数值是空字符串,Integer.parseInt("")同样会抛出该异常。

修复代码与步骤

1. 后端添加参数校验与异常处理

修改AddServlet.java,先校验参数有效性,再做转换计算,同时捕获转换异常:

package com.adithya;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AddServlet extends HttpServlet
{  
    public void service(HttpServletRequest req,HttpServletResponse res) throws IOException
    {
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
        
        // 先获取参数
        String num1Input = req.getParameter("num1");
        String num2Input = req.getParameter("num2");
        
        // 校验参数是否存在且不为空
        if (num1Input == null || num1Input.trim().isEmpty() || num2Input == null || num2Input.trim().isEmpty()) {
            out.println("<h3>错误:请填写两个有效的数字!</h3>");
            return;
        }
        
        try {
            // 安全转换为整数
            int num1 = Integer.parseInt(num1Input);
            int num2 = Integer.parseInt(num2Input);
            int result = num1 + num2;
            out.println("<h3>result is " + result + "</h3>");
        } catch (NumberFormatException e) {
            // 处理非整数输入的情况
            out.println("<h3>错误:输入的不是有效整数,请重新输入!</h3>");
        }
    }
}

2. 前端优化(避免无效提交)

给前端表单添加基础校验,提前拦截无效输入,同时修正笔误(把2st改成2nd):

<!DOCTYPE html>
<html>
<body>
<form action="add" onsubmit="return checkInput()">
Enter 1st number:<input type="text" name="num1" id="num1"><br>
Enter 2nd number:<input type="text" name="num2" id="num2"><br>
<input type="submit">
</form>

<script>
function checkInput() {
    let num1 = document.getElementById("num1").value.trim();
    let num2 = document.getElementById("num2").value.trim();
    
    if (!num1 || !num2) {
        alert("请填写两个数字!");
        return false;
    }
    
    // 校验是否为整数
    const integerRegex = /^-?\d+$/;
    if (!integerRegex.test(num1) || !integerRegex.test(num2)) {
        alert("请输入有效的整数!");
        return false;
    }
    return true;
}
</script>
</body>
</html>

3. 确认Servlet映射配置

最后检查你的Servlet是否正确映射到/add路径:

  • 如果用web.xml配置,确保有如下内容:
<servlet>
    <servlet-name>AddServlet</servlet-name>
    <servlet-class>com.adithya.AddServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>AddServlet</servlet-name>
    <url-pattern>/add</url-pattern>
</servlet-mapping>
  • 如果用注解,直接在AddServlet类上添加@WebServlet("/add")即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:38:34