web-dev-qa-db-ja.com

web.xmlのurl-patternの重要性とサーブレットの設定方法は何ですか?

アプリケーション用にweb.xmlを手動で構成しました。現在、アプリケーションの実行中に問題に直面しています。 servletページからjspにアクセスしようとしています。ただし、page not foundとしてエラーをスローしています。

サーブレットは、フォルダーの場所の下に配置されます

<application folder>/WEB-INF/classes/<package>

したがって、url-patternおよびservlet-mappingのサーブレットのエントリはどうなりますか。そのため、servletにはURLからアクセスできます。

44
gkumar

url-patternweb.xmlで使用され、servletを特定のURLにマップします。以下のxmlコードをご覧ください。web.xml構成ファイルにある類似のコードです。

<servlet>
    <servlet-name>AddPhotoServlet</servlet-name>  //servlet name
    <servlet-class>upload.AddPhotoServlet</servlet-class>  //servlet class
</servlet>
 <servlet-mapping>
    <servlet-name>AddPhotoServlet</servlet-name>   //servlet name
    <url-pattern>/AddPhotoServlet</url-pattern>  //how it should appear
</servlet-mapping>

AddPhotoServleturl-pattern/AddPhotoServletから/MyUrlに変更した場合。その後、/MyUrlを使用して、AddPhotoServletサーブレットにアクセスできます。実際のページのURLを非表示にするセキュリティ上の理由から適しています。

Javaサーブレットurl-pattern仕様:

  1. '/'文字で始まり '/ *'接尾辞で終わる文字列がパスマッピングに使用されます。
  2. '*。'プレフィックスで始まる文字列は、拡張マッピングとして使用されます。
  3. '/'文字のみを含む文字列は、アプリケーションの「デフォルト」サーブレットを示します。この場合、サーブレットパスはリクエストURIからコンテキストパスを引いたものであり、パス情報はnullです。
  4. 他のすべての文字列は、完全一致にのみ使用されます。

参照: Javaサーブレット仕様

これを読むこともできます Basic of Java Servlet

68
Ravi

Servlet-mappingには、url-patternとservlet-nameの2つの子タグがあります。 url-patternは、servlet-nameで指定されたサーブレットを呼び出す必要があるURLのタイプを指定します。コンテナは、サーブレットの一致の文字列比較に大文字と小文字を区別することに注意してください。

最初の指定url-pattern a web.xml server.comのサーブレットコンテナ上のサーバーコンテキストのファイルは、次のように<url-pattern>/status/*</url-pattern>のパターンと一致します。

http://server.com/server/status/synopsis               = Matches
http://server.com/server/status/complete?date=today    = Matches
http://server.com/server/status                        = Matches
http://server.com/server/server1/status                = Does not match

2番目の指定url-pattern example.comのエージェントのパス/ examplesにあるコンテキストは、次のように<url-pattern>*.map</url-pattern>のパターンと一致します。

 http://server.com/server/US/Oregon/Portland.map    = Matches
 http://server.com/server/US/server/Seattle.map     = Matches
 http://server.com/server/Paris.France.map          = Matches
 http://server.com/server/US/Oregon/Portland.MAP    = Does not match, the extension is uppercase
 http://example.com/examples/interface/description/mail.mapi  =Does not match, the extension is mapi rather than map`

番目の指定url-mapping、パターン<url-pattern>/</url-pattern>を含むマッピングは、他のパターンが一致しない場合にリクエストに一致します。これはデフォルトのマッピングです。このパターンにマップされたサーブレットは、デフォルトサーブレットと呼ばれます。

デフォルトのマッピングは、多くの場合、アプリケーションの最初のページに向けられます。また、デフォルトのマッピングを明示的に提供することにより、エラーを返すのではなく、アプリケーションが返す不正な形式のURL要求がアプリケーションによって処理されるようになります。

以下のservlet-mapping要素は、serverサーブレットインスタンスをデフォルトのマッピングにマッピングします。

<servlet-mapping>
  <servlet-name>server</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

この要素を含むコンテキストの場合、別のマッピングによって処理されない要求は、serverサーブレットに転送されます。

そして最も重要なことは、RLパスマッピングのルールについて知っておく必要があることです。

  1. コンテナは、リクエストのパスがサーブレットのパスに完全に一致することを試みます。一致すると、サーブレットが選択されます。
  2. コンテナは、最長のパスプレフィックスを再帰的に一致させようとします。これは、パスセパレーターとして「/」文字を使用して、一度に1つのディレクトリずつパスツリーをステップダウンすることによって行われます。最長一致により、選択されたサーブレットが決まります。
  3. URLパスの最後のセグメントに拡張子(.jspなど)が含まれている場合、サーブレットコンテナは、その拡張子のリクエストを処理するサーブレットと一致しようとします。拡張機能は、最後の「。」文字の後の最後のセグメントの一部として定義されます。
  4. 前の3つのルールのいずれでもサーブレットが一致しない場合、コンテナは要求されたリソースに適したコンテンツを提供しようとします。アプリケーションに「デフォルト」サーブレットが定義されている場合は、それが使用されます。

参照 RLパターン

31
Sanshayan