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

JSP与Tomcat环境出现java.lang.NumberFormatException: null问题求助

解决java.lang.NumberFormatException: null异常问题

首先,咱们直接定位问题核心:你遇到的java.lang.NumberFormatException: null异常,是因为battle.jsp里调用Integer.parseInt()时传入了null值——也就是说,请求里根本没拿到heroes、wolfs、orcs这些参数。

问题根源

看你第一个JSP的代码,所有的输入框(heroNumber、wolfNumber、orcNumber)都不在<form>标签内部!你的form只包裹了提交按钮:

<form action="battle.jsp" method="post" name="form1">
  <input type="submit" value="Fight" class="submitFight">
</form>

而那些带有name属性(heroes、wolfs、orcs)的输入框都在form外面,所以点击提交按钮时,浏览器只会提交form内部的元素,这些输入框的参数根本不会被发送到battle.jsp,导致request.getParameter()返回null,转成int就触发了异常。

修复方案

把所有需要提交的输入框都放到<form>标签内部就行,调整后的第一个JSP代码大致如下:

<link rel="stylesheet" href="firstPage.css">
<div class="container">
  <div class="header">
    <h1>RPG</h1>
  </div>
  <!-- 把form标签移到最外层,包裹所有需要提交的元素 -->
  <form action="battle.jsp" method="post" name="form1">
    <div class="left">
      <img src="images/hero.png" width="300" height="300" class="hero">
      <input type="number" class="heroNumber" min="1" max="3" value="1" name="heroes">
    </div>
    <div class="middle">
      <p class="VS">VS.</p>
      <input type="submit" value="Fight" class="submitFight">
    </div>
    <div class="right2">
      <img src="images/wolf.png" width="152" height="150" class="wolf">
      <input type="number" class="wolfNumber" min="1" max="5" value="1" name="wolfs">
    </div>
    <div class="right2">
      <img src="images/orc.png" width="150" height="150" class="orc">
      <input type="number" class="orcNumber" min="1"max="3" value="1" name="orcs">
    </div>
  </form>
</div>

额外优化建议

  1. 添加非空校验:就算表单结构正确,也建议在battle.jsp里先判断参数是否存在,避免类似异常:
<%
String heroParam = request.getParameter("heroes");
String wolfParam = request.getParameter("wolfs");
String orcParam = request.getParameter("orcs");

// 默认值处理,比如参数为空时设为1
int amountHero = (heroParam != null && !heroParam.isEmpty()) ? Integer.parseInt(heroParam) : 1;
int amountWolf = (wolfParam != null && !wolfParam.isEmpty()) ? Integer.parseInt(wolfParam) : 1;
int amountOrc = (orcParam != null && !orcParam.isEmpty()) ? Integer.parseInt(orcParam) : 1;
%>
  1. 避免使用脚本片段:JSP脚本(<% %>)已经是比较老旧的写法,推荐使用EL表达式和JSTL标签来处理,代码更简洁易维护,比如:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<c:set var="heroParam" value="${param.heroes}" default="1"/>
<c:set var="wolfParam" value="${param.wolfs}" default="1"/>
<c:set var="orcParam" value="${param.orcs}" default="1"/>

<fmt:parseNumber var="amountHero" value="${heroParam}" integerOnly="true"/>
<fmt:parseNumber var="amountWolf" value="${wolfParam}" integerOnly="true"/>
<fmt:parseNumber var="amountOrc" value="${orcParam}" integerOnly="true"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:07:47