私は次のようにマップされたサーブレットを持っている:localhost:8080/test/1
またはlocalhost:8080/test/99
にアクセスして、すべてが同じサーブレットに扱うとlocalhost:8080/test/1/test.html
無限のリダイレクトをサーブレットにどのように修正しますか?
に転送され
@WebServlet("/test/*")
ようにするための問題があることである - 私の転送が下に落ちています同じワイルドカードルールはtest/*
- 無限ループを引き起こしています。
私は運が悪いとこれを修正しようとしました。サーブレットが何回呼び出されたかを把握するために何らかのカウンタを追加することを考えていましたが、サーブレットを適切に再利用したい場合には、それが私を制限し、別の問題を作成するだけでした。
私は一日中このことに悩まされているので、すべての助けがありがたいです。ありがとう、ありがとう、ありがとう!
@WebServlet("/test/*")
public class WildcardTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getRequestURL());
RequestDispatcher view = request.getRequestDispatcher("test.html");
view.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
解像度: 私はあなたのHTMLビューを保存するためにWEB-INFディレクトリを使用。サーブレットのマッピングを行わずにそこに転送することができます。これで解決できると思ったが、それでも私には同じ問題がある。
RequestDispatcher view = request.getRequestDispatcher("WEB-INF/views/login.html");
出力http://localhost:8080/test/testを要求:
2016-05-15T21:12:37.798+0200|Info: http://localhost:8080/test/test
2016-05-15T21:12:37.798+0200|Info: http://localhost:8080/test/WEB-INF/views/login.html
2016-05-15T21:12:37.798+0200|Info: http://localhost:8080/test/WEB-INF/views/WEB-INF/views/login.html
2016-05-15T21:12:37.798+0200|Info: http://localhost:8080/test/WEB-INF/views/WEB-INF/views/WEB-INF/views/login.html
2016-05-15T21:12:37.798+0200|Info: http://localhost:8080/test/WEB-INF/views/WEB-INF/views/WEB-INF/views/WEB-INF/views/login.html
"/ test/*"にマップされているので、/ test/a/b/c/d/e/fに関係なく、 "/ teste/*"に一致するものはすべてサーブレットで処理されます。/gまたは他のすべて。なぜあなたはリダイレクトループを持っているのですか?マッピングを変更したり、リクエストを別の場所にリダイレクトすることができます。 – Jaumzera