我刚开始从事服务器开发,并且从Lars Vogel的简单教程开始。 使用Eclipse WTP开发Servlet和JSP。
逐步遵循 本教程:
http://localhost:8080/
DAO
在这里,我得到了下一个提示:
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文件夹的内容:
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
这是catalina.2013-09-15.log的内容。
更新:
这是教程: 在Linux Ubuntu 12.04上安装Apache Tomcat Native
更新2:
这是数据访问对象的内容:
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(); } } }
这里是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(); } } }
我还没有web.xml呢。
web.xml
如何解决这个麻烦?
在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都是jar文件,并由tomcat添加到中,classpath以便它们可用于您的应用程序。
jar
classpath
tomcat需要本机lib才能在其安装的平台上更好地运行,因此不能为jar,对于linux可以是.so文件,对于Windows可以是.dll文件。
.so
.dll
只需下载适合您平台的本机库,然后将其放置在tomcat期望的位置之一即可。
请注意,出于开发/测试目的,您不需要具有该库。如果没有它,Tomcat运行就很好。
org.apache.catalina.startup.Catalina启动信息:服务器在2882毫秒内启动
编辑
您得到的输出是非常正常的,这只是tomcat的一些日志记录输出,右上方的行表示服务器已正确启动并可以运行。
如果您在运行servlet时遇到麻烦,则在run on severeclipse命令打开浏览器窗口(嵌入式(默认)或外部,取决于您的配置)之后。如果浏览器上未显示任何内容,请检查浏览器的网址栏,以查看是否请求了servlet。
run on sever
应该是这样的
http://localhost:8080/<your-context-name>/<your-servlet-name>
编辑2
尝试使用以下网址调用您的servlet
http://localhost:8080/com.filecounter/FileCounter
另外,每个Web项目都有一个web.xml,您可以在项目中的下找到它WebContent\WEB-INF。
WebContent\WEB-INF
最好使用servlet-name servlet-class和在那里配置servlet url-mapping。它可能看起来像这样:
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动态Web项目中,默认上下文名称与您的项目名称相同。
http://localhost:8080/<your-context-name>/FileCounter
也会工作。