菜鸟求助,请问Servlet中DAO无法使用是出现了什么问题?

alice_0516 2017-12-04 12:44:26
这个程序是一个简单的淘宝程序:按名称搜索,并分页显示,一页显示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
...全文
440 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_43643991 2020-10-30
  • 打赏
  • 举报
回复
楼主问题解决了吗,我也是同一个问题
qq_34350475 2017-12-06
  • 打赏
  • 举报
回复
引用 6 楼 alice_0516 的回复:
解决方式:把mysql.jar和mysql-connection一起放到lib文件夹文件夹下,再进行导入。 但我还是不明白为什么我DAO能成功。如果数据库连接有问题,DAO又是怎么拿到数据的呢? 就很迷。
个人拙见:你自己测试dao的时候是在本地,你可能是build path直接导入的包,所以可以找得到,但是涉及到web,就得把包复制一份到webcontent下的lib里,只有在这里面的jar包服务器才能找得到,并不会自动去读你本地的jar库。
alice_0516 2017-12-05
  • 打赏
  • 举报
回复
解决方式:把mysql.jar和mysql-connection一起放到lib文件夹文件夹下,再进行导入。 但我还是不明白为什么我DAO能成功。如果数据库连接有问题,DAO又是怎么拿到数据的呢? 就很迷。
alice_0516 2017-12-04
  • 打赏
  • 举报
回复
引用 4楼自由自在_Yu 的回复:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 翻译一下,字面意思,not found class 没有找到这个class,缺少这个类所在的jar包
谢谢您 所以我觉得很奇怪,因为我的dao是成功的,也就是说和数据库的连接是成功的……为什么还会说mysql有问题呢?
自由自在_Yu 2017-12-04
  • 打赏
  • 举报
回复
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 翻译一下,字面意思,not found class 没有找到这个class,缺少这个类所在的jar包
alice_0516 2017-12-04
  • 打赏
  • 举报
回复
引用 1楼yannsPeng 的回复:
缺少这个jar包,mysql-connector-java.jar,另外这种问题可以直接百度来的比较快。
谢谢您 我百度过了,找不到相关问题 另外我的dao可以运行成功,也就是和mysql连接没有问题啊。以及mysql.jar我导入了
李德胜1995 2017-12-04
  • 打赏
  • 举报
回复
yannsPeng 2017-12-04
  • 打赏
  • 举报
回复
缺少这个jar包,mysql-connector-java.jar,另外这种问题可以直接百度来的比较快。

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧