このサーバーを指すリンクが多数あるため、従来の Web サーバーを置き換えるために Dropwizard アプリを構築しています。下位互換性があり、従来のサーバーが提供していたすべての種類のリソースをサポートする必要があります。
問題は、サービス自体と同じディレクトリ/パスから多数の静的 JS ファイルが提供されていることです。どうやら、単一のディレクトリから両方のタイプ (サービスと静的) を提供することはできません。したがって、次のように静的バンドル (現在はリソース ディレクトリにあります) を追加すると、次のようになります。
bootstrap.addBundle(new AssetsBundle("/javascript", "/media"));
動的サービス (/media/ から提供される) は、コメントすると 404 を返し始めます。動的サービスは正常に動作します。
私が言ったように、静的または動的なリンクを変更することはできません...何か提案はありますか?
アップデート:
解決済み、これは @airborn の回答に触発された実用的な例です。この質問は、この問題を一般的に解決すると主張するこのモジュールも指摘しました。
この例では、すべての受信リクエストにフィルターを適用し、必要な場所にリダイレクトできるようにします (Apache の .htaccess 機能に似ています)。
次の行を run 関数に配置して、メインの dropwizard クラスService<AppConfiguration>
( ** **を拡張するもの)
environment.addFilter(new UrlRewriteFilter(),"/*");
このクラスを上記のクラスからアクセス可能な場所に配置します
@WebFilter
public class UrlRewriteFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
//
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
String requestURI = request.getRequestURI();
// Place Redirection logic here (else continues the filter chain).
if (redirectConditionTrue)
String newURI = ""//New URl to do to;
req.getRequestDispatcher(newURI).forward(req, res);
} else {
chain.doFilter(req, res);
}
}
@Override
public void destroy() {
//
}
}