この資料は、「エンタープライズ開発入門」シリーズの完結編です。以前の記事:
Spring MVC を例として使用して、MVC の最も単純な実装を見てみましょう。これを行うには、Spring Boot を使用して小さな Hello World アプリケーションを作成します。段階的に説明しますので、すべてを自分で繰り返すことができます。まず、小さなアプリケーションを作成し、それから分析します。
ステップ 1. IntelliJ IDEA で Spring Boot アプリケーションを作成します。
[ファイル] -> [新規] -> [プロジェクト…] を使用して新しいプロジェクトを作成します。開いたウィンドウの左側のメニューで Spring Initializr を選択し、プロジェクト SDK を選択します。[Initializr Service URL] オプションはデフォルトのままにします。
「次へ」ボタンをクリックします。次のウィンドウでは、プロジェクト設定を選択する必要があります。Maven プロジェクトを作成します。タイプとして Maven プロジェクトを選択します。「グループ」フィールドと「アーティファクト」フィールドに入力し、「次へ」をクリックします。
次のウィンドウでは、使用する Spring Framework コンポーネントを選択する必要があります。2 つあれば十分です。
- Spring Web は、Web アプリケーションを作成できるコンポーネントです。このコンポーネントには Spring MVC が含まれています。
- Thymeleaf はテンプレート エンジンです。Java から HTML ページにデータを送信できるようにするものです
次のウィンドウで、プロジェクトの名前とファイル システム内の場所を選択します。
[完了] ボタンをクリックします。プロジェクトが作成されます。最終的に次のプロジェクト構造になります。
ここでは、pom.xml (デプロイメント記述子) という 2 つのファイルに注目します。これにより、さまざまなフレームワークからプロジェクトにライブラリを迅速かつ簡単にインポートできるようになります。また、アプリケーションの構築方法を設定する場所でもあります。私たちのアプリケーションは Maven を使用して構築されており、pom.xml はこのビルド システムの構成ファイルです。Java クラスは MvcDemoApplication です。これはアプリケーションのメインクラスです。そこから Spring Boot プロジェクトを起動します。まず、このクラスの main メソッドを実行するだけです。このクラスのコードと pom.xml ファイルは次のとおりです: MvcDemoApplication:
@SpringBootApplication
public class MvcDemoApplication {
public static void main(String[] args) {
SpringApplication.run(MvcDemoApplication.class, args);
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.codegym/groupId>
<artifactId>mvc_demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mvc_demo</name>
<description>Spring MVC Demo</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
ステップ 2. Web ページの作成
私たちのアプリケーションは非常にシンプルになります。メイン ページ (index.html) があり、そこにはウェルカム ページ (greeting.html) へのリンクが含まれます。挨拶ページでは挨拶を表示します。URL パラメータを使用して、挨拶文で使用する名前をgreeting.html ページに渡します。アプリケーションのメイン ページ —index.html を作成しましょう。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Main page</title>
</head>
<body>
<p>Get your greeting <a href="/greeting">here</a></p>
</body>
</html>
次に、greeting.html ページを作成します。
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Getting Started: Serving Web Content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'Hello, ' + ${name} + '!'" />
</body>
</html>
私たちのページには
<p th:text="'Hello, ' + ${name} + '!'" />
タグがありますが、これは HTML では通常ではありません。
th
タグの属性は、Thymeleaf
p
テンプレート エンジンによって使用されるメカニズムです。タグの値は、「Hello, " + Java コードで設定する変数
p
の値」になります。
name
ステップ 3. コントローラーの作成
mvc_demo パッケージ内にコントローラー パッケージを作成し、その中にコントローラー HelloWorldController を作成します。
@Controller
public class HelloWorldController {
@RequestMapping(value = "/greeting")
public String helloWorldController(@RequestParam(name = "name", required = false, defaultValue = "World") String name, Model model) {
model.addAttribute("name", name);
return "greeting";
}
}
コードが非常に少ない一方で、多くのことが行われています。分析を始めましょう。@Controller アノテーションは、このクラスがコントローラーであることを示します。Spring では、コントローラーは特定の URL に向けられた HTTP リクエストを処理します。このクラスには、 @RequestMapping(value = "/greeting") アノテーションが付けられた helloWorldController メソッドがあります。このアノテーションは、このメソッドが /greeting URL に向けられた HTTP GET リクエストを処理することを示します。つまり、誰かが /greeting に移動すると、このメソッドが呼び出されます。このメソッドは文字列を返します。Spring MVC によれば、コントローラー メソッドはビューの名前を返す必要があります。次に、Spring は同じ名前の HTML ファイルを検索し、HTTP リクエストへの応答として返します。ご覧のように、 私たちのメソッドは 2 つの引数を取ります。それらを見てみましょう: パラメータ 1: @RequestParam(name = "name", required = false,defaultValue = "World") 文字列名。@RequestParam アノテーションは、文字列名パラメーターが URL パラメーターであることを示します。注釈がこの URL パラメーターがオプション (必須 = false) であることを示している場合、それが存在しない場合、文字列名パラメーターの値は "World" (defaultValue = "World") になります。存在する場合、URL パラメーターは「name」になります (name = 「name」)。ここでは理解できないことがたくさんあるかもしれません。いくつか例を挙げてみましょう。以下の表は、/greeting にアクセスするためのさまざまなオプション (URL パラメーターの有無にかかわらず) と、文字列名パラメーターの値がどのようになるかを示しています。
URLの例 |
文字列名の値 |
/挨拶 |
世界 |
/greeting?name=アミーゴ |
アミーゴ |
/greeting?name=ゾール |
ゾール |
パラメーター 2: 2 番目のパラメーターは Model モデルです。このパラメータは何らかのモデルです。このモデルはさまざまな内部属性で構成されます。各属性には名前と値があります。キーと値のペアのようなもの。このパラメータを使用して、Java コードから HTML ページにデータを送信できます。または、MVC 用語を使用して、モデルからビューにデータを送信します。あとは最後の行を調べるだけです。これは、Java から HTML に、またはモデルからビューにデータを送信する方法です。このメソッドには次の行が含まれています。
model.addAttribute("name", name);
ここでは、name という新しい属性を作成し、それに name パラメーターの値を割り当てます。思い出してください。最近、
<p th:text = "'Hello,' + ${name} + '!'" />
p タグの値は「Hello, 」 + name 変数の値であり、Java コードで設定することになると説明しました。次の行を使用してこの値を設定します
model.addAttribute("name", name);
ステップ5.実行
まず、MvcDemoApplication クラスの main メソッドを実行する必要があります。
ログでは、Web アプリケーションがポート 8080 で開始されたことがわかります。 これは、ブラウザーで
http://のページに移動できることを意味します。
localhost:8080 :
ここに、index.html ページがあります。挨拶ページへのリンクをたどってみましょう:
この遷移でコントローラーが呼び出されました。URL を通じてパラメーターは渡しませんでした。その結果、name 属性は、アノテーションで示されたデフォルト値 (「World」) になります。URL 経由でパラメータを渡してみます。
すべてが意図したとおりに機能します。ここで、name 変数のパスをトレースしてみます。
- ユーザーが URL に「name=Amigo」を渡しました ->
- コントローラーはアクションを処理し、name 変数を受け取り、受け取った値と等しい name というモデル属性を設定しました ->
- このデータはモデルから表示され、最終的にはgreeting.htmlページに表示され、ユーザーに表示されました。
今のところは以上です!
今日、私たちは MVC (モデル - ビュー - コントローラー) というかなり大きくて興味深いトピックについて知りました。エンタープライズ開発を始める前に知っておくべきことを紹介するシリーズはこれで終わりです。
コメント欄で、どのトピックに興味があるか教えてください。私たちが取り上げます。 |
GO TO FULL VERSION