代码:
package cn.com.zwb.blog;import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.List;import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;public class GetBlogServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
           String id=request.getParameter("id");
           QueryRunner qr=DbHelper.getQueryRunner();
           List list=null;
try { String sql = "select id,title,content,createdtime from blog where id="+id;

         list=(List)qr.query(sql,new BeanListHandler(Blog.class));
      
Blog blog =(Blog)list.get(0);
                  request.setAttribute("blog", blog);
request.getRequestDispatcher("/displayBlog.jsp").forward(request,
response); 

} catch (SQLException e) {
e.printStackTrace();
}

}}
报错:
2009-9-14 22:07:24 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet GetBlogServlet threw exception
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at cn.com.zwb.blog.GetBlogServlet.doGet(GetBlogServlet.java:35)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
各位帮忙分析解决下

解决方案 »

  1.   

    我觉得是list有问题,根据错误提示,应该是越界由0位置引起的(肯list是null)
    只贴这一部分代码,看不出了
      

  2.   


            list=(List)qr.query(sql,new BeanListHandler(Blog.class));
            
            if(list!=null){
                   Blog blog =(Blog)list.get(0); 
            }
      

  3.   

    [Quote=引用 3 楼 soulx 的回复:]
    Java code
            list=(List)qr.query(sql,new BeanListHandler(Blog.class));if(list!=null){
                   Blog blog=(Blog)list.get(0); 
            }
    [/Quote
    试过还是不能解决问题,所以很郁闷。
      

  4.   

    测试了一下,问题好像出现在 String id=request.getParameter("id"); 这条语句中,这个id输出的是null,导致后面的list也为null了,有些搞不明白,接收输出的参数怎么会是null。
      

  5.   

    你在doPost方法里面要调用一下doGet方法
      

  6.   

    List对象为null的话,list=(List)qr.query(sql,new BeanListHandler(Blog.class));这句就报NullPointException;
    楼主的问题是由于,List对象的size为0,即一个元素都没有;而List对象的get(0)是获取第一个元素,
    因此会报越界。
      

  7.   

    你说得很对,我还想知道为什么String id=request.getParameter("id"); 这条语句中,这个id输出的是null,我想这个应该才是引起问题的关键
      

  8.   

    很郁闷啊 ,不知道怎么解决了 ,其他的Servlet和这个都一样接收参数,都能获得想要的值,就这个servlet获取到的值为null。有谁能给出个解决方案不
      

  9.   

    把代码都占出来 连数据库的 LIST获得的地方都沾出来看看 很快就能找到了
      

  10.   

    这是链接数据库的代码:
    public class DbHelper {

    public static QueryRunner getQueryRunner(){
    DataSource ds = null;
    try {
    //通过在context.xml文件,设定的数据源对象的名字,获取数据源对象
    Context context = new InitialContext();
    ds = (DataSource) context.lookup("java:/comp/env/jdbc/mydb");
    } catch (Exception e) {
    System.out.println("获取数据错误");
    }
    //DButils中的核心类,生成对象时传递数据源对象
    QueryRunner qr = new QueryRunner(ds);
    return qr;

    }
     
    这是Blog.java类的代码:
    package cn.com.zwb.blog;import java.util.Date;public class Blog {
    private int id;
    private String title;
    private String content;
    private Date createdTime;
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public String getTitle() {
    return title;
    }
    public void setTitle(String title) {
    this.title = title;
    }
    public String getContent() {
    return content;
    }
    public void setContent(String content) {
    this.content = content;
    }
    public Date getCreatedTime() {
    return createdTime;
    }
    public void setCreatedTime(Date createdTime) {
    this.createdTime = createdTime;
    }}希望能得到解决。
      

  11.   

    list=(List)qr.query(sql,new BeanListHandler(Blog.class)); 
    因为上面这句返回的是一个空的列表,你只要先判断一下它是否为空,不为空再取值就行了。
      

  12.   

    list=(List)qr.query(sql,new BeanListHandler(Blog.class));
    if(list!=null){ 
                  Blog blog=(Blog)list.get(0); 
            } 
    判断过了 ,但是为什么总是空呢? 还有 String id=request.getParameter("id"); 
    这里接收的id也是null,说是没传值,应该是怎么个传值法,就这个Servlet程序出现这样的问题,其他的也没出现这样的错误