Glassfishへのdeployと実行

メニューの[Run]→[Edit Configurations]から、 Glassfishへのdeployと実行の設定をします。

+をクリックして、[Glassfish Server]→[Local]を選択します。

Run1

Before launchのBuildは、次でArtifactを設定すると自動的に追加されます。

Run2

設定済みのArtifactを指定します。OKをクリックして設定完了です。

メニューから[Run]→[Run ‘アプリケーションサーバ名’]をクリックすると、Glassfishが起動し、WARファイルがdeployされます。deployが成功するとブラウザが開きますが、そこはまだ設定がされてないのでエラーになります。URLをhttp://localhost:8080/myfirstspringapp/sample1にすると、ページが表示されます。

Sample1 2

Artifactの設定

Artifactとは、プロジェクトの出力の設定や出力そのものを指します。

GlassfishにDeployするWARファイルを出力するArtifactを設定します。

Artifact

+をクリックして、「Web Application: Archive」を選択します。

Available Elementsに、出力できるものの一覧があるので、すべて選択し、右クリックから「Put into Default Locations」をクリックします。

最後にOKをクリックしてArtifactの設定は完了です。

コントローラの作成

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

パッケージを作成して、その中に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