java.lang.NumberFormatException:对于输入字符串:""E;”当我尝试将空字符串解析为整数时

java.lang.NumberFormatException:对于输入字符串:""E;”当我尝试将空字符串解析为整数时,java,Java,我想做一个servlet,在这里你写你的名字,姓氏,电子邮件地址,你必须输入两个数字的正确总和 我有一个问题。当我没有在这个“验证码”中输入任何内容时,它会给我HTTP状态500,消息:HTTP状态500 例外情况: java.lang.NumberFormatException: For input string: "" java.base/java.lang.NumberFormatException.forInputString(NumberFormatExce

我想做一个servlet,在这里你写你的名字,姓氏,电子邮件地址,你必须输入两个数字的正确总和

我有一个问题。当我没有在这个“验证码”中输入任何内容时,它会给我HTTP状态500,消息:HTTP状态500

例外情况:

java.lang.NumberFormatException: For input string: ""
    java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
    java.base/java.lang.Integer.parseInt(Integer.java:662)
    java.base/java.lang.Integer.parseInt(Integer.java:770)
    pl.coderslab.Sess05.doPost(Sess05.java:16)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
我希望它返回到表单,因此您必须键入验证码(我没有检查其他字段,不要注意它)

这是我的密码:

@WebServlet("/Sess05")
public class Sess05 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession sess = request.getSession();
        int userSum = Integer.parseInt(request.getParameter("captchaInput"));   //Here's 16 line
        int correctSum = (int) sess.getAttribute("captcha");
        if (userSum != correctSum || request.getParameter("captchaInput").equals("")) {
            Random randGenerator = new Random();
            int firstRand = randGenerator.nextInt(101);
            int secRand = randGenerator.nextInt(101);
            int sum = firstRand + secRand;
            sess.setAttribute("captcha", sum);

            response.getWriter().append("<form action='#' method='post'>");
            response.getWriter().append("<label>Name: <input type='text' name='name'></label><br>");
            response.getWriter().append("<label>Surname: <input type='text' name='surname'></label><br>");
            response.getWriter().append("<label>Email: <input type='email' name='email'></label><br>");
            response.getWriter().append("<label>Enter the sum " + firstRand + " + " + secRand + "<input type='number' name='captchaInput'></label><br>");
            response.getWriter().append("<input type='submit' value='Submit'>");
            response.getWriter().append("</form>");
            response.getWriter().append("Enter the correct sum!");
        } else {
            response.getWriter().append("Sum is correct!");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Random randGenerator = new Random();
        int firstRand = randGenerator.nextInt(101);
        int secRand = randGenerator.nextInt(101);
        int sum = firstRand + secRand;
        HttpSession sess = request.getSession();
        sess.setAttribute("captcha", sum);
        
        response.getWriter().append("<form action='#' method='post'>");
        response.getWriter().append("<label>Name: <input type='text' name='name'></label><br>");
        response.getWriter().append("<label>Surname: <input type='text' name='surname'></label><br>");
        response.getWriter().append("<label>Email: <input type='email' name='email'></label><br>");
        response.getWriter().append("<label>Enter the sum " + firstRand + " + " + secRand + "<input type='number' name='captchaInput'></label><br>");
        response.getWriter().append("<input type='submit' value='Submit'>");
        response.getWriter().append("</form>");
    }
}
@WebServlet(“/Sess05”)
公共类Sess05扩展了HttpServlet{
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
HttpSession sess=request.getSession();
int userSum=Integer.parseInt(request.getParameter(“captchaInput”);//下面是16行
int correctSum=(int)sess.getAttribute(“验证码”);
if(userSum!=correctSum | | request.getParameter(“captchaInput”).equals(“”){
Random randGenerator=新的Random();
int firstRand=randGenerator.nextInt(101);
int secRand=randGenerator.nextInt(101);
整数和=第一兰德+第二兰德;
sess.setAttribute(“验证码”,总和);
response.getWriter().append(“”);
response.getWriter().append(“名称:
”); response.getWriter().append(“姓氏:
”); response.getWriter().append(“电子邮件:
”); response.getWriter().append(“输入总和”+firstRand++“+”+secRand++“
”); response.getWriter().append(“”); response.getWriter().append(“”); response.getWriter().append(“输入正确的总和!”); }否则{ response.getWriter().append(“总和正确!”); } } 受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{ Random randGenerator=新的Random(); int firstRand=randGenerator.nextInt(101); int secRand=randGenerator.nextInt(101); 整数和=第一兰德+第二兰德; HttpSession sess=request.getSession(); sess.setAttribute(“验证码”,总和); response.getWriter().append(“”); response.getWriter().append(“名称:
”); response.getWriter().append(“姓氏:
”); response.getWriter().append(“电子邮件:
”); response.getWriter().append(“输入总和”+firstRand++“+”+secRand++“
”); response.getWriter().append(“”); response.getWriter().append(“”); } }
更新第16行:

  String value = request.getParameter("captchaInput");
  int userSum = value == null || value.isEmpty() ? userSum : Integer.parseInt(value);

主要问题是因为您试图从空变量中获取整数值 它不是数字,因此要解决此问题,您应该通过在代码中创建如下方法来检查该参数是否包含值,以及它是否为数值:

public static boolean isNumeric(String strNum) {
    if (strNum == null) {
        return false;
    }
    try {
        int d = Integer.parseInt(strNum);
    } catch (NumberFormatException nfe) {
        return false;
    }
    return true;
}
然后在代码中调用此方法,在执行任何操作之前检查参数值,并根据此布尔值执行任何操作:

 @WebServlet("/Sess05")
    public class Sess05 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            HttpSession sess = request.getSession();
//  check if it is numeric or not           
 boolean isNumeric = Sess05.isNumeric(request.getParameter("captchaInput"));
if(isNumeric){
  // do your servlet logic 
}else {
  // do whatever you will do if you request hasn't a numeric value 
}
    

只需检查
request.getParameter(“captchaInput”)
是否为空,然后再对其进行分析
value==null | | value.isEmpty()