[英]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: 按照本教程一步一步 :
http://localhost:8080/
shows correct tomcat page; 在Ubuntu 12.04上安装tomcat 7 - http://localhost:8080/
显示正确的tomcat页面; DAO
; 创造DAO
; 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-class
和url-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
yum install apr-devel openssl-devel
或者RHEL yum install apr-devel openssl-devel
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.