1.java.lang.NoClassDefFoundError: Could not initialize class
代码:
private static String url;
private static String user;
private static String password;
private static String driver;
static {
try {
//1.创建集合类对象
Properties pro = new Properties();
//1.2利用CLassLoader对象获取配置文件路径
Class c = JDBCUtils.class;
ClassLoader cl = c.getClassLoader();
URL res = cl.getResource("jdbc.properties");
String path = res.getPath();
System.out.println(path);
//2.加载文件进内存
pro.load(new FileReader(path));
//3.获取属性并赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
//4.注册驱动
driver = pro.getProperty("driver");
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
想封装一个注册驱动的静态代码块,报错原因:
在第四部注册驱动时将 Class.forName(driver);写在了 driver = pro.getProperty(“driver”);的上面,但因为driver是全局变量,所以此处没有报错,但是此时的值是null,并没有获取到配置文件里的driver。还是需要细心啊。静态代码块不能向外抛异常
2.C3P0连接池报错:连接超时
报错原因:jdbc:mysql://localhost:3306/数据库名称?serverTimezone=Asia/Shanghai
在数据库名称后面少了一点配置信息
参考:link.
3.严重: testWhileIdle is true, validationQuery not set报错
问题:使用Druid数据库连接池时报错,还是properties配置文件
参考:link
4.关于表单提交中action所指向Servlet路径404NOT Found
代码:
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 java.io.IOException;
@WebServlet("/demo3")
public class Demo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
System.out.println("doget");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
System.out.println("dopost");
}
}
html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="demo3" method="post">
<input name ="username">
<input type="submit" value="提交">
</form>
</body>
</html>
教学视频中html里面,action的值是"/demo3",此时提交表单后,浏览器打开的默认路径为:http://localhost:8080/demo3
但我正确的路径应该为:http://localhost:8080//Tomcat_Servlet_2_war_exploded/demo3
然后不加“/”之后就对了,目前的理解是:不加斜杠就代表了直接从当前路径加载。这个报错也找了很久,网上大多是用的web.xml配置
5.Druid+Spring JDBC连接数据库时报错
java.lang.NullPointerException: inStream parameter is null
Caused by: java.lang.IllegalArgumentException: Property ‘dataSource’ is required
找了很久的错,最后发现报错原因竟然是配置文件(druid2.properties)的路径放错了
参考大佬:link.
报错目录:
改正后:
6.在servlet里面new 对象时报错
1.报错场景:
使用servlet+springjdbc+html练习一个用户登录界面。(具体在另一篇博客记录)
2.报错页面信息
HTTP Status 500 – Internal Server Error
Type Exception Report
Message Servlet execution threw an exception
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause
java.lang.NoClassDefFoundError: org/springframework/dao/DataAccessException
com.cixa.web.servlet.LoginServlet.doPost(LoginServlet.java:27)
javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause
java.lang.ClassNotFoundException: org.springframework.dao.DataAccessException
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1308)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1136)
com.cixa.web.servlet.LoginServlet.doPost(LoginServlet.java:27)
javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Note The full stack trace of the root cause is available in the server logs.
Apache Tomcat/8.5.70
3.找错过程
这个错找了很久很久很久,刚开始参考的文章是《WebServlet 中不能注入Bean对象》,说的是复写init方法,然后我发现里面涉及的jar文件都没有,也没学过那个变量,放弃。
然后又以为是类加载不进去,又去设置里设置Build Automatically.
还是不行,最后参考: link.
搬运一下做个记录:
解决:清除idea缓存
File–>Invalidate Cashes
检查jar包所在的lib是不是在web-inf下,多一个s或者-变成_都不行
这样然后就解决了。。。。
4.其他参考文章:
java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError区别
link.