1. 概要

これは、Javaベースの構成とXML構成の両方でSpringMVCプロジェクトをセットアップする方法を示す簡単なSpringMVCチュートリアルです。

Spring MVCプロジェクトのMaven依存関係については、SpringMVC依存関係の記事で詳しく説明されています。

2. Spring MVCとは何ですか?

名前が示すように、はModel-View-ControllerまたはMVCパターンを処理するSpringフレームワークのモジュールです。MVCパターンのすべての利点とSpringの利便性を兼ね備えています。

Springは、DispatcherServlet を使用して、フロントコントローラーパターンでMVCを実装します。

簡単に言うと、 DispatcherServlet は、リクエストを目的の宛先にルーティングするためのメインコントローラーとして機能します。 モデルはアプリケーションのデータに他ならず、ビューはさまざまなテンプレートエンジンのいずれかによって表されます。

この例では、JSPについて少し見ていきます。

3. Java構成を使用したSpringMVC

Java構成クラスを介してSpringMVCサポートを有効にするには、@EnableWebMvcアノテーション追加するだけです。

@EnableWebMvc
@Configuration
public class WebConfig {

    /// ...
}

これにより、コントローラーとマッピングの登録、タイプコンバーター、検証サポート、メッセージコンバーター、例外処理など、MVCプロジェクトに必要な基本的なサポートがセットアップされます。

この構成をカスタマイズする場合は、WebMvcConfigurerインターフェイスを実装する必要があります

@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {

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

   @Bean
   public ViewResolver viewResolver() {
      InternalResourceViewResolver bean = new InternalResourceViewResolver();

      bean.setViewClass(JstlView.class);
      bean.setPrefix("/WEB-INF/view/");
      bean.setSuffix(".jsp");

      return bean;
   }
}

この例では、 / WEB-INF /viewディレクトリから.jspビューを返すViewResolverBeanを登録しました。

ここで非常に重要なのは、 ViewControllerRegistry を使用して、URLとビュー名の間の直接マッピングを作成するビューコントローラーを登録できることです。 このように、2つの間にコントローラーは必要ありません。

コントローラクラスも定義してスキャンする場合は、コントローラを含むパッケージに@ComponentScanアノテーションを追加できます。

@EnableWebMvc
@Configuration
@ComponentScan(basePackages = { "com.baeldung.web.controller" })
public class WebConfig implements WebMvcConfigurer {
    // ...
}

この構成をロードするアプリケーションをブートストラップするには、イニシャライザークラスも必要です。

public class MainWebAppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(final ServletContext sc) throws ServletException {

        AnnotationConfigWebApplicationContext root = 
          new AnnotationConfigWebApplicationContext();
        
        root.scan("com.baeldung");
        sc.addListener(new ContextLoaderListener(root));

        ServletRegistration.Dynamic appServlet = 
          sc.addServlet("mvc", new DispatcherServlet(new GenericWebApplicationContext()));
        appServlet.setLoadOnStartup(1);
        appServlet.addMapping("/");
    }
}

Spring 5より前のバージョンでは、インターフェイスの代わりにWebMvcConfigurerAdapterクラスを使用する必要があることに注意してください。

4. XML構成を使用したSpringMVC

上記のJava構成の代わりに、純粋なXML構成を使用することもできます。

<context:component-scan base-package="com.baeldung.web.controller" />
<mvc:annotation-driven />    

<bean id="viewResolver" 
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <mvc:view-controller path="/" view-name="index" />

</beans>

純粋なXML構成を使用する場合は、web.xmlファイルを追加してアプリケーションをブートストラップする必要もあります。 このアプローチの詳細については、以前の記事をご覧ください。

5. コントローラとビュー

基本的なコントローラーの例を見てみましょう。

@Controller
public class SampleController {
    @GetMapping("/sample")
    public String showForm() {
        return "sample";
    }

}

対応するJSPリソースは、sample.jspファイルです。

<html>
   <head></head>

   <body>
      <h1>This is the body of the sample view</h1>	
   </body>
</html>

JSPベースのビューファイルはプロジェクトの/WEB-INF フォルダーの下にあるため、Springインフラストラクチャにのみアクセスでき、直接URLアクセスではアクセスできません。

6. ブート付きSpringMVC

Spring Bootは、Springプラットフォームへの追加であり、スタンドアロンの本番環境グレードのアプリケーションの開始と作成を非常に簡単にします。 Bootは、Springを置き換えることを目的としたものではなく、をより速く簡単に操作できるようにすることを目的としています。

6.1. スプリングブートスターター

新しいフレームワークは便利なスターター依存関係を提供します。これは依存関係記述子であり、特定の機能に必要なすべてのテクノロジーを取り入れることができます。

これらには、依存関係ごとにバージョンを指定する必要がなくなり、代わりにスターターが依存関係を管理できるようになるという利点があります。

開始する最も簡単な方法は、 spring -boot-starter-parent pom.xmlを追加することです。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.2</version>
</parent>

これにより、依存関係の管理が行われます。

6.2. スプリングブートエントリポイント

Spring Boot を使用して構築された各アプリケーションは、メインのエントリポイントを定義するだけで済みます。

これは通常、 main メソッドを持つJavaクラスであり、@SpringBootApplicationアノテーションが付けられています。

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

この注釈は、次の他の注釈を追加します。

  • @Configuration は、クラスをbean定義のソースとしてマークします。
  • @EnableAutoConfiguration は、クラスパスへの依存関係に基づいてBeanを自動的に追加するようにフレームワークに指示します。
  • @ComponentScan は、Applicationクラス以下と同じパッケージ内の他の構成とBeanをスキャンします。

Spring Bootを使用すると、セクション3で定義されているViewResolverを使用せずに、ThymeleafまたはJSPを使用してフロントエンドをセットアップできます。 spring-boot-starter-thymeleaf 依存関係をpom.xmlに追加することにより、Thymeleafが有効になり、追加の構成は必要ありません。

ブートアプリのソースコードは、いつものように、GitHubから入手できます。

最後に、Spring Bootの使用を開始する場合は、リファレンスイントロをご覧ください。

7. 結論

この記事では、Java構成を使用して、シンプルで機能的なSpringMVCプロジェクトを構成しました。

このSpringMVCチュートリアルの実装は、GitHubプロジェクトにあります。

プロジェクトがローカルで実行されている場合、 sample.jspにはhttp:// localhost:8080 / spring -mvc-basics /sampleからアクセスできます。