Сервлеты Java: сервер Tomcat находит классы и пакеты MongoDB - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь подключить базу данных MongoDB к Tomcat. Я загрузил три файла jar драйвера Java 3.10.1, mongodb-driver-3.10.1-javadoc.jar, mongodb-driver-3.10.1-sources.jar и mongodb-driver-3.10.1.jar. Я добавил их в WEB-INF\lib. Я также добавил ресурс MongoDB в META-INF\context.xml и ссылку на ресурс в WEB-INF\web.xml. Тем не менее, Tomcat говорит, что пакет com.mongodb не существует. У кого-нибудь есть исправление для этого?

Мой файл context.xml:

<Context reloadable="true">

    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <Resource name="mongodb/MyMongoClient"
          auth="Container"
          type="com.mongodb.MongoClient"
          closeMethod="close"
          factory="com.mongodb.client.jndi.MongoClientFactory"
          singleton="true"
          connectionString="mongodb://localhost:80"/>

</Context>

Мой файл web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <servlet>
        <servlet-name>Test</servlet-name>
        <servlet-class>Test</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Test</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>TestCheck</servlet-name>
        <servlet-class>TestCheck</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>TestCheck</servlet-name>
        <url-pattern>/testCheck</url-pattern>
    </servlet-mapping>

    <resource-ref>
        <res-ref-name>
            mongodb/MyMongoClient
        </res-ref-name>
        <res-type>
            com.mongodb.MongoClient
        </res-type>
        <res-auth>
            Container
        </res-auth>
    </resource-ref>

</web-app>

Мой файл Test.java:

import javax.servlet.annotation.*;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;

import java.io.IOException;


import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.BasicDBObject;

@WebServer("/test")
public class Test extends HttpServlet{

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {


        //Connect
        MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost:80"));


        DB database = mongoClient.getDB("testDB");
        DBCollection collection = database.getCollection("testCollection");

        DBObject testDoc = new BasicDBObject("_id", "This is a test");

        collection.insert(testDoc);

        //close
        mongoClient.close();

    }

}

И, наконец, вывод из командной строки после попытки компиляции:

Test.java:11: error: package com.mongodb does not exist
import com.mongodb.MongoClient;
                  ^
Test.java:12: error: package com.mongodb does not exist
import com.mongodb.MongoClientURI;
                  ^
Test.java:14: error: package com.mongodb does not exist
import com.mongodb.DB;
                  ^
Test.java:15: error: package com.mongodb does not exist
import com.mongodb.DBCollection;
                  ^
Test.java:16: error: package com.mongodb does not exist
import com.mongodb.DBObject;
                  ^
Test.java:17: error: package com.mongodb does not exist
import com.mongodb.BasicDBObject;
                  ^
Test.java:19: error: cannot find symbol
@WebServer("/test")
 ^
  symbol: class WebServer
Test.java:27: error: cannot find symbol
                MongoClient mongoClient = new MongoClient(new MongoClientURI("mo
ngodb://localhost:80"));
                ^
  symbol:   class MongoClient
  location: class Test
Test.java:27: error: cannot find symbol
                MongoClient mongoClient = new MongoClient(new MongoClientURI("mo
ngodb://localhost:80"));
                                              ^
  symbol:   class MongoClient
  location: class Test
Test.java:27: error: cannot find symbol
                MongoClient mongoClient = new MongoClient(new MongoClientURI("mo
ngodb://localhost:80"));
                                                              ^
  symbol:   class MongoClientURI
  location: class Test
Test.java:30: error: cannot find symbol
                DB database = mongoClient.getDB("testDB");
                ^
  symbol:   class DB
  location: class Test
Test.java:31: error: cannot find symbol
                DBCollection collection = database.getCollection("testCollection
");
                ^
  symbol:   class DBCollection
  location: class Test
Test.java:33: error: cannot find symbol
                DBObject testDoc = new BasicDBObject("_id", "Hello!");
                ^
  symbol:   class DBObject
  location: class Test
Test.java:33: error: cannot find symbol
                DBObject testDoc = new BasicDBObject("_id", "Hello!");
                                       ^
  symbol:   class BasicDBObject
  location: class Test
14 errors

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 08 мая 2019

Это не Tomcat, это компилятор. Чтобы добавить библиотеки MongoDB в Tomcat, необходимо иметь возможность запустить (веб) приложение, но для компиляции необходимо добавить их в путь к классам компилятора. Если вы используете javac напрямую, посмотрите переключатель -cp (или посмотрите здесь ), если вы используете какую-то систему сборки (например, Maven), посмотрите в ее документации, как добавить зависимость компиляции .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...