Java空指针异常错误

Java空指针异常错误,java,servlets,Java,Servlets,每次单击指向其他页面的链接时,都会出现空指针异常错误,我不知道是什么问题 这是错误 05-Jul-2014 17:27:25.941 SEVERE [http-nio-8084-exec-14] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [itemServlet] in context with path [/servlet] threw exception java.l

每次单击指向其他页面的链接时,都会出现空指针异常错误,我不知道是什么问题

这是错误

05-Jul-2014 17:27:25.941 SEVERE [http-nio-8084-exec-14] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [itemServlet] in context with path [/servlet] threw exception
 java.lang.NullPointerException
    at com.etc.servlet.itemServlet.showProductList(itemServlet.java:172)
    at com.etc.servlet.itemServlet.doPost(itemServlet.java:94)
    at com.etc.servlet.itemServlet.doGet(itemServlet.java:67)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    at   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:301)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1015)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1575)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1533)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
下面是抛出NullPointerException的servlet的部分代码

public class itemServlet extends HttpServlet {

private memberDao usrdao = new memberDao();
private itemDao itmdao = new itemDao();
private noticeDao ntcdao=new noticeDao();
private articleDao atcdao=new articleDao();
private List<item> listItm;
private List<notice> listNtc;
private List<article> listAtc;
private List<member> listUsr;
private List<item> listpiece;
/**
 * Constructor of the object.
 */
public itemServlet() {
    super();
}

/**
 * Destruction of the servlet. <br>
 */
public void destroy() {
    super.destroy(); // Just puts "destroy" string in log
    // Put your code here
}

/**
 * The doGet method of the servlet. <br>
 *
 * This method is called when a form has its tag value method equals to get.
 * 
 * @param request the request send by the client to the server
 * @param response the response send by the server to the client
 * @throws ServletException if an error occurred
 * @throws IOException if an error occurred
 */
public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    doPost(request,response);
}

/**
 * The doPost method of the servlet. <br>
 *
 * This method is called when a form has its tag value method equals to post.
 * 
 * @param request the request send by the client to the server
 * @param response the response send by the server to the client
 * @throws ServletException if an error occurred
 * @throws IOException if an error occurred
 */
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    //1 中文处理
    request.setCharacterEncoding("gbk");
    response.setContentType("text/html;charset=gbk");

    //2 读取参数op
    String op = request.getParameter("op");

    //3 根据op调用不同的业务方法
    if("add".equals(op)){
        additem(request,response);//
    }else if("findall".equals(op)){
        showProductList(request,response);//展现所有商品
    }else if("finddetail".equals(op)){
        showProductDetail(request,response);//展现商品的细节
    }else if("addcart".equals(op)){
        addcart(request,response);//添加购物车
    }

}

    private void addcart(HttpServletRequest request,HttpServletResponse response)throws           ServletException, IOException//展示商品细节
{
    int itmID=Integer.parseInt(request.getParameter("itemID"));
    System.out.println("获取本页的商品编号"+itmID);
    item additem = itmdao.findbyitmmID(itmID);
    HttpSession session =request.getSession();
    if(request.getSession().getAttribute("listpiece")==null){

        listpiece=new ArrayList<item>();
        listpiece.add(additem);
        System.out.println("listpiece为空。将查到的商品作为单件加入listpiece的列表");
        session.setAttribute("listpiece", listpiece);           
    }
    else{
        List<item> listpiece=(List<item>)      request.getSession().getAttribute("listpiece");
        listpiece.add(additem);
        System.out.println("listpiece不为空,将查到的商品作为单件加入listpiece的列表");
        session.setAttribute("listpiece", listpiece);
    }
    if(listItm==null)
    {
        response.getWriter().print("查询失败!");
        return;                     
    }

    int itid = Integer.parseInt(request.getParameter("itemID"));

    for(item it:listItm)
    {
        if(itid==it.getItemID())//找出该对象
        {
            request.setAttribute("it", it);
              request.getRequestDispatcher("../itemdetail.jsp").forward(request, response);
            return;             
        }

    }
}

private void showProductDetail(HttpServletRequest request,HttpServletResponse     response)throws ServletException, IOException//展示商品细节
{
    if(listItm==null)
    {
        response.getWriter().print("查询失败!");
        return;                     
    }

    int itid = Integer.parseInt(request.getParameter("itemID"));

    for(item it:listItm)
    {
        if(itid==it.getItemID())//找出该对象
        {
            request.setAttribute("it", it);
            request.getRequestDispatcher("../itemdetail.jsp").forward(request, response);
            return;             
        }

    }
}

private void showProductList(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException//商品成列
{
    listItm = itmdao.findAll();
    listNtc = ntcdao.findSix();
    listAtc = atcdao.findTen();
    request.setAttribute("listNtc", listNtc);
    request.setAttribute("listAtc", listAtc);
    request.setAttribute("listItm", listItm);
    request.getRequestDispatcher("../showlist.jsp").forward(request, response);
}

private void additem(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException//添加一件新的商品
{
    //1 图片上传
    SmartUpload sm = new SmartUpload();
    sm.initialize(this.getServletConfig(), request, response);
    sm.setAllowedFilesList("jpg,jpeg,png,gif");

    try 
    {
        sm.upload();
        sm.save("/pic");//在pic路径下按原来的名字进行保存
    } catch (SmartUploadException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
        response.getWriter().print("上传失败!添加失败!");
        return;                     
    }

    //2 读取表单的其他数据,插入数据库

    String itemName = sm.getRequest().getParameter("itemName");
   float itemPrice = Float.parseFloat(sm.getRequest().getParameter("price"));
     float itemPrice = Float.parseFloat(sm.getRequest().getParameter("itemPrice"));     
     String itemStatus = sm.getRequest().getParameter("itemStatus");        
     String itemBrief = sm.getRequest().getParameter("itemBrief");      
     int typeID =Integer.parseInt(sm.getRequest().getParameter("typeID"));
     item newitem = new item(-1,itemName,itemPrice,itemStatus,itemBrief,typeID );

    if (!itmdao.add(newitem))
    {
        response.getWriter().print("添加失败!");
        return;         
    }
    request.getRequestDispatcher("itemServlet?op=findall").forward(request, response);
}

/**
 * Initialization of the servlet. <br>
 *
 * @throws ServletException if an error occurs
 */
public void init() throws ServletException {
    // Put your code here
}

}
public类itemServlet扩展了HttpServlet{
private memberDao usrdao=new memberDao();
private itemDao itmdao=new itemDao();
私有通知道ntcdao=新通知道();
私有articleDao atcdao=新articleDao();
私人名单;
私有列表列表NTC;
私人名单;
私有列表列表;
私有列表列表;
/**
*对象的构造函数。
*/
公共itemServlet(){
超级();
}
/**
*销毁servlet。
*/ 公共空间销毁(){ super.destroy();//只需将“destroy”字符串放入日志 //把你的代码放在这里 } /** *servlet的doGet方法。
* *当窗体的标记值方法等于get时,将调用此方法。 * *@param request客户端向服务器发送的请求 *@param response服务器向客户端发送的响应 *@在发生错误时抛出ServletException *@在发生错误时引发IOException */ public void doGet(HttpServletRequest请求、HttpServletResponse响应) 抛出ServletException、IOException{ doPost(请求、响应); } /** *servlet的doPost方法。
* *当窗体的标记值方法等于post时,将调用此方法。 * *@param request客户端向服务器发送的请求 *@param response服务器向客户端发送的响应 *@在发生错误时抛出ServletException *@在发生错误时引发IOException */ public void doPost(HttpServletRequest请求、HttpServletResponse响应) 抛出ServletException、IOException{ //1 中文处理 setCharacterEncoding(“gbk”); setContentType(“text/html;charset=gbk”); //2 读取参数op 字符串op=request.getParameter(“op”); //3 根据op调用不同的业务方法 如果(“添加”。等于(op)){ 附加项(请求、响应)// }else if(“findall.”等于(op)){ showProductList(请求、响应)//展现所有商品 }否则如果(“finddetail”。等于(op)){ showProductDetail(请求、响应)//展现商品的细节 }否则如果(“addcart”。等于(op)){ addcart(请求、响应)//添加购物车 } } 私有void addcart(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException//展示商品细节 { int itmID=Integer.parseInt(request.getParameter(“itemID”); System.out.println(“获取本页的商品编号"+itmID); 项目附加项=itmdao.findbyitmmID(itmID); HttpSession session=request.getSession(); if(request.getSession().getAttribute(“listpiece”)==null){ listpiece=新的ArrayList(); 列表项。添加(additem); System.out.println(“列表项为空。将查到的商品作为单件加入列表的列表"); session.setAttribute(“列表条”,列表条); } 否则{ List listpiece=(List)request.getSession().getAttribute(“listpiece”); 列表项。添加(additem); System.out.println(“列表项不为空,将查到的商品作为单件加入列表的列表"); session.setAttribute(“列表条”,列表条); } if(listItm==null) { response.getWriter().print(“查询失败!"); 返回; } int itid=Integer.parseInt(request.getParameter(“itemID”); 项目(it:listItm) { 如果(itid==it.getItemID())//找出该对象 { setAttribute(“it”,it); request.getRequestDispatcher(“../itemdetail.jsp”).forward(请求,响应); 返回; } } } 私有void showProductDetail(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException//展示商品细节 { if(listItm==null) { response.getWriter().print(“查询失败!"); 返回; } int itid=Integer.parseInt(request.getParameter(“itemID”); 项目(it:listItm) { 如果(itid==it.getItemID())//找出该对象 { setAttribute(“it”,it); request.getRequestDispatcher(“../itemdetail.jsp”).forward(请求,响应); 返回; } } } 私有void showProductList(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException//商品成列 { listItm=itmdao.findAll(); listNtc=ntcdao.findSix(); listAtc=atcdao.findTen(); setAttribute(“listNtc”,listNtc); setAttribute(“listAtc”,listAtc); setAttribute(“listItm”,listItm); request.getRequestDispatcher(“../showlist.jsp”).forward(请求,响应); } 私有void additem(HttpServletRequest请求,HttpServletResponse响应)引发ServletException,IOException//添加一件新的商品 { //1 图片上传 SmartUpload sm=新的SmartUpload(); 初始化(this.getServletConfig(),请求,响应); setAllowedFileList(“jpg,jpeg,png,gif”); 尝试 { sm.upload(); sm.save(“/pic”)//在照片路径下按原来的名字进行保存 }捕获(智能上载异常) { //TODO自动生成的捕捉块 e、 printStackTrace(); response.getWriter().print(“上传失败!添加失败!"); 返回; } //2 读取表单的其他数据,插入数据库 字符串itemName=sm.getRequest().getParameter(“itemName”); float itemPrice=float.parseFloat(sm.getRequest().getParameter(“price”); float itemPrice=float.parseFloat(sm.getRequest().getParameter(“itemPrice”); 字符串itemStatus=sm.getRequest().getParameter(“itemStatus”); 字符串itemBrief=sm.getRequest().getParameter(“itemBrief”);
public List<item> findAll() 
{
    System.out.println("itemDao的findAll被调用");
    List<item> list = new ArrayList();
    ResultSet rs =  DBUtils.doQuery("select * from itemTable  order by itemID desc");
    try {
        if (rs == null)
            return list;
        while (rs.next()) {
            item item = new item(rs.getInt("itemID"),
                    rs.getString("itemName"),      rs.getFloat("itemPrice"),rs.getString("itemStatus"),rs.getString("itembrief")
                    ,rs.getInt("typeID"));
            list.add(item);

        }
    } catch (Exception e) 
    {
        e.printStackTrace();
    }
    finally
    {
        try 
        {
            DBUtils.close(rs, rs.getStatement(), rs.getStatement()
                    .getConnection());
        } catch (Exception e2) 
        {
            e2.printStackTrace();
        }
    }
    return list;

}
  public List<notice> findSix() //用在首页的  查找前六条的公告
{
    System.out.println("noticeDao的findSix函数被调用");
    List<notice> list = new ArrayList();
    ResultSet rs =  DBUtils.doQuery("select * from notice order by ntID desc");
    try {
        if (rs == null)
            return list;
        int i=1;
        while (rs.next()&&i<=6) {
            notice notice = new notice(rs.getInt("ntID"),
                    rs.getString("ntTitle"),    rs.getString("ntTime"),rs.getString("ntText"),rs.getInt("adID"));
            list.add(notice);
            i++;
        }
    } catch (Exception e) 
    {
        e.printStackTrace();
    }
    finally
    {
        try 
        {
            DBUtils.close(rs, rs.getStatement(), rs.getStatement()
                    .getConnection());
        } catch (Exception e2) 
        {
            e2.printStackTrace();
        }
    }
    return list;
public List<article> findTen() //用在首页的  查找前10条的公告
{
    System.out.println("articleDao的findTen函数被调用");
    List<article> list = new ArrayList();
    ResultSet rs =  DBUtils.doQuery("select * from article order by atID desc");
    try {
        if (rs == null)
            return list;
        int i=1;
        while (rs.next()&&i<=10) {
            article article = new article(rs.getInt("atID"),
                    rs.getString("atTitle"), rs.getString("atPic"),rs.getString("atTime"),rs.getString("atText"),rs.getInt("adID"));
            list.add(article);
            i++;
        }
    } catch (Exception e) 
    {
        e.printStackTrace();
    }
    finally
    {
        try 
        {
            DBUtils.close(rs, rs.getStatement(), rs.getStatement()
                    .getConnection());
        } catch (Exception e2) 
        {
            e2.printStackTrace();
        }
    }
    return list;

}
listItm = itmdao.findAll();
listNtc = ntcdao.findSix();
listAtc = atcdao.findTen();
private List<item> listItm;
private List<notice> listNtc;
private List<article> listAtc;
private List<member> listUsr;
private List<item> listpiece;