1
回答
jsp中奇怪的NoClassDefFoundError错误?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

封装了一个数据库连接释放的工具类。在业务逻辑service类中,调用数据库工具类,servece类中用void main测试函数测试读取数据库正常。然后,在jsp中,调用service类,却总是出现NoClassDefFoundError异常。错误提示的是找不到service类,但jsp中引用正常,编译也是通过的。怀疑是数据库工具类的问题。请大神帮忙看看。

数据库类代码如下:

import com.mchange.v2.c3p0.ComboPooledDataSource;
public class Database{
	private static String driver="com.mysql.jdbc.Driver";
	private static String url="jdbc:mysql://127.0.0.1:3306/news";
	private static String username="root";
	private static String password="root";
	private static String type="pooled";
	private static ComboPooledDataSource ds;
	private static ThreadLocal<Connection> connThread = new ThreadLocal<>();
	static {
		configDatasource();
	}
	private static void configDatasource(){
		try{
			//创建连接池实例
			ds=new ComboPooledDataSource();
			//设置驱动
			ds.setDriverClass(driver);
			//设置url
			ds.setJdbcUrl(url);
			//设置用户名
			ds.setUser(username);
			//设置密码
			ds.setPassword(password);
			//设置最大连接数
			ds.setMaxPoolSize(40);
			//设置最小连接数
			ds.setMinPoolSize(2);
			//设置初始连接数
			ds.setInitialPoolSize(10);
			//设置缓存Statement的最大数
			ds.setMaxStatements(180);
		}
		catch(PropertyVetoException e){
			e.printStackTrace();
		}
	}
	public synchronized static Connection getConnection() throws SQLException {
		
		Connection con = (Connection) connThread.get();
		if (con != null && !con.isClosed()) {
			return con;
		}
		
		//使用连接池新建数据库连接
		if("pooled".equalsIgnoreCase(type)){
			con=ds.getConnection();
			con.setAutoCommit(false);
			connThread.set(con);
			return con;
		}	
		//使用常规的数据库连接方式
		else if("normal".equalsIgnoreCase(type)){
			//直接使用JDBC驱动连接
			try {
			
				Class.forName(driver);
				con = DriverManager.getConnection(url, username,password);
				con.setAutoCommit(false);
				
				connThread.set(con);
				return con;
			} 
			catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	public static void commit() {
		Connection con = (Connection) connThread.get();
		try {
			con.commit();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public static void rollback() {
		Connection con = (Connection) connThread.get();
		try {
			con.rollback();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public synchronized static void releaseConnection(Connection connection) {

		try {
			if (connection != null && !connection.isClosed())
				connection.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		connection = null;}






举报
顶部