Gradle – Spring 4 MVC Hello Worldの例 – 注釈
このチュートリアルでは、//spring-mvc/gradle-spring-mvc-web-project-example/[Gradle + Spring MVC XMLの例]を使用して、@ JavaConfigアノテーション設定をサポートするようにXMLを書き換えますファイル。
P.Sこの例は、Tomcat 7またはJetty 9.
のようなServlet 3.0+コンテナのみで動作します。
使用される技術:
-
Gradle 2.0
-
Spring 4.1.6.RELEASE
-
Tomcat 7またはJetty 9
-
Eclipse 4.4
-
JDK 1.7
-
ログバック1.1.3
-
ブートストラップ3
1.プロジェクトの構成
プロジェクトリンクをダウンロードする:#download[ソースコード]とプロジェクトフォルダの構造を確認する:
__P.S `web.xml`やSpringのXML設定ファイルのようなXMLファイルはもうありません。
2. Gradle
2.1 build.gradleファイルを見直してください。これは自明です。
build.gradle
apply plugin: 'java' apply plugin: 'war' apply plugin: 'eclipse-wtp'//apply plugin: 'jetty'//too old, Jetty 6, use gretty plugin apply plugin: 'org.akhikhl.gretty' //JDK 7 sourceCompatibility = 1.7 targetCompatibility = 1.7 repositories { mavenLocal() mavenCentral() } dependencies { compile 'ch.qos.logback:logback-classic:1.1.3' compile 'org.springframework:spring-webmvc:4.1.6.RELEASE' compile 'javax.servlet:jstl:1.2' //include in compile only, exclude in the war providedCompile 'javax.servlet:servlet-api:2.5' } //Gretty Embedded Jetty buildscript { repositories { jcenter() } dependencies { classpath 'org.akhikhl.gretty:gretty:+' } } //Don't use Jetty8, even it's a servlet 3.0+ container, //but not support non-jar WebApplicationInitializer scanning.//It will cause "No Spring WebApplicationInitializer types detected on classpath" gretty { port = 8080 contextPath = 'spring4' servletContainer = 'jetty9'//tomcat7 or tomcat8 } //For Eclipse IDE only eclipse { wtp { component { //define context path, default to project folder name contextPath = 'spring4' } } }
2.2このプロジェクトはEclipse IDEをサポートします。これで、プロジェクトをEclipse IDEにインポートできます。
your-project$ gradle eclipse
3. Spring @Configuration
Spring @ConfigurationとそのXML同等物。
3.1サービスクラスをスキャンするためのSpringアノテーション設定。
SpringRootConfig.java
package com.mkyong.helloworld.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan({ "com.mkyong.helloworld.service" }) public class SpringRootConfig { }
XMLに相当する
spring-core-config.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" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <context:component-scan base-package="com.mkyong.helloworld.service"/> </beans>
3.2抽象クラス `WebMvcConfigurerAdapter`を拡張します。
SpringWebConfig.java
package com.mkyong.helloworld.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; @EnableWebMvc//<mvc:annotation-driven/> @Configuration @ComponentScan({ "com.mkyong.helloworld.web" }) public class SpringWebConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/** ** ") .addResourceLocations("/resources/"); } @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/views/jsp/"); viewResolver.setSuffix(".jsp"); return viewResolver; } }
XMLに相当する
spring-web-config.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" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <context:component-scan base-package="com.mkyong.helloworld.web"/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/views/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <mvc:resources mapping="/resources/** ** " location="/resources/"/> <mvc:annotation-driven/> </beans>
4.サーブレット3.0コンテナ
`ServletInitializer`クラスを作成すると、サーブレット3.0のコンテナがこのクラスを受け取り、それを自動的に実行します。これは `web.xml`の置換クラスです
package com.mkyong.helloworld.servlet3; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; import com.mkyong.helloworld.config.SpringRootConfig; import com.mkyong.helloworld.config.SpringWebConfig; public class MyWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[]getRootConfigClasses() { return new Class[]{ SpringRootConfig.class }; } @Override protected Class<?>[]getServletConfigClasses() { return new Class[]{ SpringWebConfig.class }; } @Override protected String[]getServletMappings() { return new String[]{ "/" }; } }
XMLに相当する
web.xml
<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__2__5.xsd" version="2.5"> <display-name>Gradle + Spring MVC Hello World</display-name> <description>Spring MVC web application</description> <!-- For web context --> <servlet> <servlet-name>hello-dispatcher</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>hello-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- For root context --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-core-config.xml</param-value> </context-param> </web-app>
5.デモ
5.1このプロジェクトを実行する。埋め込まれたJettyコンテナを起動する `gradle jettyRun`を発行します。
ターミナル
your-project$ gradle jettyRun 21:56:34 INFO Jetty 9.2.10.v20150310 started and listening on port 8080 21:56:34 INFO spring4 runs at: 21:56:34 INFO http://localhost:8080/spring4 Press any key to stop the server. > Building 87% > :jettyRun
ソースコードをダウンロードする
ダウンロードする – リンク://wp-content/uploads/2015/06/spring4-mvc-gradle-annotation-hello-world.zip[spring4-mvc-gradle-annotation-hello-world.zip](39 KB)
GitHubリンク –
spring4-mvc-gradle-annotation-hello-world.git
参考文献
Web MVC参照]。
https://docs.gradle.org/current/dsl/org.gradle.plugins.ide.eclipse.model.EclipseWtp.html
[Gradle
-
EclipseWtp]。
https://docs.gradle.org/current/userguide/eclipse__plugin.html
[Gradle –
Eclipseプラグイン]。
https://docs.gradle.org/current/userguide/jetty__plugin.html
[Gradle –
Jetty Plugin]。
Gradle – Gretty plugin
Gretty configuration]