Model, View, Controller and a Template
This commit is contained in:
parent
d9db793e85
commit
4ffe7b8673
52
README.md
52
README.md
@ -14,3 +14,55 @@ In VsCode press `cmd+shif+p` and type `Spring Initilizr`. Choose next dependenci
|
|||||||
- Thymeleaf
|
- Thymeleaf
|
||||||
- Spring Boot DevTools
|
- Spring Boot DevTools
|
||||||
|
|
||||||
|
# Web Controller
|
||||||
|
|
||||||
|
In Spring’s approach to building web sites, HTTP requests are handled by a controller. You can easily identify the controller by the [`@Controller`](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Controller.html) annotation. In the following example, `GreetingController` handles GET requests for `/greeting` by returning the name of a [`View`](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/View.html) (in this case, `greeting`). A `View` is responsible for rendering the HTML content. The following listing (from `src/main/java/djmil/hellomvc/GreetingController.java`) shows the controller:
|
||||||
|
|
||||||
|
```java
|
||||||
|
package djmil.hellomvc;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.Model;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class GreetingController {
|
||||||
|
|
||||||
|
@GetMapping("/greeting")
|
||||||
|
public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
|
||||||
|
|
||||||
|
// NOTE: Here we can request some data from our RESTful backend as well
|
||||||
|
model.addAttribute("name", name);
|
||||||
|
|
||||||
|
return "greeting"; // <<-- template
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This controller is concise and simple, but there is plenty going on. We break it down step by step.
|
||||||
|
|
||||||
|
The `@GetMapping` annotation ensures that HTTP GET requests to `/greeting` are mapped to the `greeting()` method.
|
||||||
|
|
||||||
|
[`@RequestParam`](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html) 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`](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/ui/Model.html) object, ultimately making it accessible to the view template.
|
||||||
|
|
||||||
|
# Model, View and a Template
|
||||||
|
|
||||||
|
The implementation of the `greeting()` method body relies on a view technology (in this case, [Thymeleaf](http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html)) to perform server-side rendering of the HTML.
|
||||||
|
|
||||||
|
> [!note] Make sure you have Thymeleaf on your classpath. Artifact co-ordinates: `org.springframework.boot:spring-boot-starter-thymeleaf`
|
||||||
|
|
||||||
|
Thymeleaf parses the `greeting.html` template and evaluates the `th:text` expression to render the value of the `${name}` parameter that was set in the controller. The following listing `src/main/resources/templates/greeting.html` shows the template:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<head>
|
||||||
|
<title>Getting Started: Serving Web Content</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p th:text="'Hello, ' + ${name} + '!'" />
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
20
src/main/java/djmil/hellomvc/GreetingController.java
Normal file
20
src/main/java/djmil/hellomvc/GreetingController.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package djmil.hellomvc;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.Model;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class GreetingController {
|
||||||
|
|
||||||
|
@GetMapping("/greeting")
|
||||||
|
public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
|
||||||
|
|
||||||
|
// NOTE: Here we can request some data from our RESTful backend as well
|
||||||
|
model.addAttribute("name", name);
|
||||||
|
|
||||||
|
return "greeting"; // <<-- template
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
10
src/main/resources/templates/greeting.html
Normal file
10
src/main/resources/templates/greeting.html
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<head>
|
||||||
|
<title>Getting Started: Serving Web Content</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p th:text="'Hello, ' + ${name} + '!'" />
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user