Подтвердить что ты не робот

Абонентская библиотека Apache Tomcat Native не была найдена на java.library.path

Я недавно занимался разработкой сервера и был запущен из простого учебника Ларс Фогель. Разработка сервлета и JSP с помощью Eclipse WTP.

Шаг за шагом согласуйте этот учебник:

  • установлен Eclipse Java EE Kepler;
  • установлен tomcat 7 на Ubuntu 12.04 - http://localhost:8080/ показывает правильную страницу tomcat;
  • Настройка среды выполнения tomcat в eclipse;
  • добавлен сервер tomcat для затмения;
  • создать DAO;
  • создан сервлет;
  • run = >

И тут я поймал следующее приглашение:

Sep 15, 2013 3:40:39 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Sep 15, 2013 3:40:42 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:com.filecounter' did not find a matching property.
Sep 15, 2013 3:40:43 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Sep 15, 2013 3:40:43 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Sep 15, 2013 3:40:43 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 5203 ms
Sep 15, 2013 3:40:43 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Sep 15, 2013 3:40:43 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.42
Sep 15, 2013 3:40:45 PM org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [171] milliseconds.
Sep 15, 2013 3:40:46 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Sep 15, 2013 3:40:46 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Sep 15, 2013 3:40:46 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 2882 ms

Вот содержимое папки tomcat/lib:

[email protected]:/usr/local/tomcat/apache-tomcat-7.0.42/lib$ ls -lg
total 6132
-rwxrwxrwx 1 nazar_art   15264 Jul  2 10:59 annotations-api.jar
-rwxrwxrwx 1 nazar_art   54142 Jul  2 10:59 catalina-ant.jar
-rwxrwxrwx 1 nazar_art  134215 Jul  2 10:59 catalina-ha.jar
-rwxrwxrwx 1 nazar_art 1581311 Jul  2 10:59 catalina.jar
-rwxrwxrwx 1 nazar_art  257520 Jul  2 10:59 catalina-tribes.jar
-rwxrwxrwx 1 nazar_art 1801636 Jul  2 10:59 ecj-4.2.2.jar
-rwxrwxrwx 1 nazar_art   46085 Jul  2 10:59 el-api.jar
-rwxrwxrwx 1 nazar_art  123241 Jul  2 10:59 jasper-el.jar
-rwxrwxrwx 1 nazar_art  599428 Jul  2 10:59 jasper.jar
-rwxrwxrwx 1 nazar_art   88690 Jul  2 10:59 jsp-api.jar
-rwxrwxrwx 1 nazar_art  177598 Jul  2 10:59 servlet-api.jar
-rwxrwxrwx 1 nazar_art    6873 Jul  2 10:59 tomcat-api.jar
-rwxrwxrwx 1 nazar_art  796527 Jul  2 10:59 tomcat-coyote.jar
-rwxrwxrwx 1 nazar_art  235411 Jul  2 10:59 tomcat-dbcp.jar
-rwxrwxrwx 1 nazar_art   77364 Jul  2 10:59 tomcat-i18n-es.jar
-rwxrwxrwx 1 nazar_art   48693 Jul  2 10:59 tomcat-i18n-fr.jar
-rwxrwxrwx 1 nazar_art   51678 Jul  2 10:59 tomcat-i18n-ja.jar
-rwxrwxrwx 1 nazar_art  124006 Jul  2 10:59 tomcat-jdbc.jar
-rwxrwxrwx 1 nazar_art   23201 Jul  2 10:59 tomcat-util.jar

Вот содержание каталогов .2013-09-15.log.

Update:

Вот учебник:
Установка Apache Tomcat Native на Linux Ubuntu 12.04

Update2:

Вот содержимое объекта доступа к данным:

public class FileDao {

  public int getCount() {
    int count = 0;
    // Load the file with the counter
    FileReader fileReader = null;
    BufferedReader bufferedReader = null;
    PrintWriter writer = null ; 
    try {
      File f = new File("FileCounter.initial");
      if (!f.exists()) {
        f.createNewFile();
        writer = new PrintWriter(new FileWriter(f));
        writer.println(0);
      }
      if (writer !=null){
        writer.close();
      }

      fileReader = new FileReader(f);
      bufferedReader = new BufferedReader(fileReader);
      String initial = bufferedReader.readLine();
      count = Integer.parseInt(initial);
    } catch (Exception ex) {
      if (writer !=null){
        writer.close();
      }
    }
    if (bufferedReader != null) {
      try {
        bufferedReader.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return count;
  }

  public void save(int count) throws Exception {
    FileWriter fileWriter = null;
    PrintWriter printWriter = null;
    fileWriter = new FileWriter("FileCounter.initial");
    printWriter = new PrintWriter(fileWriter);
    printWriter.println(count);

    // Make sure to close the file
    if (printWriter != null) {
      printWriter.close();
    }
  }

} 

А вот код сервлета:

public class FileCounter extends HttpServlet {
  private static final long serialVersionUID = 1L;

  int count;
  private FileDao dao;

  public void init() throws ServletException {
    dao = new FileDao();
    try {
      count = dao.getCount();
    } catch (Exception e) {
      getServletContext().log("An exception occurred in FileCounter", e);
      throw new ServletException("An exception occurred in FileCounter"
          + e.getMessage());
    }
  }

  protected void doGet(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
    // Set a cookie for the user, so that the counter does not increate
    // every time the user press refresh
    HttpSession session = request.getSession(true);
    // Set the session valid for 5 secs
    session.setMaxInactiveInterval(5);
    response.setContentType("text/plain");
    PrintWriter out = response.getWriter();
    if (session.isNew()) {
      count++;
    }
    out.println("This site has been accessed " + count + " times.");
  }

  public void destroy() {
    super.destroy();
    try {
      dao.save(count);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

} 

Я еще не имел web.xml.

Как решить эту проблему?

4b9b3361

Ответ 1

не найден на java.library.path:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

Нативный lib ожидается в одном из следующих местоположений

/usr/java/packages/lib/amd64
/usr/lib64
/lib64
/lib
/usr/lib

и не в

tomcat/lib

Файлы в tomcat/lib являются файлами jar и добавляются tomcat в classpath, чтобы они были доступны вашему приложению.

Собственный lib необходим tomcat для лучшей работы на платформе, на которой он установлен, и, следовательно, не может быть jar, для Linux это может быть файл .so, для окон это может быть файл .dll.

Просто загрузите собственную библиотеку для своей платформы и поместите ее в одно из мест, где ожидается, что tomcat будет.

Обратите внимание, что вам не требуется иметь эту библиотеку для целей разработки/тестирования. Tomcat отлично работает без него.

org.apache.catalina.startup.Catalina start INFO: запуск сервера в 2882 мс

ИЗМЕНИТЬ

Выход, который вы получаете, очень нормальный, это всего лишь некоторые результаты регистрации из tomcat, строка справа выше указывает, что сервер правильно запущен и готов к работе.

Если вы беспокоитесь о запуске своего сервлета, то после команды run on sever eclipse откроет окно браузера (встроенное (по умолчанию) или внешнее, зависит от вашей конфигурации). Если в браузере ничего не отображается, проверьте строку url браузера, чтобы узнать, был ли запрошен ваш сервлет.

Это должно быть что-то вроде этого

http://localhost:8080/<your-context-name>/<your-servlet-name>

РЕДАКТИРОВАТЬ 2

Попробуйте вызвать ваш сервлет, используя следующий URL

http://localhost:8080/com.filecounter/FileCounter

Также каждый веб-проект имеет web.xml, вы можете найти его в своем проекте под WebContent\WEB-INF.

Лучше настроить свои сервлеты там, используя servlet-name servlet-class и url-mapping. Это может выглядеть так:

  <servlet>
    <description></description>
    <display-name>File counter - My first servlet</display-name>
    <servlet-name>file_counter</servlet-name>
    <servlet-class>com.filecounter.FileCounter</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>file_counter</servlet-name>
    <url-pattern>/FileFounter</url-pattern>
  </servlet-mapping>

В динамическом веб-проекте eclipse имя контекста по умолчанию совпадает с именем вашего проекта.

http://localhost:8080/<your-context-name>/FileCounter

тоже будет работать.

Ответ 2

Относительно исходного вопроса, заданного в заголовке...

  • sudo apt-get install libtcnative-1

  • или если вы находитесь на RHEL Linux yum install tomcat-native

В документации указано, что вам нужно http://tomcat.apache.org/native-doc/

  • sudo apt-get install libapr1.0-dev libssl-dev
  • или RHEL yum install apr-devel openssl-devel

Ответ 3

Простое однолинейное решение для этого

Centos 7.4 x86_64 Tomcat 8.5.41

yum install tomcat-native