[解決済み] 静的コンテンツ配信用サーブレット
質問
2 つの異なるコンテナ (Tomcat と Jetty) に Web アプリをデプロイしますが、静的コンテンツを提供するためのデフォルトのサーブレットは、私が使用したい URL 構造を扱う方法が異なっています ( 詳細 ).
したがって、私は、独自の静的コンテンツ(画像、CSSなど)を提供するために、ウェブアプリに小さなサーブレットを含めたいと考えています。サーブレットは、以下のプロパティを持つ必要があります。
- 外部依存がない
- シンプルで信頼性の高い
-
対応機種
If-Modified-Since
ヘッダー(つまり、カスタムgetLastModified
メソッド) - (オプション)gzipエンコーディング、etags、...のサポート。
このようなサーブレットはどこかにあるのでしょうか?私が見つけた最も近いものは 例4-10 サーブレットブックから。
更新してください。 私が使いたいURL構造は-一応-シンプルに。
<servlet-mapping>
<servlet-name>main</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
したがって、すべてのリクエストはメインサーブレットに渡される必要があります。
static
というパスがあります。問題は、TomcatのデフォルトのサーブレットはServletPathを考慮しない(だからメインフォルダ内の静的ファイルを探す)のに対して、Jettyは考慮する(だから
static
フォルダ)。
解決方法は?
結局、自作で
StaticServlet
. これは
If-Modified-Since
また、gzipエンコーディングも可能で、war-fileから静的ファイルを提供することもできるはずです。非常に難しいコードではありませんが、全く些細なことでもありません。
コードを公開しています。 StaticServlet.java . お気軽にコメントください。
更新しました。
Khurramは
ServletUtils
クラスで参照される
StaticServlet
. これは単に補助的なメソッドを持つクラスで、私のプロジェクトで使用したものです。あなたが必要とする唯一のメソッドは
coalesce
(SQL関数と同じです
COALESCE
). これがそのコードです。
public static <T> T coalesce(T...ts) {
for(T t: ts)
if(t != null)
return t;
return null;
}
関連
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
java 例外。Javaツールの初期化
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] JSP/Servletを使用してサーバーにファイルをアップロードするにはどうすればよいですか?
-
[解決済み] Javaサーブレットとは?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】JSF、Servlet、JSPの違いは何ですか?
-
[解決済み] Eclipse のビルドパスのネストエラー
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
final, finally, finalizeの違いについて話してください。
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決
-
[解決済み] JSP/Servletを使用してサーバーにファイルをアップロードするにはどうすればよいですか?
-
[解決済み] Java Web アプリケーションでアプリケーションサーバーの外側から静的データを提供する最も簡単な方法