山崎屋の技術メモ

IT業界で働く中でテクノロジーを愛するSIerのシステムエンジニア👨‍💻 | AndroidとWebアプリの二刀流🧙‍♂️ | コードの裏にあるストーリーを綴るブログ執筆者✍️ | 日々進化するデジタル世界で学び続ける探究者🚀 | #TechLover #CodeArtisan、気になること、メモしておきたいことを書いていきます。

【SpringMVC】 簡単なサンプル

f:id:yyama1556:20160812103358p:plain

Eclipse を使用して SpringMVC で簡単なサンプルを作成する。勉強のため Spring bootは使用しない。

各種バージョンは次のとおり。

OS : Windows7 64bit
Java : JDK1.8
Eclipse : 4.6(neon)
Spring : 4.3.2

Project の作成

Project エクスプローラで空白部分を右クリック → New → Other を選択してNew画面を出す。

Spring フォルダにある Spring Legacy Project を選択して Next ボタンクリック。
f:id:yyama1556:20160820121840p:plain

New Spring Legacy Project 画面が表示される。 Project name に適当に Sample とか入れて、Templats に Spring MVC Project を選択する。
f:id:yyama1556:20160820122536p:plain

次の画面でトップレベルのパッケージを指定する。ここでは org.yyama.sample とした。
f:id:yyama1556:20160820122756p:plain

Finish を押すとプロジェクトが作成される。

フォルダ構成。

C:.
│  .classpath
│  .project
│  .springBeans
│  pom.xml
│
├─.settings
│      org.eclipse.jdt.core.prefs
│      org.eclipse.m2e.core.prefs
│      org.eclipse.wst.common.component
│      org.eclipse.wst.common.project.facet.core.xml
│      org.eclipse.wst.validation.prefs
│      org.springframework.ide.eclipse.beans.core.prefs
│      org.springframework.ide.eclipse.core.prefs
│
├─src
│  ├─main
│  │  ├─java
│  │  │  └─org
│  │  │      └─yyama
│  │  │          └─sample
│  │  │                  HomeController.java
│  │  │
│  │  ├─resources
│  │  │  │  log4j.xml
│  │  │  │
│  │  │  └─META-INF
│  │  └─webapp
│  │      ├─resources
│  │      └─WEB-INF
│  │          │  web.xml
│  │          │
│  │          ├─classes
│  │          ├─spring
│  │          │  │  root-context.xml
│  │          │  │
│  │          │  └─appServlet
│  │          │          servlet-context.xml
│  │          │
│  │          └─views
│  │                  home.jsp
│  │
│  └─test
│      ├─java
│      │  └─org
│      │      └─yyama
│      │          └─sample
│      └─resources
│              log4j.xml
│
└─target
    ├─classes
    │  │  log4j.xml
    │  │
    │  └─org
    │      └─yyama
    │          └─sample
    │                  HomeController.class
    │
    ├─m2e-wtp
    │  └─web-resources
    │      └─META-INF
    │          │  MANIFEST.MF
    │          │
    │          └─maven
    │              └─org.yyama
    │                  └─sample
    │                          pom.properties
    │                          pom.xml
    │
    └─test-classes
        │  log4j.xml
        │
        └─org
            └─yyama
                └─sample

Pom.xml のソフトウェアのバージョンを編集する

デフォルトでは一昔前のバージョンが指定されているので、2016 年 8 月 20 日時点の最新バージョンに修正する。

修正前(修正箇所抜粋)

	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>

修正後(修正箇所抜粋)

	<properties>
		<java-version>1.8</java-version>
		<org.springframework-version>4.3.2.RELEASE</org.springframework-version>
		<org.aspectj-version>1.8.9</org.aspectj-version>
		<org.slf4j-version>1.7.21</org.slf4j-version>
	</properties>

Tomcat サーバーに追加する

プロジェクトができたので、EclipseTomcat 上で動かせるように設定する。

Servers ウィンドウに表示されている Tomcat を右クリックして Add and Remove をクリック。

Add And Remove 画面が表示される。
f:id:yyama1556:20160820130739p:plain

Sample を右側のリストに Add して Finish を選択する。
f:id:yyama1556:20160820130911p:plain

実行する

Servers ウィンドウの Tomcat サーバーを右クリックして Start を選択する。

起動に成功すると次のようなメッセージが表示される。

8 20, 2016 1:18:16 午後 org.apache.tomcat.util.digester.SetPropertiesRule begin
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Sample' did not find a matching property.
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: Server version:        Apache Tomcat/9.0.0.M9
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: Server built:          Jul 4 2016 18:22:47 UTC
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: Server number:         9.0.0.0
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: OS Name:               Windows 7
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: OS Version:            6.1
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: Architecture:          amd64
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: Java Home:             C:\Program Files\Java\jre1.8.0_101
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: JVM Version:           1.8.0_101-b13
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: JVM Vendor:            Oracle Corporation
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: CATALINA_BASE:         C:\opt\Eclipse\workspaces\workspace1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: CATALINA_HOME:         C:\opt\tomcat\apache-tomcat-9.0.0.M9
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: Command line argument: -Dcatalina.base=C:\opt\Eclipse\workspaces\workspace1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: Command line argument: -Dcatalina.home=C:\opt\tomcat\apache-tomcat-9.0.0.M9
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: Command line argument: -Dwtp.deploy=C:\opt\Eclipse\workspaces\workspace1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: Command line argument: -Djava.endorsed.dirs=C:\opt\tomcat\apache-tomcat-9.0.0.M9\endorsed
8 20, 2016 1:18:16 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: Command line argument: -Dfile.encoding=utf-8
8 20, 2016 1:18:16 午後 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre1.8.0_101\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre1.8.0_101/bin/server;C:/Program Files/Java/jre1.8.0_101/bin;C:/Program Files/Java/jre1.8.0_101/lib/amd64;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\opt\Eclipse;;.
8 20, 2016 1:18:16 午後 org.apache.coyote.AbstractProtocol init
情報: Initializing ProtocolHandler ["http-nio-8080"]
8 20, 2016 1:18:17 午後 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
情報: Using a shared selector for servlet write/read
8 20, 2016 1:18:17 午後 org.apache.coyote.AbstractProtocol init
情報: Initializing ProtocolHandler ["ajp-nio-8009"]
8 20, 2016 1:18:17 午後 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
情報: Using a shared selector for servlet write/read
8 20, 2016 1:18:17 午後 org.apache.catalina.startup.Catalina load
情報: Initialization processed in 1113 ms
8 20, 2016 1:18:17 午後 org.apache.catalina.core.StandardService startInternal
情報: サービス Catalina を起動します
8 20, 2016 1:18:17 午後 org.apache.catalina.core.StandardEngine startInternal
情報: Starting Servlet Engine: Apache Tomcat/9.0.0.M9
8 20, 2016 1:18:19 午後 org.apache.jasper.servlet.TldScanner scanJars
情報: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
8 20, 2016 1:18:19 午後 org.apache.catalina.core.ApplicationContext log
情報: No Spring WebApplicationInitializer types detected on classpath
INFO : org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started
8 20, 2016 1:18:19 午後 org.apache.catalina.core.ApplicationContext log
情報: Initializing Spring root WebApplicationContext
INFO : org.springframework.web.context.support.XmlWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Sat Aug 20 13:18:19 JST 2016]; root of context hierarchy
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/spring/root-context.xml]
INFO : org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 601 ms
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': initialization started
8 20, 2016 1:18:20 午後 org.apache.catalina.core.ApplicationContext log
情報: Initializing Spring FrameworkServlet 'appServlet'
INFO : org.springframework.web.context.support.XmlWebApplicationContext - Refreshing WebApplicationContext for namespace 'appServlet-servlet': startup date [Sat Aug 20 13:18:20 JST 2016]; parent: Root WebApplicationContext
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/spring/appServlet/servlet-context.xml]
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/],methods=[GET]}" onto public java.lang.String org.yyama.sample.HomeController.home(java.util.Locale,org.springframework.ui.Model)
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: WebApplicationContext for namespace 'appServlet-servlet': startup date [Sat Aug 20 13:18:20 JST 2016]; parent: Root WebApplicationContext
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: WebApplicationContext for namespace 'appServlet-servlet': startup date [Sat Aug 20 13:18:20 JST 2016]; parent: Root WebApplicationContext
INFO : org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/resources/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': initialization completed in 1522 ms
8 20, 2016 1:18:21 午後 org.apache.coyote.AbstractProtocol start
情報: Starting ProtocolHandler [http-nio-8080]
8 20, 2016 1:18:21 午後 org.apache.coyote.AbstractProtocol start
情報: Starting ProtocolHandler [ajp-nio-8009]
8 20, 2016 1:18:21 午後 org.apache.catalina.startup.Catalina start
情報: Server startup in 4436 ms

ブラウザを起動し URL に http://localhost:8080/sample を入力してみると。

f:id:yyama1556:20160820132050p:plain

無事起動できた。

原因不明のエラーで起動できない場合は以下の記事の内容を試してみる。
yyama1556.hateblo.jp

簡単なアンケートアプリも作ってみた。
yyama1556.hateblo.jp


以上。


Spring 関連記事へのリンク集つくりました。