2010-11-28 11 views
0

リクエストをサーブレットにディスパッチすることに関する質問があります。サーブレット - url-paternが似ているときにディスパッチ要求

私はすべてのサーブレットのために/ 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> 

問題は、私は私のサーブレットでこのコードを使用することです:

this.getServletContext() 
      .getRequestDispatcher(destination).forward(request, response); 

destinationパラメータは私のWebアプリケーションのルートに常に*.jspです

など、「/index.jsp」、「home.jspを」のようなジュスト私はローカルホスト上で自分のアプリケーションを使用していたとき、私のサーブレットはこのURLパターンを持っていた:

<url-pattern>/MainController</url-pattern> 

リクエストディスパッチャがwebappのルートにある.jspを常に検索していたため、すべて正常に機能していました。私は思い出すかの、のように、それはそのような演技だしかし、なぜ、今、私の新しいURLパターンと、それだけで​​のように* /サーブレットですべての私の.jspをSERCHしようとすると、コルスの私に HTTP Status 404 - /servlet/index.jsp

を投げる私は完全に理解してサーブレットは現在のコンテキスト外には拡張できません。

しかし、私の質問は、私は運命ですか?リクエスト・ディスパッチャに.jspに行くように指示する方法はありません。私は "/ servlet/*"パターンを処理せずに求めていますか? 私はそれを転送する前にそれを扱うので、私は絶対に要求のオブジェクトを必要とします。

私は本当にこれをどうやって解決するのか分からないので、誰かがすでにこの状況に直面していたとか、少なくとも私よりも状況がはっきりしていることを願って助けを求めています。

これを読んで私を助けていただきありがとうございます。

お礼、

サンパウエンデです。

答えて

0

したがって、destinationは、その場所が呼び出し側サーブレットのパスに依存するようにする/で開始しませんか?

は、それに応じて修正:

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

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

+0

こんにちはBalusC、 お返事ありがとうございます。 実際には、ディスパッチする直前に小切手を追加する方が良い場合でも、実際にはすべての宛先は「/」で始まります。 私のアプリケーションでは、表示する前にページをサーバーに戻す必要があるかどうかを確認します。直接アクセスすることは問題ありません。私のアプリケーションは本当にこのgetRequestDispatcher()に基づいています。転送(要求、応答)これは何も働いていない理由です。 とにかく、あなたが言っていることは面白いと思いますが、私はいくつかの点でコードをリファクタリングします。 お礼、 サンパウエンデ。 – Sampawende