0

サーブレットでのリクエストのディスパッチについていくつか質問があります。

要約すると、すべてのサーブレットに /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.jspHTTP Status 404 - /servlet/index.jsp

よく思い出せば、サーブレットは現在のコンテキストの外に拡張できないため、なぜそのように動作するのかを完全に理解しています。

しかし、私の質問は、私は運命にあるのでしょうか? 「/servlet/*」パターンを気にせずに、リクエスト ディスパッチャーに .jsp に移動するように指示する方法はありませんか? 転送する前に処理するため、リクエストのオブジェクトが絶対に必要です。

私は本当にこれをどうやって乗り越えたらいいのかわからないので、誰かがすでにこの状況に直面しているか、少なくとも私よりも状況について明確なビジョンを持っていることを期待して、ここで助けを求めています.

これを読んで助けてくれてありがとう。

よろしくお願いします、

サンパウェンデ。

4

1 に答える 1

0

では、その場所が呼び出し元のサーブレットのパスに依存するようにすることからdestination始めませんか?/

それに応じて修正します。

request.getRequestDispatcher("/" + destination).forward(request, response);

ちなみに、JSP への直接アクセスも防止したい場合 (エンドユーザーは、最初にコントローラーを呼び出さずに JSP を指すように URL を変更できます)、JSP を/WEB-INFフォルダーに配置することを検討してください。RequestDispatcherそれに応じてパスを変更することを忘れないでください: "/WEB-INF/" + destination.

于 2010-11-28T23:04:11.013 に答える