5

* .pageリクエストに一致するようにspring-mvcサーブレットを設定しました。web.xmlのwelcome-file-listをindex.pageに設定しました

これは、Webサーバーのルートに移動すると機能します。

http://me.comはhttp://me.com/index.pageに正しくリダイレ​​クトされます。

ただし、サブディレクトリを使用するとリダイレクトされません。

http://me.com/dashboardはhttp://me.com/dashboard/index.pageにリダイレクトされませ

このマッピングを機能させる方法はありますか?

私のweb.xmlファイル(抽出):

<welcome-file-list>
    <welcome-file>index.page</welcome-file>
</welcome-file-list>

<servlet-mapping>
    <servlet-name>spring-mvc</servlet-name>
    <url-pattern>*.page</url-pattern>
</servlet-mapping>

私のwebdefault.xml(jettyから):

    <init-param>
        <param-name>dirAllowed</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>welcomeServlets</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>redirectWelcome</param-name>
        <param-value>false</param-value>
    </init-param>
4

4 に答える 4

13

は、エンドユーザー<welcome-file>がフォルダー(ルートなど)を要求するたびに提供する任意のフォルダーに物理的に存在するファイルを表す必要がありますが、など/の他のフォルダーでもかまいません/foo/。転送を実行する前にservletcontainerがその物理的な存在をテストすることを理解する必要があるだけです。存在しない場合は、HTTP404ページが見つかりませんというエラーが返されます。

index.page特定のケースでは、ルートフォルダに物理ファイルがありません。実際にindex.jsp、ルートフォルダにファイルがあります。はindex.page単なる仮想URLです。そのため、servletcontainerは物理index.pageファイルを見つけることができないため、404でエラーになります。

これを回避するには、同じフォルダー内index.pageのファイルの横に物理的に存在するファイルを配置して、servletcontainerをだまします。index.jspそのファイルは完全に空のままにしておくことができます。サーブレットコンテナはファイルを見つけて転送しindex.page、コントローラサーブレットを呼び出します。コントローラサーブレットは実際にindex.jspビューとして機能します。それはうまくいくでしょう。

于 2012-04-21T03:06:12.797 に答える
3

これは、実際の物理ディレクトリに対してのみ機能し、ディレクトリ構造をシミュレートする任意のサーブレットマッピングに対しては機能しません。

Spring MVCでは非常に複雑なURLマッピングが可能であるため、このシナリオは次のように処理する方が適切です。@RequestMapping

于 2012-04-19T21:59:01.433 に答える
2

ウェルカムファイル自体の転送を回避するには、ウェルカムファイルのマッピングを追加することをお勧めします。

  <servlet-mapping>
     <servlet-name>spring-mvc</servlet-name>
     <url-pattern>index.html</url-pattern>
  </servlet-mapping>

また、Java構成の場合、WebMvcConfigurerAdapterを拡張するクラスの2つのメソッドをオーバーライドできます。

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("/index");
}

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

index.htmlを明示的に提供する場合は、以下のように、それをリソースオーバーライドメソッドに変換します。

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/index.html").addResourceLocations("/WEB-INF/views/index.html");
}

もちろんaddResourceLocations、ビューを保持するために選択されたフォルダに従う必要があります。

これらのサンプルを参照してください

于 2014-05-04T16:36:36.030 に答える
0

これはおそらくWebサーバーで設定する必要があるものなので、サーバー固有の可能性があります

Apache HTTPサーバーの場合、次のようにDirectoryIndexディレクティブを設定することでこれを実現できます。 DirectoryIndex index.page

どうやら、誰かがすでにこの質問をしていて、ディレクトリ(jettyまたはtomcatの場合)のweb.xmlデフォルトファイルで回答を受け入れましたか?-それがあなたのために働くかどうか見てください。

于 2012-04-20T02:38:37.893 に答える