代码之家  ›  专栏  ›  技术社区  ›  ssc1234

如何解决错误:“消息无法解析空字符串”

  •  0
  • ssc1234  · 技术社区  · 2 年前

    我得到的错误是: HTTP状态500内部服务器错误 类型异常报告

    我正在遵循一个教程,并按照指导者所说的去做。

    我得到的错误是: 无法分析空字符串 服务器遇到意外情况,无法完成请求。 java.lang.NumberFormatException:无法分析空字符串

    Servlet 1.java

    package com.servlets;
     
    import java.io.IOException;
     
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    @WebServlet("/servlet1")
    public class Servlet1 extends HttpServlet{
     
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // TODO Auto-generated method stub
             
            int number1=Integer.parseInt(req.getParameter("num1"));
            int number2=Integer.parseInt(req.getParameter("num2"));
             
            int sum=number1+number2;
             
            req.setAttribute("s", sum);
            RequestDispatcher rd=req.getRequestDispatcher("/servlet2");
            rd.forward(req, resp);
        }
    }
    

    Servlet 2.java

    package com.servlets;
     
    import java.io.IOException;
    import java.io.PrintWriter;
     
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    @WebServlet("/servlet2")
    public class Servlet2 extends HttpServlet{
         
         
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // TODO Auto-generated method stub
     
            int number1=Integer.parseInt(req.getParameter("num1"));
            int number2=Integer.parseInt(req.getParameter("num2"));
             
            resp.setContentType("index/html");
             
            int product=number1*number2;
            int sum=(int) req.getAttribute("s");
            PrintWriter out=resp.getWriter();
        }
    }
    

    索引html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
        <h1>This is the Form</h1>
        <br>
        <br>
         
        <form action="servlet1" method="post">
            <label>Enter the first number:</label>
            <input type="text" name"num1"/>
             
            <label>Enter the second number:</label>
            <input type="text" name"num2"/>
             
            <button type="submit">Submit</button>
             
        </form>
    </body>
    </html>
    
    1 回复  |  直到 2 年前
        1
  •  0
  •   Andrej Istomin    2 年前

    servlet中的这种解析逻辑是不安全的:

    int number1=Integer.parseInt(req.getParameter("num1"));
    int number2=Integer.parseInt(req.getParameter("num2"));
    

    Java将无法解析 int 如果参数为 null 或者不是数字。在您的特定情况下,其中一个参数是 无效的 。但通常情况下,由于这是用户输入,您需要验证参数 num1 num2 可以被解析,或者你需要捕获一个异常并处理它(显示有意义的错误,如“请输入正确的数据”等)。你可以检查 question ,你会明白的。

    你在HTML中也有一个错误, = 缺少,所以您的输入没有名称,在这里您已经丢失了参数,它们将无法正确地到达servlet。代码应该如下所示:

    <form action="servlet1" method="post">
        <label>Enter the first number:</label>
        <input type="text" name="num1"/>
             
        <label>Enter the second number:</label>
        <input type="text" name="num2"/>
             
        <button type="submit">Submit</button>
             
    </form>