javax.servlet.ServletException: java.sql.SQLException: The url cannot be null和java.sql.SQLException错

目录

错误:

原因:idea无法读取db.properties文件 

解决办法:

错误分析:

 深入分析:

错误解决方法推荐:


在浏览器端运行应该javaweb小练习:jsp+javabean+servlet+数据库----注册功能实现,出现以下错误:

javax.servlet.ServletException: java.sql.SQLException: The url cannot be null和java.sql.SQLException错_第1张图片

错误:

HTTP状态 500 - 内部服务器错误


类型 异常报告

消息 在 [32] 行处理 [/demo03/b.jsp] 时发生异常

描述 服务器遇到一个意外的情况,阻止它完成请求。

例外情况

org.apache.jasper.JasperException: 在 [32] 行处理 [/demo03/b.jsp] 时发生异常

29:         e.printStackTrace();
30:     }
31: 
32:     Listusers=userDao.QueryAll();
33:     request.setAttribute("users_list",users);
34: %>
35: //转到c.jsp网页


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:610)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:489)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:596)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

根本原因。

javax.servlet.ServletException: java.sql.SQLException: The url cannot be null
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:655)
	org.apache.jsp.demo03.b_jsp._jspService(b_jsp.java:172)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:596)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:596)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

根本原因。

java.sql.SQLException: The url cannot be null
	java.sql/java.sql.DriverManager.getConnection(DriverManager.java:666)
	java.sql/java.sql.DriverManager.getConnection(DriverManager.java:230)
	jdbc.JdbcUtil.getConnection(JdbcUtil.java:34)
	dao.UserDao.QueryAll(UserDao.java:63)
	org.apache.jsp.demo03.b_jsp._jspService(b_jsp.java:149)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:596)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:596)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

):注意 主要问题的全部 stack 信息可以在 server logs 里查看

原因:idea无法读取db.properties文件 

解决办法:

 将配置文件db.properties 放在Resources文件夹下

javax.servlet.ServletException: java.sql.SQLException: The url cannot be null和java.sql.SQLException错_第2张图片

错误分析:

javax.servlet.ServletException: java.sql.SQLException: The url cannot be null和java.sql.SQLException错_第3张图片

原来是我把db.properties文件直接放在项目的src目录下,导致idea无法读取db.properties文件,我把db.properties文件放在resources目录下,项目就运行成功了。 

 深入分析:

ai:根据Maven工程的约定,`src/main/resources`目录是用于存储应用程序的资源文件,而且在构建过程中,这些资源文件会被自动复制到输出目录中(比如target/classes目录)。IDE中的项目也会遵循这一规范来构建项目。

因此,在将db.properties文件放在src目录下时,虽然能够读取该文件,但它不会被IDE自动复制到输出目录中,这意味着在运行程序时,db.properties文件无法找到,从而导致了错误。

而将db.properties文件放在resources目录下,可以确保IDE将其正确复制到输出目录中,且能够在运行时正确找到该文件。所以您才会发现将db.properties文件放在resources目录下,可以解决读取配置文件失败的问题。

希望这样解答能够帮到您。

db.properties文件应该放在src目录下的某个子目录中(例如config、resources等),这样更方便管理和维护。 


错误解决方法推荐:

考虑在getConnection()方法中打印日志来排查原因。修改JdbcUtil类中的getConnection()方法,添加一些日志打印 

public static Connection getConnection() throws Exception{
    Connection connection=null;
    try{
        //1-读取db.properties文件
        Properties properties=new Properties();
        InputStream in=JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");
        properties.load(in);

        //2-读取属性
        String driver=properties.getProperty("driver");
        String url=properties.getProperty("url");
        String username=properties.getProperty("username");
        String password=properties.getProperty("password");

        //3-注册驱动
        Class.forName(driver);

        //4-获取连接
        connection= DriverManager.getConnection(url,username,password);

        //5-日志打印连接信息
        System.out.println("连接信息: " + url + " " + username + " " + password);
    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException("数据库连接失败,请检查连接参数是否正确!");
    }
    return connection;
}

此时每次获取连接时,都会把连接的URL、用户名和密码输出到控制台。请再次执行您的代码,查看控制台输出,这有助于我们找到问题发生的根源。

添加日志后:

在getConnection()方法中打印日志后,修改JdbcUtil类中的getConnection()方法,添加一些日志打印后,

我运行了项目,出现了以下错误:

          类型 异常报告 消息 在 [27] 行处理 [/demo03/b.jsp] 时发生异常 描述 服务器遇到一个意外的情况,阻止它完成请求。 例外情况 org.apache.jasper.JasperException: 在 [27] 行处理 [/demo03/b.jsp] 时发生异常 24: UserDao userDao=new UserDao(); 25: //userDao.add(user); //实现插入 26: try { 27: userDao.add(user); 28: } catch (SQLException e) { 29: e.printStackTrace(); 30: } Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:610) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:499) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327) javax.servlet.http.HttpServlet.service(HttpServlet.java:596) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

根本原因。

java.lang.RuntimeException: 数据库连接失败,请检查连接参数是否正确! jdbc.JdbcUtil.getConnection(JdbcUtil.java:58) dao.UserDao.add(UserDao.java:15) org.apache.jsp.demo03.b_jsp._jspService(b_jsp.java:144) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:596) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327) javax.servlet.http.HttpServlet.service(HttpServlet.java:596) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 

就可以大致确定问题所在。

【通过这条日志:java.lang.RuntimeException: 数据库连接失败,请检查连接参数是否正确!

【可以去看一下项目里的db.properties文件是否配置在合适的目录下,从而导致idea可能无法读取。

我的db.properties`文件中的连接参数是正确。是配置所在的目录错了。

ai:根据错误提示,连接数据库失败是导致异常的根本原因。请确保数据库服务正常运行,且`db.properties`文件中的连接参数正确。

如果数据库服务已经启动并且连接参数正确,则请检查您的代码是否存在其他错误(如:SQL语句错误,数据类型转换错误等),或者检查数据库用户对表进行操作的权限是否正确。

【然后上CSDN上查找解决办法】 

你可能感兴趣的:(日常错误解决,servlet,java,apache)