我在 Eclipse 中创建了一个动态 Web 项目,它应该与数据库交互。我在项目中添加了数据库,并在相应的文件中添加了所有必要的文本以将数据库与 servlet 连接,但由于某种原因,servlet 无法与数据库通信。例如,有一个用于显示表格内容的选项。当我选择该选项时,不会显示表的内容,而是运行 try/catch 的 catch 部分内的代码。此外,还有 2 个选项涉及将数据输入表中。当我在 html 页面中输入数据并按提交时,没有任何反应。它应该向我显示数据输入成功。
我错过了什么?我做错了什么?
这是项目:http://www.mediafire.com/file/pwu46ohgd3qs0pr/PhoneBillsApp2.zip/file
我正在使用 Eclipse 2020-03 (4.15.0) 和 Tomcat 8
您需要检查tomcat服务器的日志文件是否有异常。日志通常位于
$CATALINA_HOME/logs
下
验证:
$CATALINA_HOME/conf/context.xml
应该包含类似的内容:<Resource name="jdbc/LiveDataSource"
auth="Container"
type="javax.sql.DataSource"
maxTotal="100"
maxIdle="30"
maxWaitMillis="10000"
username="xxx"
password="yyy"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"/>
context.xml
文件。检查它是否还包含“jdbc/LiveDataSource”programme
)insertStmt2 += "'seller'" + ",";
不是 `insertStmt2 += "卖家" + ",";为了避免 SQL 注入,我建议使用 PreparedStatement 而不是在 servlet 内部构造 SQL 命令。考虑使用一些 ORM,如 Hibernate、EclipseLink 等。
更新1 CATALINA_HOME 和 CATALINA_BASE 的位置可以从启动配置中找到
将日志文件重定向到自定义位置:打开启动配置/Apache Tomcat/Tomcat 8(或9)/Commons选项卡/输出文件
更新2 检查
$CATALINA_BASE/conf/context.xml
(在我的例子中为 C:\projects\workspaces\delme\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\conf\context.xml
)是否包含 jdbc/LiveDataSource
。
此外,当您在 servlet 代码中引发异常时,请记录堆栈跟踪,否则它将在日志文件中不可见,例如:
try {
// ...some code here...
} catch(Exception e) {
out.println("Problem with the database connection");
e.printStackTrace(); // or better use loggers
// private final Logger logger = Logger.getLogger(getClass().getName());
// logger.log(Level.SEVERE, "Problem with the database connection", e);
}
我修好了。我需要将服务器的时区设置为 UTC,并将“LiveDataSource”替换为数据库文件的名称。数据源现在看起来像这样:
<Resource name="jdbc/phoneBills"
auth="Container"
type="javax.sql.DataSource"
maxTotal="100"
maxIdle="30"
maxWaitMillis="10000"
username="root"
password="12345678"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC"/>