doPost中的Nullpointer异常

时间:2011-08-15 19:14:17

标签: java servlets

我有以下表格:

        <form action="/AppStore/publish" method="post" accept-charset="ISO-8859-1">
        <fieldset>
            <legend>Do you have an Account already?</legend>
                <input type="radio" name="registred" value="yes"> Yes
                <input type="radio" name="registred" value="no"> No
        </fieldset>
        <fieldset>
            <legend>About your App</legend>
            <table>
                <tr>
                    <td><label for="AppDesc">Describe it:</label></td>
                    <td><input type="text" name="AppDesc" /></td>
                </tr>

                <tr>
                    <td><label for="AppName">Name:</label></td> 
                    <td><input type="text" name="AppName" /></td>
                </tr>
            </table>    
        </fieldset>
        <input type="submit" value="Submit" />
    </form>

我将此数据传递给Java Servlet,但每次我在getParameter(“AppDesc”)上获得Nullpointer异常,而getParameter(“AppName”)工作正常,我有什么不对?

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ServletContext context = getServletContext();
    RequestDispatcher dispetcher = context.getRequestDispatcher("/publishForm.jsp");
    List<String> errorMessages = new ArrayList<String>();

    //Validating form input...

    if(request.getParameter("AppName").toString().isEmpty())
    {
        errorMessages.add("Please type a valid Name for your App.");
    }

    if(request.getParameter("AppDesc").toString().isEmpty())
    {
        errorMessages.add("The Description of your App should contain at least 160 Characters.");
    }

5 个答案:

答案 0 :(得分:3)

您正在呼叫request.getParameter("...").toString()

request.getParameter()已经返回一个字符串引用,因此您实际上不需要调用toString()来将值作为字符串获取,但如果缺少参数,它将返回空引用 - 在调用toString()的情况会引发异常。您需要检查值是null还是空。例如:

String description = request.getParameter("AppDesc");
if (description == null || description.isEmpty())
...

当然,有些库可以检查“null或empty” - 例如,在Guava中你可以使用:

if (Strings.isNullOrEmpty(description))

答案 1 :(得分:1)

如果request.getParameter("AppDesc")null,那么

request.getParameter("AppDesc").toString().isEmpty()会抛出NullPointerException

为什么不将条件更改为:

   if(request.getParameter("AppDesc") == null ||   
      request.getParameter("AppDesc").toString().isEmpty()))
   {

答案 2 :(得分:0)

<td><input type="text" name="AppDescr" /></td>

您已将实际字段命名为AppDescr(请注意尾随“r”),但您正在为getParameter调用AppDesc(无“r”)。

编辑:或者不...你编辑了你的帖子并修复了它。这不是问题吗?

答案 3 :(得分:0)

必须是request.getParameter("AppDesc")返回空值的情况,导致链接的toString()生成NullPointerException。

此参数从未设置过; html中指定的名称是“AppDesr”(注意尾随'r')。

答案 4 :(得分:0)

您的问题标题为doGet,您的代码为doPost。这两者之间的区别可能解释了你的问题。 : - )