Spring
Spring helps development teams everywhere build simple, portable, fast and flexible JVM-based systems and applications.
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
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.springframework</groupId> <artifactId>gs-rest-service</artifactId> <version>0.1.0</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.1.5.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <properties> <start-class>hello.Application</start-class> </properties> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-releases</id> <url>http://repo.spring.io/libs-release</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-releases</id> <url>http://repo.spring.io/libs-release</url> </pluginRepository> </pluginRepositories> </project>
src/main/java/hello/Application.java
1 package hello;
2
3 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
4 import org.springframework.boot.SpringApplication;
5 import org.springframework.context.annotation.ComponentScan;
6
7 @ComponentScan
8 @EnableAutoConfiguration
9 public class Application {
10
11 public static void main(String[] args) {
12 SpringApplication.run(Application.class, args);
13 }
14 }
src/main/java/hello/Greeting.java
1 package hello;
2
3 public class Greeting {
4
5 private final long id;
6 private final String content;
7
8 public Greeting(long id, String content) {
9 this.id = id;
10 this.content = content;
11 }
12
13 public long getId() {
14 return id;
15 }
16
17 public String getContent() {
18 return content;
19 }
20 }
src/main/java/hello/GreetingController.java
1 package hello;
2
3 import java.util.concurrent.atomic.AtomicLong;
4 import org.springframework.web.bind.annotation.RequestMapping;
5 import org.springframework.web.bind.annotation.RequestParam;
6 import org.springframework.web.bind.annotation.RestController;
7
8 @RestController
9 public class GreetingController {
10
11 private static final String template = "Hello, %s!";
12 private final AtomicLong counter = new AtomicLong();
13
14 @RequestMapping("/greeting")
15 public Greeting greeting(@RequestParam(value="name", required=false, defaultValue="World") String name) {
16 return new Greeting(counter.incrementAndGet(),
17 String.format(template, name));
18 }
19 }
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
1 <project xmlns="http://maven.apache.org/POM/4.0.0"
2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
4 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 <modelVersion>4.0.0</modelVersion>
6 <groupId>org.springframework</groupId>
7 <artifactId>gs-rest-service-tomcat</artifactId>
8 <version>0.1.0</version>
9 <packaging>war</packaging>
10
11 <parent>
12 <groupId>org.springframework.boot</groupId>
13 <artifactId>spring-boot-starter-parent</artifactId>
14 <version>1.1.5.RELEASE</version>
15 </parent>
16
17 <dependencies>
18 <dependency>
19 <groupId>org.springframework.boot</groupId>
20 <artifactId>spring-boot-starter-web</artifactId>
21 <scope>compile</scope>
22 </dependency>
23 </dependencies>
24
25 <properties>
26 <start-class>hello.Application</start-class>
27 </properties>
28 <build>
29 <plugins>
30 <plugin>
31 <artifactId>maven-compiler-plugin</artifactId>
32 <version>2.3.2</version>
33 </plugin>
34 </plugins>
35 </build>
36 <repositories>
37 <repository>
38 <id>spring-releases</id>
39 <url>http://repo.spring.io/libs-release</url>
40 </repository>
41 </repositories>
42 <pluginRepositories>
43 <pluginRepository>
44 <id>spring-releases</id>
45 <url>http://repo.spring.io/libs-release</url>
46 </pluginRepository>
47 </pluginRepositories>
48 </project>
src/main/java/hello/Application.java
1 package hello;
2
3 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
4 import org.springframework.boot.SpringApplication;
5 import org.springframework.context.annotation.ComponentScan;
6 import org.springframework.boot.context.web.SpringBootServletInitializer;
7 import org.springframework.boot.builder.SpringApplicationBuilder;
8 import org.springframework.context.annotation.Configuration;
9
10 @ComponentScan
11 @EnableAutoConfiguration
12 @Configuration
13 public class Application extends SpringBootServletInitializer {
14
15 public static void main(String[] args) {
16 SpringApplication.run(appClass, args);
17 }
18
19 @Override
20 protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
21 return application.sources(appClass);
22 }
23
24 private static Class<Application> appClass = Application.class;
25 }
src/main/java/hello/Greeting.java
1 package hello;
2
3 public class Greeting {
4
5 private final long id;
6 private final String content;
7
8 public Greeting(long id, String content) {
9 this.id = id;
10 this.content = content;
11 }
12
13 public long getId() {
14 return id;
15 }
16
17 public String getContent() {
18 return content;
19 }
20 }
src/main/java/hello/GreetingController.java
1 package hello;
2
3 import java.util.concurrent.atomic.AtomicLong;
4 import org.springframework.web.bind.annotation.RequestMapping;
5 import org.springframework.web.bind.annotation.RequestParam;
6 import org.springframework.web.bind.annotation.RestController;
7
8 @RestController
9 public class GreetingController {
10
11 private static final String template = "Hello Tomcat, %s!";
12 private final AtomicLong counter = new AtomicLong();
13
14 @RequestMapping("/greetingTomcat")
15 public Greeting greeting(@RequestParam(value="name", required=false, defaultValue="World") String name) {
16 return new Greeting(counter.incrementAndGet(), String.format(template, name));
17 }
18 }
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