首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java Servlet将2个数字相加

java Servlet将2个数字相加
EN

Stack Overflow用户
提问于 2018-07-05 01:09:07
回答 4查看 8.4K关注 0票数 0

我的java文件如下

代码语言:javascript
复制
package servletjsp;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AddServlet extends HttpServlet 
{
    public void service(HttpServletRequest req,HttpServletResponse res) 
    {
        int i=Integer.parseInt(req.getParameter("num1"));
        int j=Integer.parseInt(req.getParameter("num2"));

        int k=i+j;
        System.out.println("the result is "+ k);
    }
} 

我的html文件如下

代码语言:javascript
复制
<!DOCTYPE html>
<html>
    <body>
        <form action="add">
            Enter 1st number: <input type="text"  name=num1><br>
            Enter 2nd number: <input type="text"  name=num1><br>
            <input type="submit">
        </form>
    </body>
</html> 

我的web.xml文件如下

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" 
         version="3.1">
    <servlet>
        <servlet-name>abc</servlet-name>
        <servlet-class>servletjsp.AddServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>abc</servlet-name>
        <url-pattern>/add</url-pattern>
    </servlet-mapping>  
</web-app>

当我在web浏览器中单击submit代码时,它返回的是HTTP状态405 get方法不受支持;现在它返回的是HTTP状态500。

代码语言:javascript
复制
java.lang.NumberFormatException.

请给我正确的代码,以便它可以添加2个数字。

EN

回答 4

Stack Overflow用户

发布于 2018-07-05 01:22:11

您会得到一个NumberFormatException,因为如果String参数不能转换为整数,Integer.parseInt(String)就会抛出它。请参阅documentation

您需要将整数解析包装在try-catch中,并在不希望抛出异常时处理该异常,或者提前检查所提供的String是否真的是整数。

也要好好看看你的表单。你有

代码语言:javascript
复制
    <form action="add">
        Enter 1st number: <input type="text"  name=num1><br>
        Enter 2nd number: <input type="text"  name=num1><br>
        <input type="submit">
    </form>

这里有两次num1,当您试图在req中获取num2的参数时,它会给出null

将其更改为

代码语言:javascript
复制
    <form action="add">
        Enter 1st number: <input type="text"  name="num1"><br>
        Enter 2nd number: <input type="text"  name="num2"><br>
        <input type="submit">
    </form>

例如:

代码语言:javascript
复制
String num1 = req.getParameter("num1");
String num2 = req.getParameter("num2");

try {
    int i = Integer.parseInt(num1);
    int j = Integer.parseInt(num2);

    int k = i + j;
    // TODO do something with k
} catch (NumberFormatException e) {
    // log exception and / or notify user
    System.out.println("At least one invalid number in the given numbers: " + num1 + ", " + num2);
    e.printStackTrace();
    // show an error message to the user somewhere in your frontend
    req.setAttribute("error", "your error message");
}

编辑

正如评论中指出的,我选择捕获未检查的异常NumberFormatException,记录它并在请求中设置一个属性,以便向用户显示有意义的错误消息。

我之所以这样做,是因为在输入的数字中至少有一个不能解析为整数值的情况下,通过让未检查的异常冒泡,必须进一步处理它,以便向用户显示对用户有意义的内容,而不是一般的内部服务器错误消息。

使用上述逻辑的另一种方法是使用正则表达式来验证每个整数的输入。

这里没有提到的另一个验证注意事项是溢出的可能性。这可能在两种情况下发生:

用户输入一个大于Integer.MAX_VALUE.

  • The的整数用户输入两个大于Integer.MAX_VALUE.

的整数

在第一种情况下,例如

代码语言:javascript
复制
System.out.println(Integer.parseInt("" + (Integer.MAX_VALUE + 1)));

将打印-2147483648

在第二种情况下

代码语言:javascript
复制
int a = Integer.parseInt("" + (Integer.MAX_VALUE));
int b = Integer.parseInt("" + (Integer.MAX_VALUE));

System.out.println(a + b);

将打印-2。在这两种情况下,结果都应该是肯定的。

票数 1
EN

Stack Overflow用户

发布于 2018-07-05 01:27:10

看起来您正在解析请求参数"num2“,但在您的html中,您的输入只是"num1”重复。

因此,在servlet中,您请求的参数"num2“并不存在,它给出了一个空值,并给出了异常java.lang.NumberFormatException: null。

首先,您需要更正HTML输入,并鼓励您使用try-catch块来解析servlet中的那些输入值(以处理不同的情况:空值、非数值、浮点值等)。

票数 1
EN

Stack Overflow用户

发布于 2018-07-05 01:24:31

尝试添加三个或四个数字,而不是只添加两个。我想这会帮助你理解哪里出了问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51178357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档