代码:
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)
各位帮忙分析解决下
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)
各位帮忙分析解决下
只贴这一部分代码,看不出了
list=(List)qr.query(sql,new BeanListHandler(Blog.class));
if(list!=null){
Blog blog =(Blog)list.get(0);
}
Java code
list=(List)qr.query(sql,new BeanListHandler(Blog.class));if(list!=null){
Blog blog=(Blog)list.get(0);
}
[/Quote
试过还是不能解决问题,所以很郁闷。
楼主的问题是由于,List对象的size为0,即一个元素都没有;而List对象的get(0)是获取第一个元素,
因此会报越界。
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;
}}希望能得到解决。
因为上面这句返回的是一个空的列表,你只要先判断一下它是否为空,不为空再取值就行了。
if(list!=null){
Blog blog=(Blog)list.get(0);
}
判断过了 ,但是为什么总是空呢? 还有 String id=request.getParameter("id");
这里接收的id也是null,说是没传值,应该是怎么个传值法,就这个Servlet程序出现这样的问题,其他的也没出现这样的错误