<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>Hello World</h1>
<br>
<%
for(String name: DatabaseFacade.getBooks()){
out.println(name + "<br/>");
}
%>
</body>
</html>
当该类在默认包中时,我得到:
org.apache.jasper.JasperException:无法为 JSP 编译类:
在 jsp 文件中的 [13] 行发生错误:[/index.jsp] DatabaseFacade 无法解析
10: <h1>Hello World</h1>
11: <br>
12: <%
13: for(String name: DatabaseFacade.getBooks()){
14: out.println(name + "<br/>");
15: }
16: %>
如果您将其转移到带有名称(例如,test)的包中,那么所谓的缺少驱动程序就会神奇地开始发誓:
java.sql.SQLException: 找不到适合 jdbc:postgersql://localhost:5432/postgres 的驱动程序
因此,我在开头添加了包的导入:
<%@ page import="test.DatabaseFacade" %>
数据库是10版本,ping正常,所有请求都是手动走的。Tomcat 9,JRE 8。我将带有基本驱动程序的 JAR 放在不同的文件夹中(正如其他人经常建议的那样)——同样的事情......
类代码以防万一:
package test;
import java.util.ArrayList;
import java.util.List;
import java.sql.*;
public class DatabaseFacade {
public static List<String> getBooks(){
List<String> result = new ArrayList<String>();
try(Connection connection =
DriverManager.getConnection("jdbc:postgersql://localhost:5432/postgres", "postgres", "2309")){
Statement statement = connection.createStatement();
ResultSet resultset = statement.executeQuery("SELECT * FROM books.books");
while(resultset.next()){
result.add(resultset.getString("name"));
}
}
catch(SQLException e){
e.printStackTrace();
}
return result;
}
}
UPD:在Win7上的Eclipse中运行;尝试了 Tomsat 8.5 而不是 9 - 都一样;在项目设置中将 JRE 更改为 JDK 也无济于事。有趣的是,较旧的软件(Eclipse Neon + Java 8 + WinXP/SP3 + Tomcat 7 + PostgreSQL 9.4)也有绝对相似的问题。
结果,所有这些废话只有在以“古老”方式重写类之后才起作用,而在try块中没有自动关闭资源(这是使用 Java-8 和 Tomcat-9 Carl 时的情况!!!)
从字面上看:“根本没有言语!”