2015-09-05 28 views
1

我是servlets新手。我已經在Ubuntu14.04上安裝了Tomcat7,並且服務運行良好。但它給servlet(http://localhost:8080/hello/HelloServlet)提供404(未找到)錯誤。應用程序中的html運行良好。 Tomcat管理工具也是如此。Ubuntu14.04的Tomcat7可以正常工作,但servlet的404錯誤

任何想法我做錯了什麼?

Tomcat的webapps結構: 的/ var/lib中/ tomcat7/web應用

webapps 
|-- ROOT 
    |-- hello 
    | |-- index.html 
    | `-- WEB-INF 
    |  |-- classes 
    |  | |-- HelloServlet.class 
    |  | `-- HelloServlet.java 
    |  |-- lib 
    |  `-- web.xml 
    |-- index.html 
    `-- META-INF 
     `-- context.xml 

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    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_2_5.xsd" 
    version="2.5"> 
<servlet> 
    <servlet-name>HelloServlet</servlet-name> 
    <servlet-class>HelloServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>HelloServlet</servlet-name> 
    <url-pattern>/HelloServlet</url-pattern> 
</servlet-mapping> 
</web-app> 

HelloServlet.java:

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import javax.servlet.annotation.WebServlet; 

@WebServlet(name="HelloServlet", urlPatterns={"/HelloServlet"}) 

public class HelloServlet extends HttpServlet{ 
    private String message; 
    public void init() throws ServletException{ 
     message = "Hello World"; 
    } 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println("<h1>" + message + "</h1>"); 
    } 
    public void destroy(){ 

    } 
} 
+1

您試圖訪問哪個網址? – Garry

+0

您是否嘗試過:http:// /hello/HelloServlet? – Lexandro

+0

http:// localhost:8080/hello/HelloServlet給出了404錯誤。對不起,我錯過了這個問題中的重要部分。 – sariDon

回答

0

最後我得到它運行:)

這是創建問題的目錄結構。應用程序目錄應該位於'webapps/ROOT'目錄之外。具體而言,只是把應用程序目錄直屬「的webapps」(似乎是Tomcat7和Ubuntu 14.04LTS具體情況)

校正結構:

webapps 
|-- ROOT 
`-- hello 
    |-- index.html 
    `-- WEB-INF 
     |-- classes 
     | |-- HelloServlet.class 
     | `-- HelloServlet.java 
     |-- lib 
     `-- web.xml 

以前的結構(有誤差) :

webapps 
|-- ROOT 
    |-- hello 
    | |-- index.html 
    | `-- WEB-INF 
    |  |-- classes 
    |  | |-- HelloServlet.class 
    |  | `-- HelloServlet.java 
    |  |-- lib 
    |  `-- web.xml 
    |-- index.html 
    `-- META-INF 
     `-- context.xml 
0

Java源文件不應位於/ WEB-INF文件夾中。 Servlet是一個普通的java文件,應該位於/ src/...文件夾中。另外,一旦你將類註解爲@WebServlet,你可以移除web.xml文件(儘管它有很多其他的用法,爲了簡化,可以忽略它用於'servlet-mapping')。

├───build 
│ └───classes 
│  └───pkg 
│    HelloServlet.class 
│ 
├───src 
│ └───pkg 
│   HelloServlet.java 
│ 
└───WebContent 
    ├───META-INF 
    │  MANIFEST.MF 
    │ 
    └───WEB-INF 
     └───lib 
+0

更改目錄結構將無濟於事。刪除java文件後,404仍然存在。這是一個簡單的'hello'程序來運行。所以主要是我不打算創建軟件包。現在我正在使用一個簡單的文本編輯器。一旦運行,我將轉到IDE並使用包裝和其他高級方法。 – sariDon

+0

包名稱的存在,只是因爲我試圖編譯和運行...後,它爲我工作,我顯示我的目錄結構。在Win7上測試。 – chenchuk

+0

謝謝你的努力。 – sariDon

0

您的java類文件位置錯誤,請將您的java類文件更改爲src文件夾。

+0

事實並非如此。請閱讀官方Tomcat文檔(https://tomcat.apache.org/tomcat-7.0-doc/appdev/deployment.html),其中明確指出:/ WEB-INF/classes/- 此目錄包含任何Java類文件(和相關資源),包括未組合到JAR文件中的servlet和非servlet類。 – sariDon

相關問題