我的java文件如下
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文件如下
<!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文件如下
<?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。
java.lang.NumberFormatException.请给我正确的代码,以便它可以添加2个数字。
发布于 2018-07-05 01:22:11
您会得到一个NumberFormatException,因为如果String参数不能转换为整数,Integer.parseInt(String)就会抛出它。请参阅documentation。
您需要将整数解析包装在try-catch中,并在不希望抛出异常时处理该异常,或者提前检查所提供的String是否真的是整数。
也要好好看看你的表单。你有
<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。
将其更改为
<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>例如:
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.
Integer.MAX_VALUE.的整数
在第一种情况下,例如
System.out.println(Integer.parseInt("" + (Integer.MAX_VALUE + 1)));将打印-2147483648
在第二种情况下
int a = Integer.parseInt("" + (Integer.MAX_VALUE));
int b = Integer.parseInt("" + (Integer.MAX_VALUE));
System.out.println(a + b);将打印-2。在这两种情况下,结果都应该是肯定的。
发布于 2018-07-05 01:27:10
看起来您正在解析请求参数"num2“,但在您的html中,您的输入只是"num1”重复。
因此,在servlet中,您请求的参数"num2“并不存在,它给出了一个空值,并给出了异常java.lang.NumberFormatException: null。
首先,您需要更正HTML输入,并鼓励您使用try-catch块来解析servlet中的那些输入值(以处理不同的情况:空值、非数值、浮点值等)。
发布于 2018-07-05 01:24:31
尝试添加三个或四个数字,而不是只添加两个。我想这会帮助你理解哪里出了问题。
https://stackoverflow.com/questions/51178357
复制相似问题