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