1

バニティ URL モジュールの実装が非常に悪く、特定の期間に非常に高い負荷がかかる Web サイトを持っています。url モジュールにいくつかのバグがあるため、システムを頻繁に再起動する必要があります。だから、私は血まみれのモジュールを書き直して、バグを減らしたいと思っています...

バニティ URL システムを実装するための適切なパターンはありますか?

高パフォーマンスのためにバニティ URL を処理する際の最良のアプローチは何ですか?

ソースを見るのに最適なライブラリは何ですか?

乾杯。あこ

4

1 に答える 1

1

あなたのアプリケーションの特定の実装の詳細についてはわかりませんが、一般的なスケッチとして、Filter関心のある URL のスペース (おそらく/*) にマップされたものを書きます。

URL が凝ったものかどうかFilterを確認し、その場合は適切なリソース(URL ディスパッチャまたは名前付きリソース)へのリクエストを行います。リクエストディスパッチャを作成するには、渡されたものを保存する必要があります。URL が派手でない場合、フィルターは を呼び出し、マップされていないリソースを提供します。forwardfilterConfig.getServletContext()init(FilterConfig)chain.doFilter(req, resp)

public class ExceptionFilter implements Filter {
    private ServletContext servletContext;

    public void destroy() {}
    public void doFilter(ServletRequest req, 
                         ServletResponse resp, 
                         FilterChain chain) 
      throws IOException, ServletException {        
        String mapping = getMappingFor((HttpServletRequest)req);
        if(mapping!=null) servletContext.getRequestDispatcher(mapping).forward(req,resp);
        else chain.doFilter(req, resp);
    }

    public void init(FilterConfig filterConfig) throws ServletException {
       this.servletContext = filterConfig.getServletContext();
    }

    private String getMappingFor(HttpServletRequest req) {...}

実装方法getMappingForはアプリケーションによって異なりますが、おそらくデータベースへの接続を開き、URL /foo/bar がマップされているかどうかを尋ね、マップされた URL を返すか、またはnullマッピングがないかどうかを尋ねます。マッピングが変更されないことがわかっている場合は、既に取得したマッピングをキャッシュできます。

特定の URL またはデータベースからの情報に応じていくつかのリクエスト属性を設定し、何をすべきかを知っているサーブレットにリクエストを転送するなど、より詳細な実装を行うことができます。

于 2013-02-23T13:26:05.807 に答える