0

はい、Java で書かれたさらに別の URL 短縮サービスです。現在、すべてが機能していますが、私が望んでいる方法ではありません。つまり、プロジェクト全体で「/」にマップされたサーブレットは 1 つだけです。関連するフレームワークや特別なものはありません。これは単なる基本的なサーブレット「プロジェクト」です。doPost で新しい shortUrl が作成され、JSON 応答が返されます。doGet では、URL が「/*{any_valid_short_url}」の場合、リダイレクトが送信されます (以下)。

response.sendRedirect("longUrlString")

私が抱えている問題はインデックス ページにあります。同じ doGet が呼び出されたときに、要求されたパスをチェックします。それが「/」の場合、現在、FileInputStream を使用し、response.getOutputStream( を介して index.html ページをストリーミングします。 )、これは私の意見ではかなりハックです。代わりに requestDispatcher を使用したいのですが、それを実装しようとすると (以下)、リダイレクト ループが発生し、サーブレット コンテナー (jetty または tomcat) スタック オーバーフローが発生します。

getServletContext().getRequestDispatcher("/index.html").forward(req, res);

これがどのように行われているかについて、私が誤解していることはありますか? プロジェクトは現在、私の github ページでホストされています。 https://github.com/justinmburrous/ShortUrl

4

2 に答える 2

0

さて、 /* にグローバルフロントコントローラーサーブレットをマッピングするときに静的リソースにアクセスする方法のおかげで、これを理解しました

私のgithubページには、フィルター、変更されたサーブレット、およびweb.xmlとともに機能するコードがあります。

于 2013-03-05T22:56:25.430 に答える
0

すべてのリクエストでこの条件が true になり、すべてのリクエストで何度も「index.html」に転送されるため、このチェックをより狭くする必要があります。

    if(requestedPath.equals("/")){

    //tried with multiple variations of /index.html, renamed to jsp, etc...
RequestDispatcher dispatcher = request.getRequestDispatcher("index.html");
dispatcher.forward(request, response);    
    }

編集: サーブレットはデフォルトのサーブレットとしてマップされているため、すべての転送またはリクエストはこのサーブレットによって処理されます。URL をより具体的な範囲にマップする必要があります。

RequestDispatcher - forward - 無限ループを生成します

于 2013-03-05T11:20:49.210 に答える