SpringMVCチュートリアル
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からアクセスできます。