[解決済み] サーブレットマッピングのurlパターンにおける/と/*の違いについて
質問
おなじみのコードです。
<servlet-mapping>
<servlet-name>main</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>main</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
私の理解では
/*
は
http://host:port/context/*
.
どうですか?
/
? それは確かに
http://host:port/context
ルートのみです。実際、それは
http://host:port/context/hello
は拒否されますが
http://host:port/context/hello.jsp
.
がどのようなものか説明できる人はいますか?
http://host:port/context/hello
をマッピングしてください。
どのように解決するのですか?
<url-pattern>/*</url-pattern>
は
/*
は他のすべてのサーブレットを上書きします。その中には、デフォルトサーブレットやJSPサーブレットなど、サーブレットコンテナが提供するすべてのサーブレットも含まれます。どのようなリクエストを送っても、最終的にはそのサーブレットに到達します。このように、これはサーブレットにとって良くないURLパターンです。通常は
/*
の上に
Filter
だけです。を呼び出すことで、より特定のURLパターンでリッスンしているサーブレットに リクエストを継続させることができます。
FilterChain#doFilter()
.
<url-pattern>/</url-pattern>
は
/
は他のサーブレットを上書きすることはありません。他の登録されたサーブレットにマッチしないすべてのリクエストに対して、 servletcontainer に組み込まれているデフォルトのサーブレットを置き換えるだけです。これは通常、静的なリソース (CSS/JS/image/etc) とディレクトリリストに対してのみ実行されます。サーブレットコンテナに内蔵されたデフォルトサーブレットは、HTTPキャッシュリクエスト、メディア(オーディオ/ビデオ)ストリーミング、ファイルダウンロードの再開にも対応します。通常、デフォルトサーブレットを上書きすることはありません。そうしないと、すべてのタスクを処理する必要があり、それは決して簡単なことではありません (JSF ユーティリティライブラリ
オムニフェーズ
には
オープンソース
例
). このように、これもサーブレットにとっては良くないURLパターンです。なぜ JSP ページがこのサーブレットにヒットしないかというと、サーブレットコンテナに内蔵された JSP サーブレットが起動されるからです。
*.jsp
.
<url-pattern></url-pattern>
また、空文字列のURLパターンもあります。
. これは、コンテキストルートが要求されたときに呼び出されます。これは
<welcome-file>
のアプローチでは、サブフォルダが要求されたときに呼び出されることはありません。これは、あなたが実際に探しているURLパターンである可能性が高く、"
ホームページサーブレット
"です。ただ、私は直感的に空文字列のURLパターンを期待してしまうので
とスラッシュのURLパターン
/
このため、多くのスターターがこの件で混乱したことは理解できます。でも、それが現実なのです。
フロントコントローラ
を使用する場合
実際に
フロントコントローラサーブレットが必要な場合は、以下のような URL パターンを使用するとよいでしょう。
*.html
,
*.do
,
/pages/*
,
/app/*
などがあります。フロントコントローラーのURLパターンを隠し、静的なリソースを以下のような共通のURLパターンでカバーすることができます。
/resources/*
,
/static/*
などを、サーブレットフィルタの助けを借りて実行します。以下も参照してください。
にマッピングされたフロントコントローラサーブレットで静的リソースを扱わないようにするには?
. Spring MVC には静的リソースサーブレットが組み込まれているので、フロントコントローラを
/
を設定すれば、Springの静的リソースに共通のURLパターンを設定することができます。以下も参照してください。
Spring MVCで静的コンテンツを扱うには?
関連
-
[解決済み] [Solved] java.lang.IllegalStateException: レスポンスがコミットされた後では(forward | sendRedirect | create session)できません。
-
[解決済み] HTTPServletRequest getParameterMap() と getParameterNames の比較
-
[解決済み] HTTPステータス 405 - HTTPメソッドGETは、このURLではサポートされていません [重複].
-
[解決済み】JSF、Servlet、JSPの違いは何ですか?
-
[解決済み】サーブレットベースのアプリケーションで、設定リソースファイルをどこに置き、どのように読み込むか?
-
[解決済み] サーブレットマッピングのurlパターンにおける/と/*の違いについて
-
[解決済み] WARでアノテーションを使用してサーブレットフィルタの実行順序を定義する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] java.lang.IllegalStateException: レスポンスがコミットされた後では(forward | sendRedirect | create session)できません。
-
[解決済み] HTTPServletRequest getParameterMap() と getParameterNames の比較
-
[解決済み] HTTPステータス 405 - HTTPメソッドGETは、このURLではサポートされていません [重複].
-
[解決済み】サーブレットベースのアプリケーションで、設定リソースファイルをどこに置き、どのように読み込むか?
-
[解決済み] サーブレットマッピングのurlパターンにおける/と/*の違いについて
-
[解決済み] WARでアノテーションを使用してサーブレットフィルタの実行順序を定義する方法