コントローラの作成

リクエストを処理するコントローラを作成します。

パッケージを作成して、その中にTopControllerクラスを作成します。

Controller

9行目: TopControllerクラスがコントローラであることを示します。

10行目: どのURLを処理するか指定します。「/」と指定すると、全てのURLを処理することになります。

12行目: sample1メソッドが、10行目で指定したURLのうちどのURLを処理するか指定します。つまり「/sample1」に対する処理を行うことになります。

13行目: メソッド名はJavaの文法に合っていればなんでもOKです。Springの設定に関わるといったことはありません。

14行目: 戻り値はViewの名前で、WEB-INF/templates/sample1.htmlを指定したことになります。

テンプレートの作成

テンプレートは、TymeleafConfigで指定したパスに作成します。

Sample1

2行目: Thymeleafのネームスペースが必要です。

TymeleafはHTMLテンプレートエンジンとはいっても、well-formedな文書しか処理ができません。つまり、HTML5で許されている閉じタグの省略ができません。例えば4行目のように単独で現れるタグは「/>」で終わらせるようにします。

このテンプレートではまだTymeleafConfigの機能を使っていません。まずはこのテンプレートがそのまま表示されるようにします。

Thymeleafの設定

ThymeleafはHTMLテンプレートエンジンで、Viewとして利用します。

Springでは、ViewResolverを実装したBeanを登録することでViewとして利用できます。ThymeleafViewResolverがそのクラスになります。

パッケージを作成し、その中にTymeleafConfigクラスを作成します。

12行目: @Configurationは、このクラスで設定を行うことを示します。mvc-dispatcher-servlet.xmlに記述する代わりに、Javaで設定していくことになります。

14行目: @Beanで、Bean登録を行うメソッドであることを示します。

17行目: テンプレートの置き場所を指定します。

30行目: 戻り値となるインスタンスが登録されます。

ThymeleafConfig
※↑はクラス名にtypoがあります。ThymeleafConfig.javaが正しいです。ただ、クラス名に特に意味は無い(@Configurationがついていれば設定用のクラスになる)ため、このままでも動作します。

DispatcherServletの設定

SpringのWeb MVCフレームワークは、所謂「フロントコントローラ」を採用しています。フロントコントローラがリクエストを適切なコントローラに渡し、コントローラが出力するデータをビューが表示するという仕組みです。

Mvc

SpringのWeb MVCにおける処理の流れ(http://docs.spring.io/spring/docs/4.0.5.RELEASE/spring-framework-reference/html/mvc.html#mvc-servletより引用)

そのフロントコントローラとなるのがDispatcherServletです。Application ServerへのリクエストがDispatcherServletに渡るように、web.xmlに設定します。

8行目から12行目でDispatcherServletをmvc-dispatcherという名前で登録します。13行目から16行目で、mvc-dispatcherがどのURLを処理するかを設定します。すべてのURLを処理するために「/」を指定します。

次に、DispatcherServletの設定ファイルを作成します。WEB-INFを右クリックしてSpring Configをクリックします。

Spring config

ファイル名は「mvc-dispatcher-servlet.xml」とします。これには下記の2行を追加します。

  • <context:component-scan base-package=”net.teachingprogramming.myfirstspringapp” />
  • <context:annotation-config />

1行目は、DI(Dependency Injection, 依存性の注入)を使うクラスをannotationに基いて自動的に追加する設定です。base-packageで指定されたパッケージ(及びサブパッケージ)にあるクラスを検索します。
2行目は各種設定をannotationで行うための設定です。これにより、各種設定をJavaのプログラムとして記述することができます。

追加した直後はcontextというネームスペースがないためエラーの状態になっています。カーソルを合わせてoption+enter(Macの場合)で追加してくれます。

Context

最終的にできあがるmvc-dispatcher-servlet.xmlは次のようになります。

まだパッケージを作っていないためエラーとなっていますが、後で作るのでこのままで大丈夫です。

dependenciesの追加

Gradleで依存関係を設定します。

build.gradleを開き、dependenciesに以下の3行を追加します。

  • compile ‘org.springframework:spring-context:4.0.5.RELEASE’
  • compile ‘org.springframework:spring-webmvc:4.0.5.RELEASE’
  • compile ‘org.thymeleaf:thymeleaf-spring4:2.1.3.RELEASE’

1つ目と2つ目はSpringのライブラリ、3つ目はThymeleafのライブラリです。ThymeleafはHTMLテンプレートエンジンです。ThymeleafのテンプレートはHTMLファイルそのもの、というところが利点です。

Dependencies

GradleのTool Windowを開いて、更新ボタンを押します。

Gradle tool window

ライブラリがダウンロードされます。

External libraries

Facetの設定

Facetとは、プロジェクトにどのようなフレームワークや技術を用いるかを指定するものです。指定することによってファイルの自動生成等ができるようになります。

Facetの設定は[File]→[Project Structure]から行います。

ここでは、SpringとWebを追加します。

Facet

Webの追加によって、web.xmlが生成されます。

Facet web.xml

GlassFIshの準備

Application Serverとして、今回はGlassfishを使うことにします。

http://dlc.sun.com.edgesuite.net/glassfish/4.0/release/からダウンロードできます。多言語版であるglassfish-4.0-ml.zipを使います。

ダウンロードしたら、適当な場所に展開しておきます。

Glassfishの管理者パスワードを設定します。binにあるasadminコマンドで設定します。

% bin/asadmin change-admin-password
Enter admin user name [default: admin]> (エンターのみ)
Enter the admin password> (エンターのみ)
Enter the new admin password> (設定するパスワードを入力しエンター)
Enter the new admin password again> (再度、パスワードを入力しエンター)
Command change-admin-password executed successfully.

IntelliJ Ideaを起動して、PreferencesのApplication Serversで登録します。

Preferences

+をクリックして、Glassfish Serverをクリックし、展開したパスをGlassFish Homeに設定します。

Glassfish Server

これでIDEから起動やデプロイができるようになります。