2011-12-18 19:02:22 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at org.apache.jsp.article_jsp.tree(article_jsp.java:20)
at org.apache.jsp.article_jsp._jspService(article_jsp.java:80)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
报空指针异常,但找了很久,不知道如何解决,下面是代码
<%@page pageEncoding="GBK" %>
<%@page import="java.sql.*,java.io.*,com.lisong.bbs.*,java.util.*" %>
<%!
private void tree( Set<Article> articles ,Connection conn, int id, int  grade){
 String sql="select * form article where pid="+id;
 Statement stmt=DB.createstmt(conn);
 ResultSet rs=DB.executeQuery(stmt,sql);
   try{
   while (rs.next()){
        Article a=new Article();
        a.setId(rs.getInt("id"));
        a.setPid(rs.getInt("pid"));
        a.setRootid(rs.getInt("rootid"));
        a.setTitle(rs.getString("title"));
        a.setLeaf(rs.getInt("isleaf")==0?true:false);
        a.setPdate(rs.getDate("pdate"));
        a.setGrade(grade);
        articles.add(a);
        if(!a.isLeaf()){
        tree(articles,conn,a.getId(),grade+1);
        }
   }
   }catch(SQLException e){
        e.printStackTrace();
        }

 %>
 <%
  Set<Article> articles=new HashSet<Article>();
  Connection conn=DB.getconn();
  tree(articles,conn,0,0);
  DB.close(conn);
 %>
下面的代码是在html中的:
<%
for (Iterator<Article> it=articles.iterator(); it.hasNext();){ 
     Article a=it.next();
%>
还有一个包中的两个封装类
import java.util.Date;public class Article {
       private int id;
       
private int pid;
       private  int rootid;
       private  String title;
       private  String cont;
       private  Date pdate;
       private  boolean isLeaf;
       private  int grade;
    public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public int getPid() {
    return pid;
    }
    public void setPid(int pid) {
    this.pid = pid;
    }
    public int getRootid() {
    return rootid;
    }
    public void setRootid(int rootid) {
    this.rootid = rootid;
    }
    public String getTitle() {
    return title;
    }
    public void setTitle(String title) {
    this.title = title;
    }
    public String getCont() {
    return cont;
    }
    public void setCont(String cont) {
    this.cont = cont;
    }
    public Date getPdate() {
    return pdate;
    }
    public void setPdate(Date pdate) {
    this.pdate = pdate;
    }
    public boolean isLeaf() {
return isLeaf;
}
public void setLeaf(boolean isLeaf) {
this.isLeaf = isLeaf;
}
}
另一个包装类
   import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class DB {
public static Connection getconn(){
Connection conn=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bbs","root","root");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
  public static Statement createstmt(Connection conn){
  Statement stmt=null;
  try {
stmt=conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
return stmt;
  }
  public static ResultSet executeQuery(Statement stmt ,String sql){
  ResultSet rs=null;
  try {
rs=stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
  }
  public static void close(Connection conn){
  if(conn!=null){
  try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
  conn=null;
  }
  }
  public static void close(Statement stmt){
  if(stmt!=null){
  try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
  stmt=null;
  }
  }
  public static void close(ResultSet rs){
  if(rs!=null){
  try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
  rs=null;
  }
  }
}