2

よくある質問で申し訳ありませんが、気が狂いそうです。Ubuntu Server で実行されている Tomcat を使用して、JSP の開発から始めています。最初の「Hello World」サーブレットを実行しようとしていますが、成功しません。

サーバーには次のものがあります。

  • webappsディレクトリは次のとおりです。/var/lib/tomcat6/webapps/
  • webappscontext-roothello/ディレクトリを作成しました
  • 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 エラー (リソースが利用できません) が発生します。

おそらくサーブレット マッピング、フォーム、および/またはにエラーがありますが、web.xmlそれを発見するには本当に助けが必要です。

4

4 に答える 4

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

サーブレットの URL パターンにコンテキスト パスを含めないでください。それはすでにコンテキストルートに対して相対的です。

それを取り除く。

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

具体的な問題とは関係ありませんが、サーブレットで HTML コードを記述することは非常に悪い習慣です。そのためには、JSP を使用する必要があります。健全な Hello World の例を含む、私たち自身の Servlets wiki ページも参照してください。

于 2013-03-21T13:59:08.400 に答える
1

コンテキスト ルートを jsp アクションに追加します。以下の変更が有効な場合があります。

<form action = "/hello/hello/helloworld" method = "get" >
  <input type = "submit" value = "REQUEST" />
</form>
于 2013-03-21T12:09:55.587 に答える
1

404 は次の結果である可能性があります。

  1. 不適切なマッピング シナリオ (上記の回答のように追加のコンテキストを含めたか、ワイルドカード スキーマを誤用した可能性があります)
  2. サーブレットが開始されていません (コンソールまたはカタリナ ファイルの開始ログ スタックを参照してください。サーブレットの失敗例外トレースが見つかるはずです)。
于 2014-09-18T13:15:04.820 に答える
0

これを理解するのに何年もかかりました。私の場合、Tomcat のURL大文字と小文字が区別されることを認識できなかったため、404 が返されました。

例えば:

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

...404!

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

...罰金。

狂気。

于 2016-03-07T15:50:08.347 に答える