2012-06-16 77 views
0

我用eclise創建這樣一個servlet:HTTP狀態404 - Servlet的....不可

package hello; 
public class NewServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    System.out.println("doPost"); 

    String name = request.getParameter("textField"); 

    response.setContentType("text/html"); 
    PrintWriter pw = response.getWriter(); 
    pw.print("<html><head></head><body><center>"); 
    pw.print("Hello " + name + "!"); 
    pw.print("</center></body></html>"); 
} 
} 

,並像一個HTML文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>Insert title here</title> 
</head> 
<body> 
<form method="post" action="NewServlet"> 
    <p align="center"> 
     <font>Input some text</font> <br> <input type="text" 
      name="textFiled"> <br> <input type="submit" 
      value="submit"> <br> 
    </p> 
</form> 
</body> 
</html> 

當我運行Servlet ,遇到了一個錯誤:

HTTP Status 404 - Servlet NewServlet is not available 

-------------------------------------------------------------------------------- 

type Status report 

message Servlet NewServlet is not available 

description The requested resource (Servlet NewServlet is not available) is not available. 

我檢查的文件夾:WEB-INF或者任何文件夾,無法看到文件的.class

這是如何造成的,我該如何解決?

回答

0

Servlets需要註冊並映射到特定的URL模式,以便能夠通過HTTP請求執行它們。考慮到你的HTML代碼,你似乎期望servlet監聽/NewServlet的URL。

如果你使用的是Tomcat 7,那麼只要把@WebServlet註解放在類正是URL模式:

@WebServlet("/NewServlet") 
public class NewServlet extends HttpServlet { 
    // ... 
} 

如果你仍然在Tomcat 6或以上出於某種原因,那麼你需要用老式的方式來做。一個具體的例子可以在our servlets wiki page中找到。

Eclipse將不會在項目瀏覽器中顯示.class文件。它只會在導航器中顯示在/build文件夾中。但現在不應該擔心這個問題。

1

您應該檢查你的IDE WEB-INF文件夾,並在web.xml文件映射你的servlet

 <servlet> 
       <servlet-name>NewServlet</servlet-name> 
       <servlet-class>NewServlet</servlet-class> 
     </servlet> 
     <servlet-mapping> 
       <servlet-name>NewServlet</servlet-name> 
       <url-pattern>/NewServlet</url-pattern> 
     </servlet-mapping> 

確保該映射處理得當,也是你的servlet不是在任何包或文件夾,如果所以然後在servlet標籤中寫下那個類名。和你的servlet名稱。

如果問題仍然存在,請確保您刪除該servlet的.class文件並重新構建您的項目(net beans有一個清理和構建然後運行的選項)沒有使用eclipse,但我確定它也有類似的選項

+0

問題將仍然存在...它應該是'packageName.ClassName' ...在這種情況下將 hello.NewServlet

0

web.xml中的格式應該是這樣的。

  <servlet-name>NewServlet</servlet-name> 
      <servlet-class>PackageName.JavaClass</servlet-class> 

而你的情況是

  <servlet-name>NewServlet</servlet-name> 
      <servlet-class>Hello.NewServlet</servlet-class> 
0

edite這樣的: 形式方法= 「郵報」 行動= 「NewServlet」

這個
形式方法= 「郵報」 行動= 「/ (您的項目名稱)/NewServlet」

我有同樣的問題,這工作我