Tomcat не может прочитать мой файл context.xml - PullRequest
0 голосов
/ 29 августа 2018

У меня есть следующая проблема: У меня есть файл context.xml, который не может быть прочитан сервером ни путем добавления через @Resource (), ни с помощью класса (проверьте ниже). Я использую затмение, 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>

https://pastebin.com/fSZG2bJR

и у меня есть следующий класс для установки соединения с БД MySQL, здесь идет конструктор: https://pastebin.com/XKmBRAZX

вот конструктор, используемый в сервлете: https://pastebin.com/EmSzL5Y1

вот мой pom.xml: https://pastebin.com/umU6R2KF

my context.xml находится: C: \ Users \ Lukas \ затмение-рабочее пространство \ ParkingBookSystem \ SRC \ главная \ ресурсы \ META-INF \ context.xml

Мой файл .war (экспортированный по Eclipse) находится: C: \ Users \ имя_пользователя \ затмение-рабочее пространство \ ProjectName \ ProjectName.war

и это моя ошибка: enter image description here

Я потерял все идеи: (

Хорошо, я сделал обновления в соответствии с 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% уверен, что они: username = "sql2226123" password = "abcdefgh" URL = "JDBC: MySQL: //sql2.freemysqlhosting.net: 3306 / sql2226123"

правильно, я вошел в БД как администратор прямо сейчас (я изменил пароль в вопросе по стеку).

Хорошо, так как ошибка HTTP 500 исчезла, и в веб-браузере теперь у меня просто белый экран, а сервер Tomcat выдает следующую ошибку, поэтому я добавляю наиболее острую ошибку: java.sql.SQLException: Невозможно создать драйвер JDBC класса '' для соединительного URL 'null' в 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) at java.lang.Thread.run (неизвестный источник) Вызвано: java.sql.SQLException: нет подходящего драйвера в java.sql.DriverManager.getDriver (неизвестный источник) в org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory (BasicDataSource.java:2209) ... еще 29

1 Ответ

0 голосов
/ 30 августа 2018

Кажется, имя JNDI находится не в том месте, как должно быть внутри 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>
Атрибут

path в элементе Context предназначен для определения корневого контекста вашего приложения, другими словами, начального пути URL, например: если path="/ParkingLot", ваше приложение будет найдено в `http://localhost:8080/ParkingLot.

...