tomcat 9 context.xml中的T omcat的JDBC URL问题

问题描述 投票:0回答:1

我在服务器(Ubuntu 18.04)上重新安装了tomcat 9。我正在尝试设置treeanno(https://github.com/nilsreiter/treeanno/releases)并部署github仓库中给出的Web应用程序存档(war)。我使用了tomcat管理器应用程序来部署war文件,然后按照以下说明将tomcat配置为使用相应的数据库资源:https://github.com/nilsreiter/treeanno/blob/master/INSTALL.md。根据微不足道的描述,应将其添加到tomcat安装的context.xml中:

<Resource name="treeanno/jdbc" auth="Container" type="javax.sql.DataSource"
           maxActive="100" maxIdle="30" maxWait="10000"
           username="USERNAME" password="PASSWORD" driverClassName="com.mysql.jdbc.Driver"
           url="DATABASE URL"/>

由于我是tomcat的新手,因此尚不清楚我需要设置哪些属性,尤其是“ url”。如果尝试访问该应用程序,则会收到以下错误,指出由于url不足,无法建立任何数据库连接:

    Type Exception Report

    Message An exception occurred processing [/index.jsp] at line [12]

    Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

org.apache.jasper.JasperException: An exception occurred processing [/index.jsp] at line [12]

9:      doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
10:         doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
11:         omit-xml-declaration="false" />
12: <sql:query var="rs" dataSource="treeanno/jdbc" sql="select id, username from treeanno_users">
13: </sql:query>
14: <html xmlns="http://www.w3.org/1999/xhtml">
15: <head>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:626)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:500)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Root Cause

javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "java.sql.SQLException: Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL 'jdbc:mysql:3306'"
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:666)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:270)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Root Cause

javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "java.sql.SQLException: Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL 'jdbc:mysql:3306'"
    org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.getConnection(QueryTagSupport.java:285)
    org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.doStartTag(QueryTagSupport.java:168)
    org.apache.jsp.index_jsp._jspx_meth_sql_005fquery_005f0(index_jsp.java:296)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:134)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

我已经知道该URL应该链接到包含密码和用户的数据库服务器,但这似乎不适用于此配置文件。

我在这里找到以下内容(https://ci.apache.org/projects/tomcat/tomcat9/docs/jndi-datasource-examples-howto.html):

url=jdbc:mysql://localhost:3306/javatest"/

但是调整端口等不起作用:url = jdbc:mysql:// localhost:8080 / TreeAnno-1.0.2“ /

现在,我该如何制定网址以允许应用程序连接到/启动MySQL数据库?

java url jdbc war tomcat9
1个回答
0
投票

有多种方法可以为Tomcat托管的Web应用程序配置JDBC数据连接。

Tomcat中的JNDI连接

在笔记中,您描述了如何使用添加到Tomcat Resource文件中的Tomcat context.xml条目。当我使用这种方法时,我还将一个条目添加到Web应用程序的web.xml文件中,该文件引用了Resource条目。例如:

<resource-ref>
    <res-ref-name>treeanno/jdbc</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

注意我的web.xml文件中的资源引用名称如何与Resource名称匹配。

完成此操作后,我现在可以在应用程序的Java代码中如下引用该数据源:

// ABSOLUTELY NOT PRODUCTION-READY CODE! JUST FOR TESTING!

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

...

Context initialContext = new InitialContext();
Context context = (Context) initialContext.lookup("java:comp/env");
DataSource ds = (DataSource) context.lookup("treeanno/jdbc");

java:comp/env是做什么的? See here

但是首先测试您的URL

在进行上述配置之前,您可能希望独立确保具有正确的JDBC连接URL(以及用户名和密码)。

如果您使用错误的URL或数据源不可用,则无济于事将无济于事。

如何测试?各种方式-例如:

使用DBeaver之类的工具。这将要求提供URL,用户和密码以连接到MySQL。

或编写一个单独的独立Java应用程序(使用main方法)和基本的JDBC connection

或任何其他只关注MySQL连接详细信息的方法,除了Tomcat配置复杂性之外。

而且正如@CHN指出的:如果您没有mysql JDBC jar文件,那么就没什么了。

就像我说的那样,这只是完成工作的一种方法-但这对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.