Servlet程序提示java.lang.ClassNotFoundException,求教

门口塘 2019-02-15 04:52:10
写了个数据库查询的Servlet程序,测试一直报错,但是单独写了java测试程序数据库又可以正常查询,实在分析不出什么原因。求教各位大神。以下为源码
Book.java
package cn.itcast.domain;

public class Book {
private String bid;
private String bname;
private double price;
private int category;
public String getBid() {
return bid;
}
public void setBid(String bid) {
this.bid = bid;
}
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getCategory() {
return category;
}
public void setCategory(int category) {
this.category = category;
}
@Override
public String toString() {
return "Book [bid=" + bid + ", bname=" + bname + ", price=" + price + ", category=" + category + "]";
}
}

BookDao.java

package cn.itcast.dao;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.itcast.domain.Book;
import cn.itcast.jdbc.utils.C3p0Utils;


public class BookDao {
private QueryRunner qr=new QueryRunner(C3p0Utils.getDataSource());
//查询所有
public List<Book>findAll(){
try {
String sql="select * from t_book";
return qr.query(sql,new BeanListHandler<Book>(Book.class));
}catch(SQLException e) {
throw new RuntimeException(e);
}
}
//按分类查询
public List<Book>findByCategory(int category){
try {
String sql="select * from t_book where category=?";
return qr.query(sql, new BeanListHandler<Book>(Book.class), category);
}catch(SQLException e) {
throw new RuntimeException(e);
}
}
}

BookServlet.java

package cn.itcast.chapter04.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.dao.BookDao;
import cn.itcast.domain.Book;

@WebServlet("/BookServlet")
public class BookServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String param=request.getParameter("category");
System.out.println(param);
BookDao dao=new BookDao();
System.out.println(dao.findAll());
List<Book>bookList=null;
//如果category参数不存在,表示查询所有
if(param==null||param.trim().isEmpty()) {
bookList=dao.findAll();
}else {
int category=Integer.parseInt(param);//把参数转换成int类型
//按分类查询图书
bookList=dao.findByCategory(category);
}
//把图书保存到request中
request.setAttribute("bookList", bookList);
request.getRequestDispatcher("/show.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}

C3p0Utils.java

package cn.itcast.jdbc.utils;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3p0Utils {
private static DataSource ds;
static {
ds=new ComboPooledDataSource();
}
public static DataSource getDataSource() {
return ds;
}
}

c3p0-config.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="user">root</property>
<property name="password">ding</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/chapter04</property>
<property name="checkoutTimeout">30000</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
<named-config name="a">
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">15</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/chapter04</property>
<property name="user">root</property>
<property name="password">ding</property>
</named-config>
</c3p0-config>

index_book.jsp浏览器显示页面

<%@page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path=request.getContextPath();
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath %>">
<title>My JSP 'index_book.jsp' starting page</title>
<meta content="no-cache" http-equiv="pragma">
<meta content="no-cache" http-equiv="cache-control">
<meta content="0" http-equiv="expires">
<meta content="keyword1,keyword2,keyword3" http-equiv="keywords">
<meta content="This is my page" http-equiv="description">
</head>
<body>
<a href="<%=request.getContextPath() %>/BookServlet">全部图书</a><br>
<a href="<%=request.getContextPath() %>/BookServlet?category=1">JavaSE分类</a><br>
<a href="<%=request.getContextPath() %>/BookServlet?category=2">JavaEE分类</a><br>
<a href="<%=request.getContextPath() %>/BookServlet?category=3">Java框架分类</a><br>
</body>
</html>

show.jsp

<%@page import="cn.itcast.domain.Book"%>
<%@page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'show.jsp' starting page</title>
<meta content="no-cache" http-equiv="pragma">
<meta content="no-cache" http-equiv="cache-control">
<meta content="0" http-equiv="expires">
<meta content="keyword1,keyword2,keyword3" http-equiv="keywords">
<meta content="This is my page" http-equiv="description">
<meta content="text/html;charset=utf-8" http-equiv="content-type">
<!--
<link rel="stylesheet" type="text/css" href="styles/css">
-->
</head>
<body>
<table boder="1" align="center" width="50%">
<tr>
<th>图书名称</th>
<th>图书单价</th>
<th>图书分类</th>
</tr>
<%
List<Book>list=(List)request.getAttribute("bookList");
for(Book b:list){
%>
<tr>
<td><%=b.getBname() %></td>
<td><%=b.getPrice() %></td>
<td>
<%if(b.getCategory()==1){ %>
<p style="color:red;">JavaSE分类</p>
<%}else if(b.getCategory()==2){ %>
<p style="color:blue;">JavaEE分类</p>
<%}else{ %>
<p style="color:green;">Java框架分类</p>
<%} %>
</td>
</tr>
<%} %>
</table>
</body>
</html>

运行错误信息:
严重: Servlet.service() for servlet [cn.itcast.chapter04.servlet.BookServlet] in context with path [/JDBCchapter04] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: org.apache.commons.dbutils.ResultSetHandler
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1928)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1771)
at cn.itcast.chapter04.servlet.BookServlet.doGet(BookServlet.java:21)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1137)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
...全文
2683 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
门口塘 2019-04-18
  • 打赏
  • 举报
回复
引用 5 楼 qq_43575457的回复:
我也这个问题能教教我吗,我看了好久好久了
你包的版本什么发来看看
yn_leopard 2019-02-16
  • 打赏
  • 举报
回复 1
将包commons-dbutils-1.3.jar(版本号可能不同)加入到WEB-INF下的lib文件夹中,重启tomcat。
门口塘 2019-02-16
  • 打赏
  • 举报
回复
引用 3 楼 yn_leopard 的回复:
将包commons-dbutils-1.3.jar(版本号可能不同)加入到WEB-INF下的lib文件夹中,重启tomcat。

重新新建了一个项目就好了,也不知道哪里错了。可能之前练习程序太多,哪里设置冲突了。前辈指导eclipse里面WEB项目哪里能单步调试的么?想单步测试看看,一直早不到
门口塘 2019-02-15
  • 打赏
  • 举报
回复
自己顶一下,请各位大牛们来围观下啊
门口塘 2019-02-15
  • 打赏
  • 举报
回复
不通过浏览器触发BookServlet程序的话,java测试程序如图是可以正常连接数据库读取数据的。通过index_book.jsp触发BookServlet程序的话,就会卡在BookDao dao=new BookDao()这句,在程序中第21行。

81,092

社区成员

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

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