2013-10-06 100 views
27

我完全不熟悉編寫Java Servlet,並且努力獲得簡單的HelloWorld示例以正常工作。Tomcat Servlet:錯誤404 - 請求的資源不可用

HelloWorld.java類是:

package crunch; 

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

public class HelloWorld extends HttpServlet { 
    public void doGet(HttpServletRequest request, 
        HttpServletResponse response) 
     throws ServletException, IOException { 
    PrintWriter out = response.getWriter(); 
    out.println("Hello World"); 
    } 
} 

我運行Tomcat V7.0,並且已經閱讀類似的問題,以迴應參照web.xml改變invokerservlet-mapping部分,這個部分實際上其不會」我的存在,當我添加它時,同樣的問題仍然存在。

+1

這必須是配置問題。請提供您嘗試訪問的web.xml和url。 – Bart

+0

可以請你出示你的'web.xml'和你在哪裏打電話嗎? –

+0

您正在使用什麼版本的Java EE? – 2013-10-06 11:13:34

回答

21

試試這個(如果Java EE V6)

package crunch; 
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
@WebServlet(name="hello",urlPatterns={"/hello"}) 
public class HelloWorld extends HttpServlet { 
    public void doGet(HttpServletRequest request, 
        HttpServletResponse response) 
     throws ServletException, IOException { 
    PrintWriter out = response.getWriter(); 
    out.println("Hello World"); 
    } 
} 

現在http://127.0.0.1:8080/yourapp/hello

,其中8080​​是默認的Tomcat端口,yourapp是你applciation的上下文名稱到達的servlet

+0

我無法訪問我的html文件,請幫助!! http://stackoverflow.com/questions/24967510/the-requested-resource-xxx- html-is-not-available-when-redirect/24967768#24967768 – Jaskey

11

您肯定需要將您的servlet映射到某個URL。如果你使用的Java EE 6(這意味着至少Servlet API的3.0),那麼你可以註釋你的servlet像

@WebServlet(name="helloServlet", urlPatterns={"/hello"}) 
public class HelloWorld extends HttpServlet { 
    //rest of the class 

然後你可以去到localhost:8080/yourApp/hello並應顯示的值。如果不是,你需要這個servlet註冊到web.xml文件就像你不能使用的Servlet 3.0 API

<servlet> 
    <servlet-name>helloServlet</servlet-name> 
    <servlet-class>crunch.HelloWorld</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>helloServlet</servlet-name> 
    <url-pattern>/hello</url-pattern> 
</servlet-mapping> 
5

編寫Java servlet的是容易的,如果你使用的Java EE 7

@WebServlet("/hello-world") 
public class HelloWorld extends HttpServlet { 
    @Override 
    public void doGet(HttpServletRequest request, 
        HttpServletResponse response) { 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 
    out.println("Hello World"); 
    out.flush(); 
    } 
} 

由於servlet的3.0

好消息是不再需要部署描述符!

閱讀教程Java Servlets

+0

嗨。我正在使用JRE7,而Eclipse沒有識別@WebServlet。我該如何解決這個問題?我與這個相同的問題! – Totalys

+0

@Totalys是否確定編譯器設置爲JDK7,還有JRE? (我的意思是,在Eclipse的設置中) –

+0

指向Servlet教程的鏈接更改爲[http://docs.oracle.com/javaee/7/tutorial/servlets.htm#BNAFD](http://docs.oracle.com .com/javaee/7/tutorial/servlets.htm#BNAFD) – Campfire

0

對於那些在Java EE 7和動態Web模塊3.x中存在「請求的資源不可用」的人,這可能有助於:Eclipse中的「創建Servlet」嚮導(在Mars中測試)不會創建這個servlet類的註解,但我必須包含它才能成功訪問暴露的公共方法。

0

你必須在你的動作attr中使用../../projectName/Filename.jsp。或HREF

../ =包含當前文件夾的簡單(demo.project.filename.jsp)

的Servlet只能期待您的項目名稱1個斜線被稱爲..

1

這可能是由於您已經在WEB-INF而不是WebContent文件夾中創建了您的.jsp或.html文件。

解決方案:只需更換是有在WEB-INF文件夾複製到網絡內容的文件夾中的文件,並嘗試執行相同的 - 你會得到相應的輸出

-1

我的問題是web.xml文件。在一個<servlet-mapping>裏面有一個錯誤<url-pattern>:我忘了在url之前加上/

相關問題