这个程序是一个简单的淘宝程序:按名称搜索,并分页显示,一页显示10条
我用分层的方式做的,大体思路是从一个html传搜索关键字给Servlet,然后Servlet使用DAO在数据库中查找,并把结果保存在List中,最后把查找结果、当前页数、总页数用request传给JSP
我现在DAO自己是可以运行成功的:
如图所示,数据库中存储的是商品序号、名称和价格,为方便,名称全部以pen开头。查找关键字pen,发现共存在32条结果,并且成功显示出了前十条。
但是同样的代码在Servlet中,出现了错误:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at dao.BaseDAO.openCon(BaseDAO.java:9)
at dao.GoodsDAO.countByKeyword(GoodsDAO.java:14)
at servlets.PageQueryDO.doPost(PageQueryDO.java:45)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
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:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
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:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
java.lang.NullPointerException
at dao.GoodsDAO.countByKeyword(GoodsDAO.java:16)
at servlets.PageQueryDO.doPost(PageQueryDO.java:45)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
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:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
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:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Servlet的doPost方法是这样的:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String keyword = request.getParameter("keyword");
int page = Integer.parseInt(request.getParameter("page"));
GoodsDAO dao = new GoodsDAO();
int totalCount = dao.countByKeyword(keyword);//在数据库中查找共有几条相关结果
int totalPage = totalCount/10;//分页显示
if(totalCount%10>0)
{
totalPage+=1;
}
ArrayList<GoodsVO> result = new ArrayList<GoodsVO>();
int startIndex = 10*(page-1);
result = dao.returnResult(keyword,startIndex,10);//将数据库中查找到的结果放进result
request.setAttribute("result", result);//准备传值给jsp
request.setAttribute("totalPage", totalPage);
request.setAttribute("CurrentPage", 1);
String Page = "goods.jsp";
RequestDispatcher rd = request.getRequestDispatcher(Page);
rd.forward(request, response);
}
不知道具体是什么地方错误了?它显示是jdbc的问题,可是为什么DAO自己能运行出来……以前写别的类似程序也遇到过这个问题,重启eclipse就奇迹般地好了……
菜鸟第一次发帖,如有格式错误请谅解,请各位大神指正指导TAT