Tomcat 无法读取我的 context.xml 文件
Tomcat is unable to read my context.xml file
我有以下问题:
我有 context.xml 文件,服务器无法通过 @Resource() 注入或使用 class (检查下面)来读取该文件。我正在使用 Eclipse,Tomcat 9.0。我有 .war 文件由 eclipse 导出并放在我的项目中的目标文件夹中。这是代码。
Context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Context path="jdbc/ParkingSystem">
<Resource name="sql2226123"
auth="Container" type="javax.sql.DataSource"
maxActive="20" maxIdle="5" maxWait="10000"
username="sql2226123" password="abcdefgh"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://sql2.freemysqlhosting.net:3306/sql2226123"/>
</Context>
我有以下 class 来设置与 MySQL DB 的连接,这里是构造函数:
https://pastebin.com/XKmBRAZX
这是 servlet 中使用的构造函数:
https://pastebin.com/EmSzL5Y1
这是我的 pom.xml:
https://pastebin.com/umU6R2KF
我的 context.xml 位于:
C:\Users\lukas\eclipse-workspace\ParkingBookSystem\src\main\resources\META-INF\context.xml
我的 .war 文件(由 eclipse 导出)位于:
C:\Users\userName\eclipse-workspace\ProjectName\ProjectName.war
这是我的错误:
我已经失去了所有的想法:(
好的,我已经根据 apache 进行了更新。org/tomcat-9.0
现在我的 web.xml 看起来像这样:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<description>ParkingBookSystem</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>/ParkingBookSystem</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
我的 context.xml 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Context>
<Resource
name="/ParkingBookSystem"
auth="Container"
type="javax.sql.DataSource"
maxTotal="20"
maxIdle="5"
maxWaitMillis="10000"
username="sql2226123"
password="xxxxxxxx"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://sql2.freemysqlhosting.net:3306/sql2226123"
/>
</Context>
现在错误消失了,但只显示白色屏幕,就好像没有连接到 MySQL 数据库一样,尽管我 100% 确定这些:
用户名="sql2226123" 密码="abcdefgh"
url="jdbc:mysql://sql2.freemysqlhosting.net:3306/sql2226123"
是正确的我现在以管理员身份登录数据库(我已经更改了堆栈问题中的密码)。
好的,因为 HTTP 500 错误消失了,现在在网络浏览器上我只有白屏,Tomcat 服务器抛出以下错误,所以我添加了最严重的错误:
java.sql.SQLException: 无法为连接 URL 'null' 创建 class '' 的 JDBC 驱动程序
在 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2224)
在 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2104)
在 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1563)
在 com.pbs.web.jdbc.ParkingBookSystem.BookDbUtil.doesBookExist(BookDbUtil.java:91)
在 com.pbs.web.jdbc.ParkingBookSystem.BookControllerServlet.addBook(BookControllerServlet.java:117)
在 com.pbs.web.jdbc.ParkingBookSystem.BookControllerServlet.doGet(BookControllerServlet.java:70)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(来源不明)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源)
在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
在 java.lang.Thread.run(来源不明)
原因:java.sql.SQLException:没有合适的驱动程序
在 java.sql.DriverManager.getDriver(来源不明)
在 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2209)
... 还有 29 个
似乎 JNDI 名称不在正确的位置,因为它应该在 inside Resource
元素上,但它在 Context
one
上
<Context>
<Resource
name="jdbc/ParkingSystem"
auth="Container"
type="javax.sql.DataSource"
maxActive="20"
maxIdle="5"
maxWait="10000"
username="sql2226123"
password="abcdefgh"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://sql2.freemysqlhosting.net:3306/sql2226123"
/>
</Context>
Context
元素上的 path
属性用于定义应用程序的上下文根,换句话说,URL 起始路径,例如:如果 path="/ParkingLot"
,您的应用程序将在 `http://localhost:8080/ParkingLot.
下找到
我有以下问题: 我有 context.xml 文件,服务器无法通过 @Resource() 注入或使用 class (检查下面)来读取该文件。我正在使用 Eclipse,Tomcat 9.0。我有 .war 文件由 eclipse 导出并放在我的项目中的目标文件夹中。这是代码。
Context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Context path="jdbc/ParkingSystem">
<Resource name="sql2226123"
auth="Container" type="javax.sql.DataSource"
maxActive="20" maxIdle="5" maxWait="10000"
username="sql2226123" password="abcdefgh"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://sql2.freemysqlhosting.net:3306/sql2226123"/>
</Context>
我有以下 class 来设置与 MySQL DB 的连接,这里是构造函数: https://pastebin.com/XKmBRAZX
这是 servlet 中使用的构造函数: https://pastebin.com/EmSzL5Y1
这是我的 pom.xml: https://pastebin.com/umU6R2KF
我的 context.xml 位于: C:\Users\lukas\eclipse-workspace\ParkingBookSystem\src\main\resources\META-INF\context.xml
我的 .war 文件(由 eclipse 导出)位于: C:\Users\userName\eclipse-workspace\ProjectName\ProjectName.war
这是我的错误:
我已经失去了所有的想法:(
好的,我已经根据 apache 进行了更新。org/tomcat-9.0 现在我的 web.xml 看起来像这样:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<description>ParkingBookSystem</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>/ParkingBookSystem</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
我的 context.xml 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Context>
<Resource
name="/ParkingBookSystem"
auth="Container"
type="javax.sql.DataSource"
maxTotal="20"
maxIdle="5"
maxWaitMillis="10000"
username="sql2226123"
password="xxxxxxxx"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://sql2.freemysqlhosting.net:3306/sql2226123"
/>
</Context>
现在错误消失了,但只显示白色屏幕,就好像没有连接到 MySQL 数据库一样,尽管我 100% 确定这些: 用户名="sql2226123" 密码="abcdefgh" url="jdbc:mysql://sql2.freemysqlhosting.net:3306/sql2226123"
是正确的我现在以管理员身份登录数据库(我已经更改了堆栈问题中的密码)。
好的,因为 HTTP 500 错误消失了,现在在网络浏览器上我只有白屏,Tomcat 服务器抛出以下错误,所以我添加了最严重的错误: java.sql.SQLException: 无法为连接 URL 'null' 创建 class '' 的 JDBC 驱动程序 在 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2224) 在 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2104) 在 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1563) 在 com.pbs.web.jdbc.ParkingBookSystem.BookDbUtil.doesBookExist(BookDbUtil.java:91) 在 com.pbs.web.jdbc.ParkingBookSystem.BookControllerServlet.addBook(BookControllerServlet.java:117) 在 com.pbs.web.jdbc.ParkingBookSystem.BookControllerServlet.doGet(BookControllerServlet.java:70) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:634) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(来源不明) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(来源不明) 原因:java.sql.SQLException:没有合适的驱动程序 在 java.sql.DriverManager.getDriver(来源不明) 在 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2209) ... 还有 29 个
似乎 JNDI 名称不在正确的位置,因为它应该在 inside Resource
元素上,但它在 Context
one
<Context>
<Resource
name="jdbc/ParkingSystem"
auth="Container"
type="javax.sql.DataSource"
maxActive="20"
maxIdle="5"
maxWait="10000"
username="sql2226123"
password="abcdefgh"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://sql2.freemysqlhosting.net:3306/sql2226123"
/>
</Context>
Context
元素上的 path
属性用于定义应用程序的上下文根,换句话说,URL 起始路径,例如:如果 path="/ParkingLot"
,您的应用程序将在 `http://localhost:8080/ParkingLot.