読者です 読者をやめる 読者になる 読者になる

かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

Spring Boot でメール送信する Web アプリケーションを作る ( 番外編 )( IntelliJ IDEA の Spring MVC View に URL 一覧を表示する )

Spring MVC View とは?

IntelliJ IDEA Ultimate Edition には Spring Framework 用の機能として Spring MVC View が提供されています。

IntelliJ IDEA 13と13.1の新機能 - Spring Frameworks
http://samuraism.com/wp-content/uploads/2013/12/idea13.html#Spring

 
以下の画像のように、画面下部の Spring View に Controller クラスの @RequestMapping に記述された URL 一覧が表示される機能のようです。

https://www.jetbrains.com/idea/whatsnew/img/13/spring_mvc.png

これは是非使いたい!と思い、現在作成中の ksbysample-webapp-email の Spring MVC View を表示させてみたのですが、何も表示されていませんでした。。。

f:id:ksby:20150617181157p:plain

表示させる方法を調査したので、以下に設定方法を記載します。

Spring View 自体を表示させるには?

最初に Spring View 自体を表示させる手順を記載します ( 特に意識はしていなかったのですが、いつの間にか Spring View が表示されていました ) 。

  1. IntelliJ IDEA のメインメニューから「File」-「Project Structure...」を選択します。

  2. 「Project Structure」ダイアログが表示されます。画面左側のリストから「Project Settings」-「Modules」を選択します。

  3. 画面中央のリストに Project 名が表示されているので、それを選択後、リストの上の「+」ボタンをクリックします。

    f:id:ksby:20150617183326p:plain

  4. 「+」ボタンをクリックすると一覧が表示されるので、その中から「Spring」を選択します。

    f:id:ksby:20150617183537p:plain

  5. 画面中央のリストの Project 名の下に「Spring」が表示されます。追加された「Spring」を選択した後、今度は画面右側上部にある「+」ボタンをクリックします。

    f:id:ksby:20150617183827p:plain

  6. 「New Application Context」ダイアログが表示されます。「Name」は表示された時の "Spring Application Context" のままとし、画面中央に表示されるファイルを全てチェックした後「OK」ボタンをクリックします。

    f:id:ksby:20150617184021p:plain

  7. 「Project Structure」ダイアログに戻り、画面右側にチェックしたファイルが表示されます。「OK」ボタンをクリックしてダイアログを閉じます。

    f:id:ksby:20150617184909p:plain

  8. メイン画面に戻ると画面下部に「Spring」タブが表示され、クリックすると Spring View が表示されます。

    f:id:ksby:20150617185514p:plain

    • 上の画像は Spring Beans View です。「New Application Context」ダイアログでチェックした XMLファイル、Java Configuration クラスに定義されている Bean が表示されます。

Spring MVC View に URL 一覧を表示する

ここからが本題です。

  1. IntelliJ IDEA のメインメニューから「File」-「Project Structure...」を選択します。

  2. 「Project Structure」ダイアログが表示されます。画面左側のリストから「Project Settings」-「Modules」を選択します。

  3. 画面中央のリストに Project 名が表示されているので、それを選択後リストの上の「+」ボタンをクリックします。

    f:id:ksby:20150617190558p:plain

  4. 「+」ボタンをクリックすると一覧が表示されるので、その中から「Web」を選択します。

    f:id:ksby:20150617190725p:plain

  5. 画面中央のリストの Project 名の下に「Web」が表示されます。画面左側の「Deployment Descriptors」の鉛筆アイコンのボタンをクリックします。

    f:id:ksby:20150617191434p:plain

  6. 「Deployment Descriptor Location」ダイアログが表示されます。「Web Module Deployment Descriptor (web.xml)」の値を以下のように変更し、「OK」ボタンをクリックします。

    f:id:ksby:20150617193500p:plain

    C:\project-springboot\ksbysample-webapp-email\.idea\web\WEB-INF\web.xml

    C:\project-springboot\ksbysample-webapp-email\web\WEB-INF\web.xml

    ※ ".idea" を取り除きます。

  7. 「Project Structure」ダイアログに戻ります。今度は「Web Resource Directories」のリストに表示されているアイテムを選択後、鉛筆アイコンのボタンをクリックします。

    f:id:ksby:20150617193927p:plain

  8. 「Web Resource Directory Path」ダイアログが表示されます。「Web Resource Directory Path」の値を以下のように変更し、「OK」ボタンをクリックします。

    f:id:ksby:20150617194729p:plain

    C:\project-springboot\ksbysample-webapp-email\.idea\web

    C:\project-springboot\ksbysample-webapp-email\web

    ※ ".idea" を取り除きます。

  9. 「Directory Not Found」ダイアログが表示されます。「Yes」ボタンをクリックしてディレクトリを作成します。

    f:id:ksby:20150617194855p:plain

  10. 「Project Structure」ダイアログに戻ります。「OK」ボタンをクリックしてダイアログを閉じます。

  11. メイン画面に戻ります。以下のように Project View のルートの下に web ディレクトリが作成されています。

    f:id:ksby:20150617195241p:plain

  12. /.idea の下に web ディレクトリが作成されているので削除します。

  13. /web/WEB-INF の下に dispatcher-servlet.xml を新規作成します。作成後、リンク先の内容 に変更します。

  14. /web/WEB-INF の下の web.xmlリンク先の内容 に変更します。

  15. 以上で設定は完了です。Spring MVC View を表示すると、以下の画像のように URL 一覧が表示されます。2番目、3番目のリストに表示されている URL をクリックすると対応するソースコードが開きます。

    f:id:ksby:20150617202538p:plain

作成した web ディレクトリは jar ファイルに出力されないか?

ルート直下に作成したディレクトリは、static は出力されなかったので web も出力されないはずです。確認します。

  1. Gradle projects View から build タスクを実行して、C:\project-springboot\ksbysample-webapp-email\build\libs の下に ksbysample-webapp-email-0.0.1-SNAPSHOT.jar を生成します。

  2. ファイル名を ksbysample-webapp-email-0.0.1-SNAPSHOT.jar → ksbysample-webapp-email-0.0.1-SNAPSHOT.zip へ変更して Explorer で中を表示します。

    f:id:ksby:20150617210509p:plain

    • web ディレクトリは出力されていませんでした。
  3. ファイル名を ksbysample-webapp-email-0.0.1-SNAPSHOT.jar に戻します。

上の設定を行うとソースファイルにアイコンが表示されます

  1. この設定を行うとソースファイルを開いた時に左側にアイコンが表示されるようになります。

    ■設定前
    f:id:ksby:20150617203800p:plain

    ■設定後
    f:id:ksby:20150617204516p:plain

    • おそらく上の "C" が付いたアイコンはインジェクション可能なクラスであることを示し、下の矢印が付いたアイコンはインジェクションされていることを示していると思われます。
    • 下の矢印が付いたアイコンをクリックすると、インジェクションされているクラスのソースファイルへジャンプします。

ブランチの作成、commit、Push、Pull Request、マージ

今回の変更は GitHub にも反映しておきます。

  1. IntelliJ IDEA で 1.0.x-display-springmvcview ブランチを作成します。

  2. Project View のルートでコンテキストメニューを表示して「Run 'Tests in 'ksbysample...' with Coverage」を選択し、テストが全て成功することを確認します。

  3. Gradle projects View から build タスクを実行し、"BUILD SUCCESSFUL" が出力されることを確認します。

  4. commit します。

  5. GitHub へ Push、1.0.x-display-springmvcview -> 1.0.x へ Pull Request、1.0.x でマージ、1.0.x-display-springmvcview ブランチを削除、をします。

ソースコード

dispatcher-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <context:component-scan base-package="ksbysample.webapp.email" />

</beans>
  • <context:component-scan base-package="..." /> の base-package にはプロジェクトのルートパッケージをを記入します。この設定はあくまでも IntelliJ IDEA の Spring MVC View に URL 一覧を表示させるためのもので、実際の処理には何の影響もありません。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>
  • これも実際の処理には何の影響もありません。あくまでも IntelliJ IDEA の Spring MVC View に URL 一覧を表示させるためのものです。