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

Servlet报500内部错误:JSP传值引发NumberFormatException求助

猜数字游戏500内部服务器错误排查与解决

错误原因分析

报错信息java.lang.NumberFormatException: For input string: " 1"明确指向:字符串转整数时,输入的字符串包含前置空格,Integer.parseInt()无法解析带空格的字符串,触发异常导致500错误。

问题定位

查看JSP代码中的隐藏域定义:

<input type="hidden" name="minimum" value=" <%= minimum.getValue() %>" />
<input type="hidden" name="maximum" value=" <%= maximum.getValue() %>" />
<input type="hidden" name="guessNum" value=" <%= guessNum.getValue() %>" />
<input type="hidden" name="guesses" value=" <%= guesses.getValue() %>" />

可以看到value属性中,<%= %>表达式前多了一个空格,导致传递给Servlet的参数值是带前置空格的字符串(比如" 1"),而非纯数字字符串。

解决方案

1. 修正JSP隐藏域的空格问题

将JSP中所有隐藏域的value属性里的前置空格删除,修改后代码如下:

<input type="hidden" name="minimum" value="<%= minimum.getValue() %>" />
<input type="hidden" name="maximum" value="<%= maximum.getValue() %>" />
<input type="hidden" name="guessNum" value="<%= guessNum.getValue() %>" />
<input type="hidden" name="guesses" value="<%= guesses.getValue() %>" />

2. 增强Servlet的参数处理健壮性(可选但推荐)

为了避免用户输入空格、空值等情况再次触发异常,在Servlet解析参数前做以下处理:

  • 对参数进行去空格操作
  • 增加非空校验

修改后的Servlet参数解析代码示例:

// 处理用户输入的guess参数
String guessStr = request.getParameter("guess");
if (guessStr == null || guessStr.trim().isEmpty()) {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<p>请输入有效的数字!</p>");
    out.println("<a href='index.jsp'>返回重新输入</a>");
    return;
}
int guessInt = Integer.parseInt(guessStr.trim());
GuessNumber guess = new GuessNumber(guessInt);

// 处理其他隐藏域参数
int minInt = Integer.parseInt(request.getParameter("minimum").trim());
GuessNumber minimum = new GuessNumber(minInt);
int maxInt = Integer.parseInt(request.getParameter("maximum").trim());
GuessNumber maximum = new GuessNumber(maxInt);
int guessNumInt = Integer.parseInt(request.getParameter("guessNum").trim());
GuessNumber guessNum = new GuessNumber(guessNumInt);
int guessesInt = Integer.parseInt(request.getParameter("guesses").trim());
GuessNumber guesses = new GuessNumber(guessesInt);

3. 修正Servlet路径大小写问题

Servlet中生成的form的action为/GuessGame,但Servlet的@WebServlet注解中urlPattern是/guessGame,大小写不一致可能导致后续请求404,建议修改为一致的路径:

out.println("<form name='GuessNumForm' action='guessGame' method='post'>");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:49:53