在Servlet中对用户输入的数据执行数学计算时出现空指针异常

时间:2012-03-13 05:18:13

标签: java servlets nullpointerexception

我有一个html表单,我需要在servlet中获取表单数据,然后我需要对该数据进行一些数学运算。但是当我在执行数学运算时获得空指针异常。我无法弄清楚这一点。任何帮助,将不胜感激。谢谢..以下是我的一段代码。

import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigInteger;

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


public class InterestServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String amount=request.getParameter("wpamt");
        String time=request.getParameter("prd");
        int amt = Integer.parseInt(amount.trim());
        int period = Integer.parseInt(time.trim());

        int interest=(amt * period)/100;
        out.println("for"+period+"years the interest would be"+interest);
    }
}

4 个答案:

答案 0 :(得分:1)

String amount=request.getParameter("wpamt");
String time=request.getParameter("prd");
int amt = Integer.parseInt(amount.trim());
int period = Integer.parseInt(time.trim());

如果这是你得到NullPointerException的地方(没有堆栈跟踪和行号很难分辨),其中一个参数丢失(不是由客户发布)。

如果继续使用默认值是有意义的,您可以

int amt = amount != null ? Integer.parseInt(amount.trim()): 100;
int period = period != null ? Integer.parseInt(time.trim()) : 5;

请注意,如果参数包含的内容不是数字,您也会遇到异常。

答案 1 :(得分:0)

您的amounttime变量为空。

答案 2 :(得分:0)

如果您的响应中缺少其中一个参数wpamtprd,则getParameter方法会返回空引用,然后在虚拟机时抛出NPE尝试在空指针上调用trim()

要验证,请在方法的开头添加一些简单的调试代码:

System.out.println("Parameter names - Start");
for (Object param:request.getParameterMap().keySet()) {
  System.out.println(param);
}
System.out.println("Parameter names - End");

这会将所有参数的列表转储到您的控制台

答案 3 :(得分:0)

String amount=request.getParameter("wpamt");
    String time=request.getParameter("prd");

可能是

您的UI控件名称 wpamt和prd 未与jsp控件名称配对。

检查文本框名称与getParameter中使用的名称相同。