1

私は現在 Java EE コースを勉強しており、サーブレットを使用するモジュールを使用しています。

コースには、簡単なサンプル サーブレットが含まれています。

これはばかげているように聞こえるかもしれませんが、それらを単独で、またはグラスフィッシュサーバー上のネットビーンズで動作させることはできません。プロジェクトのWebページフォルダーにそれらをドロップしようとしましたが、index.jspファイルのコンテンツをWelcomeServlet.htmlコンテンツに置き換えました。私が彼女を使用する例は、最初のものであり、WelcomeServlet と呼ばれる最も単純なものです。

サーブレットの機能は、ユーザーが「HTML ドキュメントの取得」ボタンを押したときに、プログラムが .java ファイルからドキュメントを取得することです。ただし、ボタンを押すと、このエラーが発生します

HTTP ステータス 404 - Not Found タイプのステータス レポート

メッセージが見つかりません

説明要求されたリソースは利用できません。

GlassFish サーバー オープン ソース版 4.0

これが問題のコードです。WelcomeServlet.html

    <?xml version = "1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!-- Fig. 17.6: WelcomeServlet.html -->

<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
   <title>Handling an HTTP Get Request</title>
</head>

<body>
   <form action = "/advjhtp1/welcome1" method = "get">

      <p><label>Click the button to invoke the servlet
         <input type = "submit" value = "Get HTML Document" />
      </label></p>

   </form>
</body>
</html>

WelcomeServlet.java

// Fig. 16.5: WelcomeServlet.java
// A simple servlet to process get requests.
package com.deitel.advjhtp1.servlets;

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

public class WelcomeServlet extends HttpServlet {   

   // process "get" requests from clients
   protected void doGet( HttpServletRequest request, 
      HttpServletResponse response )
         throws ServletException, IOException 
   {
      response.setContentType( "text/html" );
      PrintWriter out = response.getWriter();  

      // send XHTML page to client

      // start XHTML document
      out.println( "<?xml version = \"1.0\"?>" );

      out.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD " +
         "XHTML 1.0 Strict//EN\" \"http://www.w3.org" +
         "/TR/xhtml1/DTD/xhtml1-strict.dtd\">" ); 

      out.println( 
         "<html xmlns = \"http://www.w3.org/1999/xhtml\">" );

      // head section of document
      out.println( "<head>" );
      out.println( "<title>A Simple Servlet Example</title>" );
      out.println( "</head>" );

      // body section of document
      out.println( "<body>" );
      out.println( "<h1>Welcome to Servlets!</h1>" );
      out.println( "</body>" );

      // end XHTML document
      out.println( "</html>" );
      out.close();  // close stream to complete the page
   }   
}

誰かがこのコードを実行できる場合は、私が同じことをするのを手伝ってください。

4

3 に答える 3

1

Web アプリケーション プロジェクト内に、 というフォルダがWEB-INFあり、その中に というファイルがあるはずですweb.xml。そうでない場合は、作成してそこに置きます。これは、Deploymenet Descriptor として知られています。ここでそれについて読むことができます。

少なくとも次のものが含まれている必要があります

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"> // or another version
    <servlet>
        <servlet-name>welcome</servlet-name>
        <servlet-class>com.deitel.advjhtp1.servlets.WelcomeServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>welcome</servlet-name>
        <url-pattern>/welcome</url-pattern>
    </servlet-mapping>
</web-app>

次に、に移動する必要があります

localhost:XXXX/welcome

XXXX は、ページを表示するための Glassfish ポートです。

コンテナーがサーブレット 3.0 をサポートしている場合は、アノテーションを使用して上記を行うこともできます。

于 2013-09-01T04:02:50.333 に答える
-1

単にフォームが間違ったパスを指しているため、404 not found が表示されます。そのため、送信先のサーブレットが見つかりません。

サーブレット クラスは、パッケージ com.deitel.advjhtp1.servlets の「WelcomeServlet.java」です。

したがって、HTML では、パスは次のようになります。

< form action = "com.deitel.advjhtp1.servlets.WelcomeServlet" method = "get">
于 2013-09-01T03:52:15.043 に答える