tags | projects | |
---|---|---|
|
This guide walks you through the process of creating a "hello world" web site with Spring.
You’ll build a service that will accept HTTP GET requests at:
http://localhost:8080/greeting
and respond with a web page displaying a greeting:
"Hello, World!"
You can customize the greeting with an optional name
parameter in the query string:
http://localhost:8080/greeting?name=User
The name
parameter value overrides the default value of "World" and is reflected in the response:
"Hello, User!"
In Spring’s approach to building web sites, HTTP requests are handled by a controller. You can easily identify these requests by the @Controller
annotation. In the following example, the GreetingController handles GET requests for /greeting by returning the name of a View
, in this case, "greeting". A View
is responsible for rendering the HTML content:
src/main/java/hello/GreetingController.java
link:complete/src/main/java/hello/GreetingController.java[role=include]
This controller is concise and simple, but there’s plenty going on. Let’s break it down step by step.
The @RequestMapping
annotation ensures that HTTP requests to /greeting
are mapped to the greeting()
method.
Note
|
The above example does not specify GET vs. PUT , POST , and so forth, because @RequestMapping maps all HTTP operations by default. Use @RequestMapping(method=GET) to narrow this mapping.
|
@RequestParam
binds the value of the query String parameter name
into the name
parameter of the greeting()
method. This query String parameter is not required
; if it is absent in the request, the defaultValue
of "World" is used. The value of the name
parameter is added to a Model
object, ultimately making it accessible to the view template.
The implementation of the method body relies on a view technology, in this case Thymeleaf, to perform server-side rendering of the HTML. Thymeleaf parses the greeting.html
template below and evaluates the th:text
expression to render the value of the ${name}
parameter that was set in the controller.
src/main/resources/templates/greeting.html
link:complete/src/main/resources/templates/greeting.html[role=include]
Although it is possible to package this service as a traditional WAR file for deployment to an external application server, the simpler approach demonstrated below creates a standalone application. You package everything in a single, executable JAR file, driven by a good old Java main()
method. Along the way, you use Spring’s support for embedding the Tomcat servlet container as the HTTP runtime, instead of deploying to an external instance.
src/main/java/hello/Application.java
link:complete/src/main/java/hello/Application.java[role=include]
@SpringBootApplication
is a convenience annotation that adds all of the following:
-
@Configuration
tags the class as a source of bean definitions for the application context. -
@EnableAutoConfiguration
tells Spring Boot to start adding beans based on classpath settings, other beans, and various property settings. -
Normally you would add
@EnableWebMvc
for a Spring MVC app, but Spring Boot adds it automatically when it sees spring-webmvc on the classpath. This flags the application as a web application and activates key behaviors such as setting up aDispatcherServlet
. -
@ComponentScan
tells Spring to look for other components, configurations, and services in thehello
package, allowing it to find theGreetingController
.
The main()
method uses Spring Boot’s SpringApplication.run()
method to launch an application. Did you notice that there wasn’t a single line of XML? No web.xml file either. This web application is 100% pure Java and you didn’t have to deal with configuring any plumbing or infrastructure.
Logging output is displayed. The service should be up and running within a few seconds.
Now that the web site is running, visit http://localhost:8080/greeting, where you see:
"Hello, World!"
Provide a name
query string parameter with http://localhost:8080/greeting?name=User. Notice how the message changes from "Hello, World!" to "Hello, User!":
"Hello, User!"
This change demonstrates that the @RequestParam
arrangement in GreetingController
is working as expected. The name
parameter has been given a default value of "World", but can always be explicitly overridden through the query string.
Congratulations! You have just developed a web page using Spring.