好像出现了数组越界,但如果不加后面一句,能正常运行,数据库里面可以得到数据,加上后面那句话出现HTTP Status 500 - ,但数据库中仍能得到数据,请高手指点一下
2010-1-3 16:49:29 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(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at com.oursky.blog.GetBlogServlet.doGet(GetBlogServlet.java:40)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
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:191)
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:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
package com.oursky.blog;import java.io.IOException;
import java.sql.SQLException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.dbutils.QueryRunner;public class CommentServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { request.setCharacterEncoding("UTF-8");
String method=request.getParameter("method");
if(method.equals("add")){
add(request,response);
}
}

public void add(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{

String name=request.getParameter("name");
String content=request.getParameter("content");
String blog_id=request.getParameter("blog_id");

if(name==null||name.equals("")){
name="匿名";
}

String sql="insert into comment(username,content,blog_id) values(?,?,?)";
String params[]={name,content,blog_id};
QueryRunner qr=DataHelper.getQueryRunner();
try {
qr.update(sql, params);
} catch (SQLException e) {
e.printStackTrace();
}
response.sendRedirect("http://localhost:8080/blog/servlet/GetBlogServlet?id="+blog_id);
}
}

解决方案 »

  1.   

      框架用多了Servlet 都忘了
      Servlet 跳转到另个Servlet,不知道是否是向LZ那样,需要使用重定向
      
      

  2.   

    试打印下name,content,blog_id,看看能不能取到。
      

  3.   

    代码贴全了吗,这应该不是一个问题,java.lang.IndexOutOfBoundsException: Index: 0, Size: 0这个应该是从数据库里面取的时候出现的错误,
    HTTP Status 500 -这个是定向新页面的时候出现的错误.
      

  4.   

    请把GetBlogServlet的代码贴出来
      

  5.   

    at com.oursky.blog.GetBlogServlet.doGet(GetBlogServlet.java:40) 这里面数组越界,需要GetBlogServlet的代码
      

  6.   

    at com.oursky.blog.GetBlogServlet.doGet(GetBlogServlet.java:40) 
    这个类的第40行 对 params数组的 遍历的时候越界了String params[]={name,content,blog_id}; 你GetBlogServlet类里面在读取params数组内容的时候出问题了
      

  7.   

    好像是,在response.sendRedirect()方法之前应该不能向response中写入内容。
    你可以试试把所有的代码都去掉,只留下:
    response.sendRedirect("http://localhost:8080/blog/servlet/GetBlogServlet?id="+blog_id); 
    这样也应该不报错。
      

  8.   


    说的很对你用的是sendRedirect 这个重定向之后request是重发一个新的request请求,改成forward请求RequestDispatcher dispatcher = request.getRequestDispatcher(strUrl);
    dispatcher.forward(request, response);