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>
额外优化建议
- 添加非空校验:就算表单结构正确,也建议在
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; %>
- 避免使用脚本片段: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
相关产品推荐
相关产品推荐

