3

webapp と WEB-INF の下の spring mvc および jsp ページの場所について質問があります。

以下の設定があるとしましょう。

webapp
  WEB-INF
    mvc-dispatcher.xml
    web.xml
  login.jsp
  register.jsp
  success.jsp
  error.jsp
  index.jsp

http://host.com/app/index.jspのような URL を使用してブラウザーからページを参照でき、そこから (a href) をregister.jspにリンクできます。register.jspから、 ( InternalResourceViewResolverを使用して) success.jspに解決される成功ビューを返すことができるコントローラーに投稿します。

jsp ページをWEB-INF の下に移動すると ( webappの下ではなく) 、ブラウザーからhttp://host.com/app/index.jspを参照できなくなります。また、success.jspから現在、href="index.jsp" を使用してindex.jspにリンクしています。これは、インデックスをビュー名として返すコントローラー (ディスパッチャー サーブレットのように/のように) にマップするように変更する必要があります。したがって、すべてのリンクはコントローラーによって提供される必要があります。私は正しいですか?または、jsp ページが WEB-INF の下にある場合 (InternalResourceViewResolver が構成されている場合)、マップされたコントローラーなしで jsp ページを参照する方法はありますか。

よろしく、

みてん。

4

1 に答える 1

6

あなたは、絶対に正しい。WEB-INF内部の JSPをブラウザから直接参照することはできません。そして、これは非常に良いです。すべてのリクエストはコントローラー経由で JSP に転送され、すべての JSP は .xml の下にある必要がありますWEB-INF。そうする理由はたくさんあります。

  • ユーザーは JSP の実際のソースを取得できず、セキュリティにプラスの影響を与えます。
  • 多くの JSP は、いくつかの要求属性の存在に依存しています (モデル)。ユーザーがブラウザから直接 JSP を呼び出した場合、モデルは存在しません。これにより、一部のロジックが壊れる可能性があります。
  • 1 つの JSP をWEB-INF使用して、変更を加えずにさまざまな URL を提供できます。ユーザーはそれについて何も知りません。
  • MVC ( Model 1ではなくModel 2 )を実行する場合、これは良い習慣です。

コントローラーなしで JSP を直接参照することについて質問があるとします。

  • JSP エラー ページを介して、HTTP 例外/Throwable を JSP に直接マップできます。たとえば、カスタム 404 には単純な手法が適しています。
  • Apache Tiles + Spring を使用し、いくつかの Spring (Tiles) にアクセスすると、テンプレート定義/notmappedurlを見つけようとします。notmappedurl(タイル+スプリングでの私の経験から)。他のビュー テクノロジーも同様の動作をしていると思います。
  • 書くのはそれほど難しいことではありません: @RequestMapping("/someurl")void someurl(){}. someurlSpring は、メソッド名に基づいてビューを見つけようとします。ただのスタブ。
于 2013-02-19T11:51:50.280 に答える