为什么我会出现nullpointer错误?

时间:2015-12-14 16:05:31

标签: servlets nullpointerexception

要从browsert中检索cookie,我写了一个简单的函数dispcookies()。当我编译时,我得到nullpointerException,然后我只是从dispcookies()复制了该代码,然后放入processRequest()那段时间我没有收到错误原因。

HttpServletRequest request;
HttpServletResponse response;
PrintWriter out=null;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {        
    response.setContentType("text/html;charset=UTF-8");
    try {
        out = response.getWriter();
        String name=request.getParameter("name");
        String phone=request.getParameter("phone");    
        Cookie cname=new Cookie("name",name);
        Cookie cphone=new Cookie("phone",phone);            
        response.addCookie(cname);
        response.addCookie(cphone);
        out.println("here ok");
        dispcookies ();  
    }
    catch(Exception E)
    {
        out.println(E);
    }
}

void dispcookies () throws IOException
{
    Cookie[] cookies;
    Cookie cookie;
    cookies=request.getCookies();
    if(cookies!=null)
    {
        for(int i=0;i<cookies.length;i++)
        {
            cookie=cookies[i];
        out.println("cookie name"+cookie.getName());
        out.println("cookie name"+cookie.getValue());
        }
    }
    else
    {
    out.println("no foumd cooke ");
    }    
}

1 个答案:

答案 0 :(得分:0)

在void dispcookies (),您正在尝试访问属性请求的属性。 警告:此请求与processRequest方法的输入参数不同。 dispcookies对这些输入参数没有可见性,只能看到在类开头定义的属性HttpServletRequest,并且此属性尚未初始化,因此每次访问它都会导致null指针异常。

如果您想访问processRequest&#39;请求输入参数您必须更改dispcookies签名以接受此对象作为输入参数并使用它。

顺便说一下:

cookies=request.getCookies();
if(cookies!=null) { 
    for(int i=0;i ...

可能会导致空指针异常,因为Cookies[]不能为空但是为空,并且您正在访问其零位而不检查数组的空白。