Java doPost中的空指针异常

Java doPost中的空指针异常,java,servlets,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

我有以下表格:

        <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.");
    }
protectedvoiddopost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
ServletContext=getServletContext();
RequestDispatcher=context.getRequestDispatcher(“/publishForm.jsp”);
List errorMessages=new ArrayList();
//正在验证表单输入。。。
if(request.getParameter(“AppName”).toString().isEmpty())
{
errorMessages.add(“请为您的应用键入有效名称”);
}
if(request.getParameter(“AppDesc”).toString().isEmpty())
{
errorMessages.add(“应用程序的描述至少应包含160个字符。”);
}

您正在调用
request.getParameter(“…”).toString()

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

String description = request.getParameter("AppDesc");
if (description == null || description.isEmpty())
...
当然,有一些库可以检查“null或empty”-例如,在中,您可以使用:

if (Strings.isNullOrEmpty(description))

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


编辑:或者不…您编辑了您的帖子并修复了它。这不是问题所在吗?

必须是
request.getParameter(“AppDesc”)
返回空值,导致链接的
toString()
生成NullPointerException


从未设置此参数;html中指定的名称为“AppDesr”(注意后面的“r”)。

如果
request.getParameter(“AppDesc”)
null
,则

request.getParameter(“AppDesc”).toString().isEmpty()
将抛出一个
NullPointerException

为什么不将条件更改为:

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

您的问题标题是
doGet
,您的代码是
doPost
。这两者之间的差异可能会解释您的问题。:-

与Servlet和HTML代码中显示的内容不匹配。您确定正在运行您认为正在运行的代码吗?顺便说一句,期望非null参数是一个非常糟糕的设计。您还应该首先检查它是否非null。此外,
toString()
调用完全是多余的。它已经是
字符串了。
   if(request.getParameter("AppDesc") == null ||   
      request.getParameter("AppDesc").toString().isEmpty()))
   {