= Spring =
Spring helps development teams everywhere build simple, portable, fast and flexible JVM-based systems and applications.
http://spring.io/guides
http://spring.io/guides/gs/serving-web-content/
== REST service ==
spring.io/guides/gs/rest-service/
=== Structure ===
{{{
.
|-- pom.xml
|-- src
| `-- main
| `-- java
| `-- hello
| |-- Application.java
| |-- Greeting.java
| `-- GreetingController.java
`-- target
|-- classes
| `-- hello
| |-- Application.class
| |-- Greeting.class
| `-- GreetingController.class
|-- generated-sources
| `-- annotations
|-- gs-rest-service-0.1.0.jar
|-- gs-rest-service-0.1.0.jar.original
`-- maven-archiver
`-- pom.properties
}}}
=== Steps ===
* mkdir -p /tmp/greetingSpring
* mkdir -p /tmp/greetingSpring/src/main/java/hello
* mkdir -p /tmp/greetingSpring/target
* cd /tmp/greetingSpring
pom.xml
{{{#!highlihht xml
4.0.0
org.springframework
gs-rest-service
0.1.0
org.springframework.boot
spring-boot-starter-parent
1.1.5.RELEASE
org.springframework.boot
spring-boot-starter-web
hello.Application
maven-compiler-plugin
2.3.2
org.springframework.boot
spring-boot-maven-plugin
spring-releases
http://repo.spring.io/libs-release
spring-releases
http://repo.spring.io/libs-release
}}}
src/main/java/hello/Application.java
{{{#!highlight java
package hello;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
}}}
src/main/java/hello/Greeting.java
{{{#!highlight java
package hello;
public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
}}}
src/main/java/hello/GreetingController.java
{{{#!highlight java
package hello;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", required=false, defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
}}}
Build with
* mvn clean compile package
Run with:
* jar -tf target/gs-rest-service-0.1.0.jar # check JAR contents
* java -jar target/gs-rest-service-0.1.0.jar
* open URL http://localhost:8080/greeting
== Tomcat REST service ==
Structure
{{{
.
|-- pom.xml
|-- src
`-- main
`-- java
`-- hello
|-- Application.java
|-- Greeting.java
`-- GreetingController.java
}}}
'''pom.xml'''
{{{#!highlight xml
4.0.0
org.springframework
gs-rest-service-tomcat
0.1.0
war
org.springframework.boot
spring-boot-starter-parent
1.1.5.RELEASE
org.springframework.boot
spring-boot-starter-web
compile
hello.Application
maven-compiler-plugin
2.3.2
spring-releases
http://repo.spring.io/libs-release
spring-releases
http://repo.spring.io/libs-release
}}}
'''src/main/java/hello/Application.java'''
{{{#!highlight java
package hello;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.annotation.Configuration;
@ComponentScan
@EnableAutoConfiguration
@Configuration
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(appClass, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(appClass);
}
private static Class appClass = Application.class;
}
}}}
'''src/main/java/hello/Greeting.java'''
{{{#!highlight java
package hello;
public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
}}}
'''src/main/java/hello/GreetingController.java'''
{{{#!highlight java
package hello;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
private static final String template = "Hello Tomcat, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greetingTomcat")
public Greeting greeting(@RequestParam(value="name", required=false, defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
}}}
=== Build and deploy ===
* mvn clean compile package install
* cp target/gs-rest-service-tomcat-0.1.0.war /usr/local/tomcat/webapps/
* cp target/gs-rest-service-tomcat-0.1.0.war /opt/apache-tomcat-7.0.53/webapps/ # in alternative
* Open http://localhost:8080/gs-rest-service-tomcat-0.1.0/greetingTomcat