サーブレットでのリクエストのディスパッチについていくつか質問があります。
要約すると、すべてのサーブレットに /servlet/* のような URL パターンを強制する公開サーバーに Web サイトをデプロイしました (いずれにせよ、それがデフォルトの構成であると聞きました)。問題は、アプリケーションの開発中にそのような制限がなかったため、そのようなパターンをサポートするようにビルドしなかったことです....今、私のアプリケーションはURLが原因で動作しません. サーブレットが次のように宣言およびマップされているとしましょう:
<servlet>
<servlet-name>MainController</servlet-name>
<servlet-class>controller.controllers.MainController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MainController</servlet-name>
<url-pattern>/servlet/MainController</url-pattern>
</servlet-mapping>
問題は、このコードを Servlet で使用することです:
this.getServletContext()
.getRequestDispatcher(destination).forward(request, response);
destination
パラメータは、「/index.jsp」、「home.jsp」などのように、常にWeb*.jsp
アプリケーションのルートにあります。
localhost でアプリケーションを使用していたとき、サーブレットには次の URL パターンがありました。
<url-pattern>/MainController</url-pattern>
リクエストディスパッチャーは常に webapp のルートで .jsp を検索していたため、すべてが正常に機能していました。しかし、私の新しい URL パターンを使用すると、すべての .jsp を servlet/* で検索しようとしますservlet/index.jsp
。
HTTP Status 404 - /servlet/index.jsp
よく思い出せば、サーブレットは現在のコンテキストの外に拡張できないため、なぜそのように動作するのかを完全に理解しています。
しかし、私の質問は、私は運命にあるのでしょうか? 「/servlet/*」パターンを気にせずに、リクエスト ディスパッチャーに .jsp に移動するように指示する方法はありませんか? 転送する前に処理するため、リクエストのオブジェクトが絶対に必要です。
私は本当にこれをどうやって乗り越えたらいいのかわからないので、誰かがすでにこの状況に直面しているか、少なくとも私よりも状況について明確なビジョンを持っていることを期待して、ここで助けを求めています.
これを読んで助けてくれてありがとう。
よろしくお願いします、
サンパウェンデ。