1

次の構造のプロジェクトがあるとします。

ウェブ
  記事
    main.jsp
    sidearts.jsp
    中央.jsp
  フォーラム
    main.jsp
  css
  js
  WEB-INF
    web.xml

この時点ではまだフロントコントローラーがないことに注意してください。

いくつかのファセット(「asdf」としましょう)を使用してデプロイした後、次のURLを使用してページにアクセスできます。

http:// localhost:8080 / asdf / articles / main.jsp
http:// localhost:8080 / asdf / forum / main.jsp

等々..

main.jspはいくつかのhtmlを生成し、sidearts.jspを含みます(jstl c:importまたはその他の方法で)

そして、フロントコントローラーを追加するとどうなりますか?


いくつかのリクエストのディスパッチを担当し、次のマッピング を持つサーブレットArticlesControllerがあるとします。

<servlet>
  <servlet-name>ArtsController</servlet-name>
  <servlet-class>org.forstackoverflow.ArticlesController</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>ArtsController</servlet-name>
  <url-pattern>/articles/*</url-pattern>
</servlet-mapping>

これで、URLをリクエストするhttp://localhost:8080/asdf/articles/mainと、ArticlesControllerがこのリクエストを処理し、articles/main.jspを含めようとします。そして、この時点で、/ articles / *がArtsControllerにマップされているため、無限サイクルが開始されます。

説明されている問題の正しい解決策は何ですか?

私の変種は次のとおりです。

1)すべてのjspファイルのマッピングを作成します(受け入れられるとは思いません)

2)ディレクトリ名を変更します(articles-> arts); しかし、その後、(のような)多くの新しいURLを取得http://localhost:8080/asdf/arts/main.jspし、それがバグの原因になる可能性があると思います。

4

2 に答える 2

1

サーブレットとフィルタを混同している可能性があります。サーブレットを使用すると、無限ループは発生しません。JSPページは、明示的に(プリコンパイルされている場合)または暗黙的に(プリコンパイルされていない場合はwebappルートに相対的なJSPファイルパスを介して)、常に正確なパターンを介してマップされます。これが意味するのは、「articles/main.jsp」が事実上次のマッピングを持つサーブレットになるということです。

<servlet-mapping>
  <servlet-name>name_does_not_matter_here</servlet-name>
  <url-pattern>/articles/main.jsp</url-pattern>
</servlet-mapping>

ArticlesControllerサーブレットを/articles/*以下にマップすると、次のようになります。

http://localhost:8080/asdf/articles/mainURLはJSPのパターンと一致しないため、サーブレットによって処理されます。ただし、http://localhost:8080/asdf/articles/main.jsp両方のパターンに一致するURLは、サーブレットではなくJSPページにマップされます。これは、サーブレットコンテナが常にワイルドカード一致よりも完全一致を優先するためです(これはJ2EE仕様の一部です)。

于 2009-07-27T23:08:00.000 に答える
0

MVCを使用しているため、クライアント(つまり、ブラウザー)にビュー(この場合はjsp)へのアクセスを許可する必要があります。コントローラサーブレットは、アクションが実行されたときにビューから呼び出す必要があります。コントローラでアクションを処理した後、次のビューにリダイレクトします(アクションを開始したのと同じである可能性があります)。

サーブレットのurl-patternを実際のディレクトリに一致させると、そのディレクトリのデフォルトページではなくサーブレットを選択するようにコンテナに指示されるため、混乱が生じます。

于 2009-07-29T02:47:06.387 に答える