4

このサーバーを指すリンクが多数あるため、従来の 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() {
        //
    }
}
4

1 に答える 1