eclipse で Gradle プロジェクトの Spring 環境をつくる(part 1)

こんにちわ、最近平和な日々を過ごすほげPGです。
今回、eclipse上でGradleプロジェクトを作り、springの環境を作りたいと思います。
各モジュールのバージョンは以下の通り
eclipse 4.6.2
gradle 2.14.1
spring 4.3.7.RELEASE
jdk 1.8
tomcat 8.0
フォルダ構成

src
 main
  java
  resources
  webapp
   resources
   WEB-INF
    views

1、Gradleプロジェクトの作成

eclipse の新規プロジェクトからGradleプロジェクトを選択し、次へ押下

プロジェクト名を指定し、完了押下

しばらくすると、プロジェクトが作成される

2、必要なフォルダを作成し、Gradleリフレッシュ

フォルダ作成:src/main/webapp、src/main/resources

src/main/webapp配下にindex.jspを作成

<html>
<body>
Hoge
</body>
</html>

build.gradle を修正

apply plugin: 'java'
apply plugin: 'war'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
    jcenter()
}
dependencies {
    compile 'org.springframework:spring-webmvc:4.3.7.RELEASE'
    compile 'org.slf4j:slf4j-api:1.7.21'
    compile 'org.slf4j:slf4j-log4j12:1.7.21'
    providedCompile 'javax.servlet:javax.servlet-api:3.0.1'
    providedCompile 'javax.servlet:jsp-api:2.0'
    testCompile 'junit:junit:4.12'
}

Gradleリフレッシュ

4、プロジェクトの設定

プロジェクトのファセットをjava1.8、動的Webモジュール3.0に設定

Webデプロイメント・アセンブリーを設定
/WebContentを削除し、/src/main/webappを追加

コンテキストパスを変更

ほげる(tomcatに追加し起動確認)


5、各種設定とコントローラなど作成

src/main/webapp/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp"
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 version="3.1">
 <filter>
  <filter-name>CharacterEncodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>utf-8</param-value>
  </init-param>
  <init-param>
   <param-name>forceEncoding</param-name>
   <param-value>true</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>CharacterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 <servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/spring-context.xml</param-value>
  </init-param>
 </servlet>
 <servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>
</web-app>

src/main/webapp/WEB-INF/spring-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 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.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context.xsd
 http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 <mvc:annotation-driven />
 <context:component-scan base-package="jp.co.ois.hoge" />
 <bean
 class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="prefix" value="/WEB-INF/views/" />
 <property name="suffix" value=".jsp" />
 </bean>
 <mvc:resources mapping="/resources/**" location="/resources/" />
</beans>

src/main/java/jp/co/ois/hoge/HogeController.java

package jp.co.ois.hoge;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HogeController {
	private static final Logger log = LoggerFactory.getLogger(HogeController.class);
	@ModelAttribute("hogeForm")
	public HogeForm createForm() {
		log.debug("called.");
		return new HogeForm();
	}
	@RequestMapping("/top")
	public String top(Model model) {
		log.debug("called.");
		return "hoge";
	}
	@RequestMapping("/names")
	public String names(HogeForm form, BindingResult result, Model model) {
		log.debug("called. {}", result.getErrorCount());
		String s = form.getName1() + form.getName2();
		log.debug("s = [{}]", s);
		model.addAttribute("result", s);
		return "hoge";
	}
}

src/main/java/jp/co/ois/hoge/HogeForm.java

package jp.co.ois.hoge;
public class HogeForm {
	private String name1;
	private String name2;
	public String getName1() {
		return name1;
	}
	public void setName1(String name1) {
		this.name1 = name1;
	}
	public String getName2() {
		return name2;
	}
	public void setName2(String name2) {
		this.name2 = name2;
	}
}

src/main/webapp/WEB-INF/views/hoge.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Are you hoge?</title>
</head>
<body>
<form:form modelAttribute="hogeForm" servletRelativeAction="/names" method="POST">
名前1 <br/>
<form:input path="name1" />
 <br/>
名前2: <br/>
<form:input path="name2" />
 <br/>
 <input type="submit" value="ほげ" />
</form:form>
<hr>
${result}
</body>
</html>

src/main/resources/log4j.properties

log4j.rootLogger = INFO, Console
log4j.logger.jp.co.ois.hoge = DEBUG
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%-5p (%F:%L) %M() - %m%n

ほげる(tomcat起動確認)



ほげ!(good)

プロジェクト一式は以下に置きました。

http://www.ois-yokohama.co.jp/oisblog2018/file/Hogedle.zip

今回はここまで。次回は Eclipse上で設定したことをbuild.gradle に記載してEclipseプロジェクトを作成したいと思います。では。

\ 最新情報をチェック /