目录
在浏览器端运行应该javaweb小练习:jsp+javabean+servlet+数据库----注册功能实现,出现以下错误:
错误:
HTTP状态 500 - 内部服务器错误
类型 异常报告
消息 在 [32] 行处理 [/demo03/b.jsp] 时发生异常
描述 服务器遇到一个意外的情况,阻止它完成请求。
例外情况
org.apache.jasper.JasperException: 在 [32] 行处理 [/demo03/b.jsp] 时发生异常 29: e.printStackTrace(); 30: } 31: 32: List<User>users=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文件夹下
错误分析:
原来是我把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上查找解决办法】