2013-03-21 236 views
2

對不起,如果這是一個常見問題,但我會發瘋。 我開始使用JSP開發,使用在Ubuntu服務器上運行的Tomcat。我試圖運行我的第一個「Hello World」servlet,但沒有成功。Tomcat servlet映射錯誤404

我有服務器上的以下的東西:

  • webapps目錄爲:/var/lib/tomcat6/webapps/
  • webapps我創建了上下文根hello/目錄
  • hello/包含index.htmlWEB-INF/
  • WEB-INF包含web.xmlclasses/HelloServlet.class

這是index.html

<html> 
     <body> 
       Click to request the HelloServlet. 

       <form action = "/hello/helloworld" method = "get" > 
         <input type = "submit" value = "REQUEST" /> 
       </form> 
     </body> 
</html> 

這是WEB-INF/web.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<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>test</servlet-name> 
       <servlet-class>HelloServlet</servlet-class> 
     </servlet> 

     <servlet-mapping> 
       <servlet-name>test</servlet-name> 
       <url-pattern>/hello/helloworld</url-pattern> 
     </servlet-mapping> 

</web-app> 

終於這是HelloServlet源文件:

// HelloServlet.java, a simple Hello World servlet. 

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

public class HelloServlet extends HttpServlet 
{ 
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
     { 
       response.setContentType("text/html"); 
       PrintWriter outputStream = response.getWriter(); 

       outputStream.println("<html>"); 

       outputStream.println("<head>"); 
       outputStream.println("<title>Hello, World!</title>"); 
       outputStream.println("</head>"); 

       outputStream.println("<body>"); 
       outputStream.println("Hello, world! This is my first servlet!"); 
       outputStream.println("</body>"); 

       outputStream.println("</html>"); 

       outputStream.close(); 
     } 
} 

的問題是,僅在客戶端http://localhost/hello/(即index.html頁)起作用。如果我單擊表單提交按鈕,我會得到http 404錯誤(資源不可用)。

可能在servlet-mapping,表單和/或web.xml中有錯誤,但我真的需要幫助才能發現它。

+2

將包的名稱包含在''標記前。 'org.firstservletapp.HelloServlet' – Meherzad 2013-03-21 11:47:15

回答

1

將上下文根添加到jsp操作中,下面的更改可能適用於您。

<form action = "/hello/hello/helloworld" method = "get" > 
    <input type = "submit" value = "REQUEST" /> 
</form> 
+0

不幸的不是。我總是遇到404錯誤。 – eang 2013-03-21 19:26:04

+1

@ital在將您的url模式更改爲BalusC所說的內容之後,只用'action =「/ helloworld」'試試。 – 2013-03-22 03:00:52

4
<url-pattern>/hello/helloworld</url-pattern> 

你不應該包括在servlet的URL模式的上下文路徑。它已經相對於上下文根。

擺脫它。

<url-pattern>/helloworld</url-pattern> 

無關到具體的問題,在一個servlet編寫HTML代碼是一個非常不好的做法。對於那個JSP應該使用。另見our own Servlets wiki page which contains sane Hello World examples

+0

不幸的不是。我總是遇到404錯誤。也許我會在幾個時間使用JSP,謝謝你的提示。 – eang 2013-03-21 19:26:42

1

404可能導致的:

  1. 壞映射情況(可能已經包括額外的上下文回答以上或誤用通配符模式)
  2. 該servlet還沒有啓動(見啓動日誌在控制檯棧或者catalina文件,你會發現你的servlet失敗異常跟蹤)
0

我花了很多時間才弄明白這一點。在我的情況下,我得到404s,因爲我不明白,Tomcat URLs區分大小寫

例如爲:

http://server:8080/acme.MyPackage/DoStuff 

... 404!

http://server:8080/acme.myPackage/DoStuff 

...好。

瘋狂。