好像出现了数组越界,但如果不加后面一句,能正常运行,数据库里面可以得到数据,加上后面那句话出现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);
}
}
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);
}
}
Servlet 跳转到另个Servlet,不知道是否是向LZ那样,需要使用重定向
HTTP Status 500 -这个是定向新页面的时候出现的错误.
这个类的第40行 对 params数组的 遍历的时候越界了String params[]={name,content,blog_id}; 你GetBlogServlet类里面在读取params数组内容的时候出问题了
你可以试试把所有的代码都去掉,只留下:
response.sendRedirect("http://localhost:8080/blog/servlet/GetBlogServlet?id="+blog_id);
这样也应该不报错。
说的很对你用的是sendRedirect 这个重定向之后request是重发一个新的request请求,改成forward请求RequestDispatcher dispatcher = request.getRequestDispatcher(strUrl);
dispatcher.forward(request, response);