简体   繁体   English

在java.library.path上找不到基于APR的Apache Tomcat Native库

[英]The APR based Apache Tomcat Native library was not found on the java.library.path

I'm newly at server development and have been started from easy tutorial by Lars Vogel. 我刚从服务器开发,并从Lars Vogel的简易教程开始。 Servlet and JSP development with Eclipse WTP . 使用Eclipse WTP进行Servlet和JSP开发

Step by step accord this tutorial: 按照本教程一步一步

  • installed Eclipse Java EE Kepler; 安装Eclipse Java EE Kepler;
  • installed tomcat 7 on Ubuntu 12.04 - http://localhost:8080/ shows correct tomcat page; 在Ubuntu 12.04上安装tomcat 7 - http://localhost:8080/显示正确的tomcat页面;
  • Setting up tomcat runtime environments into eclipse; 将tomcat运行时环境设置为eclipse;
  • added tomcat server to eclipse; 添加tomcat服务器到eclipse;
  • create DAO ; 创造DAO ;
  • created the Servlet; 创建了Servlet;
  • run => run =>

And here I caught next prompt: 在这里我抓住了下一个提示:

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

Here is content of tomcat/lib folder: 这是tomcat/lib文件夹的内容:

nazar_art@nazar-desctop:/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

Here is content of catalina.2013-09-15.log . 这是catalina.2013-09-15.log的内容

Update: 更新:

Here is tutorial: 这是教程:
Installing Apache Tomcat Native on Linux Ubuntu 12.04 在Linux Ubuntu 12.04上安装Apache Tomcat Native

Update2: UPDATE2:

Here is content of Data Access Object: 以下是数据访问对象的内容:

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();
    }
  }

} 

And here Servlet code: 而这里的Servlet代码:

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();
    }
  }

} 

I haven't had web.xml yet. 我还没有web.xml

How to solve this trouble? 如何解决这个麻烦?

not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 在java.library.path上找不到:/ usr / java / packages / lib / amd64:/ usr / lib64:/ lib64:/ lib:/ usr / lib

The native lib is expected in one of the following locations 原生lib预计位于以下位置之一

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

and not in 而不是

tomcat/lib

The files in tomcat/lib are all jar file and are added by tomcat to the classpath so that they are available to your application. tomcat/lib中的文件都是jar文件,并由tomcat添加到classpath以便它们可供您的应用程序使用。

The native lib is needed by tomcat to perform better on the platform it is installed on and thus cannot be a jar , for linux it could be a .so file, for windows it could be a .dll file. tomcat需要本机lib才能在安装的平台上运行得更好,因此不能成为jar ,对于linux,它可能是.so文件,对于windows,它可能是.dll文件。

Just download the native library for your platform and place it in the one of the locations tomcat is expecting it to be. 只需为您的平台下载本机库 ,并将其放在tomcat期望的位置之一。

Note that you are not required to have this lib for development/test purposes. 请注意,您不需要将此lib用于开发/测试目的。 Tomcat runs just fine without it. 没有它,Tomcat运行得很好。

org.apache.catalina.startup.Catalina start INFO: Server startup in 2882 ms org.apache.catalina.startup.Catalina启动INFO:服务器启动时间为2882毫秒

EDIT 编辑

The output you are getting is very normal, it's just some logging outputs from tomcat, the line right above indicates that the server correctly started and is ready for operating. 您获得的输出非常正常,它只是tomcat的一些日志输出,右上方的行表示服务器已正确启动并准备好运行。

If you are troubling with running your servlet then after the run on sever command eclipse opens a browser window (embeded (default) or external, depends on your config). 如果您在运行servlet时遇到麻烦,那么在run on sever命令之后eclipse会打开一个浏览器窗口(嵌入(默认)或外部,取决于您的配置)。 If nothing shows on the browser, then check the url bar of the browser to see whether your servlet was requested or not. 如果浏览器上没有显示任何内容,请检查浏览器的url栏以查看是否请求了servlet。

It should be something like that 它应该是那样的

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

EDIT 2 编辑2

Try to call your servlet using the following url 尝试使用以下URL调用您的servlet

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

Also each web project has a web.xml, you can find it in your project under WebContent\\WEB-INF . 此外,每个Web项目都有一个web.xml,您可以在WebContent\\WEB-INF下的项目中找到它。

It is better to configure your servlets there using servlet-name servlet-class and url-mapping . 最好使用servlet-name servlet-classurl-mapping在那里配置servlet。 It could look like that: 它可能看起来像这样:

  <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>

In eclipse dynamic web project the default context name is the same as your project name. 在eclipse动态Web项目中,默认上下文名称与项目名称相同。

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

will work too. 也会工作。

Regarding the original question asked in the title ... 关于标题中提出的原始问题......

  • sudo apt-get install libtcnative-1

  • or if you are on RHEL Linux yum install tomcat-native 或者如果你在RHEL Linux上yum install tomcat-native

The documentation states you need http://tomcat.apache.org/native-doc/ 文档说明您需要http://tomcat.apache.org/native-doc/

  • sudo apt-get install libapr1.0-dev libssl-dev
  • or RHEL yum install apr-devel openssl-devel 或者RHEL yum install apr-devel openssl-devel

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在java.library.path中找不到基于APR的Apache Tomcat Native库,它可以在生产环境中实现最佳性能 - The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path 在 java.library.path 中找不到库 - library not found in java.library.path 在java.library.path中找不到Jinput库 - Jinput library not found in java.library.path 为tomcat设置java.library.path - Set java.library.path for tomcat 安装了基于APR的Apache Tomcat Native库的不兼容版本1.1.12,而Tomcat需要1.1.17版本 - An incompatible version 1.1.12 of the APR based Apache Tomcat Native library is installed, while Tomcat requires version 1.1.17 在Java路径上找不到Tomcat本机库 - Tomcat native library not found on java path 找不到合适的本地库。 native.libpath。* vs java.library.path - No suitable native library found. native.libpath.* vs java.library.path 未找到 Java 本机文件,当本机文件明确位于 java.library.path 中时 - Java native file not found, when native file is clearly in java.library.path 从java.library.path专门加载Native Library - Loading Native Library from java.library.path specifically 无法加载 JNotify 本机库(java.library.path 中没有 jnotify) - Cannot load the JNotify native library (no jnotify in java.library.path)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM