web-dev-qa-db-ja.com

Tomcatサーブレット:エラー404-要求されたリソースは利用できません

私はJavaサーブレットを記述するのはまったく初めてで、簡単にHelloWorldの例を正しく動作させるのに苦労しています。

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を実行していますが、servlet-mappinginvokerweb.xmlセクションの変更に関する回答とともに、同様の質問をすでに読んでいます。このセクションは実際には存在しません。追加しても同じ問題が発生しました。

27
Tom Haddad

これを試してください(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はアプリケーションのコンテキスト名です

21
user2511414

サーブレットを何らかのURLにマップする必要があります。 Java EE 6(少なくともServlet API 3.0を意味する)を使用する場合、次のようにサーブレットに注釈を付けることができます。

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

次に、localhost:8080/yourApp/helloに移動すると、値が表示されます。 Servlet 3.0 APIを使用できない場合、このサーブレットをweb.xmlファイルに登録する必要があります。

<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>
11
Petr Mensik

Java EE 7を使用すると、Javaサーブレットを簡単に記述できます

@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();
  }
}

サーブレット3.0以降

良いニュースは、デプロイメント記述子が不要になったことです!

Java Servlets のチュートリアルを読んでください。

6
Roman C

これは、WebContentフォルダーではなくWEB-INFで.jspまたは.htmlファイルを作成したことが原因である可能性があります。

解決策:WEB-INFフォルダーにあるファイルをWebcontentフォルダーに置き換えて、同じものを実行してください-適切な出力が得られます

2
prasanth

アクションattrで../../projectName/Filename.jspを使用する必要があります。またはhref

../ =現在のフォルダーsimple(demo.project.filename.jsp)が含まれています

サーブレットは、プロジェクト名の前にスラッシュを1つ付けてのみ呼び出すことができます。

0
user5706295

Java EE 7および動的Webモジュール3.xで「要求されたリソースが利用できません」で立ち往生している場合、これが役立つ可能性があります。Eclipseの「サーブレットの作成」ウィザードtサーブレットクラスの@ Pathアノテーションを作成しますが、公開されたパブリックメソッドに正常にアクセスするには、それを含める必要がありました。

0
vladiastudillo