web-dev-qa-db-ja.com

サーブレット3.0のweb.xml-lessで<welcome-file-list>および<error-page>を定義する方法

サーブレット3.0のweb.xmlなしに変換したい既存のweb-appがあります。私はそれを機能させることができましたが、web.xmlのない環境で同等のコードをまだ知らないweb.xmlに2つのタグがあります。

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

<error-page>
    <error-code>404</error-code>
    <location>/pageNotFound</location>
</error-page>

どんな助けでもありがたいです

29
Wins

Servlets 3.0では、多くの場合web.xmlは必要ありませんが、必要な場合や単に役立つ場合もあります。あなたのケースはそれらの1つにすぎません-ウェルカムファイルリストやエラーページを定義するための特別な注釈はありません。

もう1つは、ハードコーディングしてもらいたいですか?注釈/プログラムベースの構成、およびXMLでの宣言的な構成には、いくつかの有効なユースケースがあります。サーブレット3.0に移行しても、必ずしもweb.xmlを削除する必要はありません。

あなたが投稿したエントリーは、XMLでの構成のより良い例です。 1つ目は、デプロイメントごとに変更でき、2つ目は、特定のサーブレットではなく、アプリケーション全体に影響します。

30
Piotr Nowicki

アナログのwelcome-page-listの場合、これを

@EnableWebMvc
@Configuration
@ComponentScan("com.springapp.mvc")
public class MvcConfig extends WebMvcConfigurerAdapter {
...
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/*.html").addResourceLocations("/WEB-INF/pages/");
    }

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

次のシナリオのSpring Bootまたは一般的なSpring MVCアプリ:

静的ファイルは、カスタムResourceHandlerRegistryに登録された場所から提供できます。静的リソースindex.htmlがあり、localhost:8080/index.htmlでアクセスできます。 localhost:8080 /リクエストをlocalhost:8080/index.htmlにリダイレクトするだけなので、次のコードを使用できます。

package in.geekmj.config;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;

import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
@EnableWebMvc
public class WebConfiguration extends WebMvcConfigurerAdapter {

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/",
        "classpath:/resources/", "classpath:/static/", "classpath:/public/" };

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
}

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addRedirectViewController("/", "/index.html");
}
}

localhost:8080 /にアクセスすると、localhost:8080/index.htmlにリダイレクトされます

2
Mrityunjay