這個程式是一個簡單的淘寶程式:按名稱搜索,并分頁顯示,一頁顯示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
uj5u.com熱心網友回復:
缺少這個jar包,mysql-connector-java.jar,另外這種問題可以直接百度來的比較快。uj5u.com熱心網友回復:



uj5u.com熱心網友回復:
謝謝您我百度過了,找不到相關問題
另外我的dao可以運行成功,也就是和mysql連接沒有問題啊。以及mysql.jar我匯入了
uj5u.com熱心網友回復:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver翻譯一下,字面意思,not found class 沒有找到這個class,缺少這個類所在的jar包
uj5u.com熱心網友回復:
謝謝您所以我覺得很奇怪,因為我的dao是成功的,也就是說和資料庫的連接是成功的……為什么還會說mysql有問題呢?
uj5u.com熱心網友回復:
解決方式:把mysql.jar和mysql-connection一起放到lib檔案夾檔案夾下,再進行匯入。但我還是不明白為什么我DAO能成功。如果資料庫連接有問題,DAO又是怎么拿到資料的呢?
就很迷。
uj5u.com熱心網友回復:
個人拙見:你自己測驗dao的時候是在本地,你可能是build path直接匯入的包,所以可以找得到,但是涉及到web,就得把包復制一份到webcontent下的lib里,只有在這里面的jar包服務器才能找得到,并不會自動去讀你本地的jar庫。
uj5u.com熱心網友回復:
樓主問題解決了嗎,我也是同一個問題轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/196072.html
標籤:Eclipse
下一篇:周末了
