Der Autor, der Spring for Business verwendet, studierte "[Einführung in die SpringBoot2-Programmierung](https://www.amazon.co.jp/Spring-Boot-2-Einführung in die Programmierung - Yano Palmada / dp / 4798053473)". Es ist wie ein Spickzettel / Lesememo. Die Zielgruppe sind diejenigen, die die Grundlagen von Java gelernt haben und keine Erfahrung mit Spring Boot haben - dem Level, das begonnen hat, die Grundlagen zu lernen. Sprache ist Java, Das Build-Tool ist Maven, Die Template-Engine ist Thymeleaf.
Ein Framework (Gruppe), das durch Kombinieren der von Spring Framework und Spring MVC (Framework) bereitgestellten Bibliothek für die schnelle Entwicklung von WEB-Anwendungen erstellt wurde.
Da dieser Artikel als Spickzettel verwendet wird, wird er hier weggelassen.
Groovy ist eine Sprache, die sich für die Erstellung von Prototypen in kurzer Zeit vor der vollständigen Entwicklung in Java eignet. Groovy wird hier weggelassen. @ RestController Es wird verwendet, um ein System zu erstellen, auf das von außen zugegriffen werden kann, um die erforderlichen Informationen abzurufen. Verwendet beispielsweise das Zurücksenden der erforderlichen Informationen im Text- oder XML-Format beim Zugriff. @ RequestMapping Dies bedeutet, diese Methode auszuführen, wenn auf diese Adresse zugegriffen wird. Schreiben Sie als "@RequestMapping (" / ")" und geben Sie den Pfad als Argument an. Wenn auf den angegebenen Pfad zugegriffen wird, wird die Methode mit dieser Anmerkung ausgeführt.
SampleController.java
@RestController
public class SampleController {
@RequestMapping("/")
public String index() {
return "Hello SpringBoot World";
}
}
Eine Vorlagen-Engine, die durch Hinzufügen zu HTML-Tags verwendet werden kann. Merkmal ist,
home.html
<body>
<h1>Hello!</h1>
<p class="msg" th:text="${msg}">this is sample.</p>
</body>
Es ist möglich, HTML mit Groovy als Vorlagen-Engine zu schreiben, dies wird hier jedoch aus Gründen der Benutzerfreundlichkeit weggelassen.
[@Controller wird in Kapitel 3 beschrieben](# -controller)
@ ResponseBody
Bei Methoden mit "@ ResponseBody" wird der Rückgabewert so wie er ist zum Inhalt der Antwort.
Für die Methode des Controllers mit "@ RestController" ist der Rückgabewert der Inhalt ohne Hinzufügen von "@ ResponseBody".
Methoden in Controller-Klassen mit @ Controller
geben häufig die ModelAndView-Klasse zurück, außer wenn Sie JSON oder XML zurückgeben müssen, können Sie dem Controller @ ResponseBody
für den Inhalt hinzufügen. Es kann sich selbst zurückgeben.
Spring Boot verwendet den integrierten Java-Server, um die App auszuführen, sodass keine Bereitstellung erforderlich ist. Es funktioniert gut mit Dingen, die Programme innerhalb eines Servers ausführen, wie z. B. Cloud-Dienste. Obwohl es den Nachteil hat, die Dateigröße zu erhöhen, wird es zum De-facto-Standard für die Webentwicklung in Java.
Die Definition des Elternteils lautet wie folgt
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Die Definition von Abhängigkeiten lautet wie folgt
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Die Definitionen von Build und Plugin lauten wie folgt
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Wenn Sie ein Spring Starter-Projekt mit Spring Tool Suite (STS) erstellen, wird standardmäßig eine Datei mit dem Namen "MyBootAppApplication.java" erstellt. Wenn @SpringBootApplication angehängt ist, wird diese Klasse beim Start von SpringBoot aufgerufen. SpringApplication.run Die mit Anmerkungen versehene Klasse startet die App. "Ausführen" ist eine Methode zum Starten einer Anwendung. Bereiten Sie für die Argumente die Klasseninstanz der auszuführenden Klasse und die zu übergebenden Daten als Parameter vor.
MyBootAppApplication.java
@SpringBootApplication
public class MyBootAppApplication {
public static void main(String[] args) {
SpringApplication.run(MyBootAppApplication.class, args);
}
}
die Architektur | Rolle |
---|---|
Model | Verwalten Sie die von der Anwendung verwendeten Daten |
View | Bildschirmanzeige handhaben |
Controller | Kontrollieren Sie den gesamten Prozess |
Wenn Sie eine Pfadvariable in Form von "@RequestMapping (" / {param} ")" verwenden, können Sie den Wert, der an den Pfadteil unterhalb der Adresse übergeben wird, als Variable empfangen. [Was ist @RequestMapping](# -requestmapping)
Gibt an, dass der Wert von einer Pfadvariablen übergeben wird.
@RequestMapping("/{num}")
public String index(@PathVariable int num){
int res = 0;
for(int i = 1; i<= num; i++){
res += i;
}
return "total:" + res;
}
REST-Services können auch Klassen als andere Rückgabewerte als String zurückgeben. Die zurückgegebene Instanz wird in das JSON-Format konvertiert.
//Definieren Sie die DataObject-Klasse separat
public DataObject index(@PathVariable int id) {
return new DataObject();
}
Wenn Sie eine normale Webseite verwenden, stellen Sie der Controller-Klasse "@ Controller" voran. In diesem Artikel möchte ich Thymeleaf als Vorlage verwenden. Fügen Sie daher die Abhängigkeit wie folgt zu pom.xml hinzu.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
@ Controller Wird zum Rendern und Anzeigen von HTML-Seiten mithilfe von Vorlagen verwendet.
SampleController.java
@Controller
public class SampleController {
@RequestMapping("/")
public String home(){
return "home";
}
}
Model
ist eine Klasse zum Verwalten der auf Webseiten verwendeten Daten.
Daten können übergeben werden, indem der in der Vorlage in diesem Modell
verwendete Wert festgelegt wird.
Stellen Sie den Wert mit addAttribute
ein. Geben Sie den Namen des Werts im ersten Argument und den ergänzenden Wert im zweiten Argument an.
Nach dem folgenden Beispiel kann der Wert der Variablen msg in Form von $ {msg} auf der Vorlagenseite abgerufen werden.
Der Rückgabewert kann nicht als "Modell" verwendet werden (da er keine Vorlageninformationen enthält).
@RequestMapping("/{num}")
public String home(@PathVariable int num, Model model) {
...
model.addAttribute("msg", "total:" + res);
return "home";
}
Verwalten Sie in Vorlagen verwendete Daten und Informationen zu Ansichten (Vorlagennamen usw.). Wenn Sie dieses ModelAndView als Rückgabewert zurückgeben, wird die festgelegte Vorlage verwendet. Legen Sie das Objekt als "addObject (String entitySetName, Object entity)" fest und legen Sie den Namen der Ansicht fest, die mit "setViewName (String viewName)" verwendet werden soll.
@RequestMapping("/{num}")
public ModelAndView index(@PathVariable int num, ModelAndView mav) {
...
mav.addObject("msg", "total:" + res);
mav.setViewName("home");
return mav;
}
Model
Es verwaltet alle in der Vorlage verwendeten Daten, aber da es keine ansichtsbezogenen Informationen enthält, kann "Modell" nicht als Rückgabewert verwendet werden.
ModelAndView
Verwalten Sie alle in der Vorlage verwendeten Daten und alle Informationen zur Ansicht. Durch die Rückgabe von "ModelAndView" als Rückgabewert wird die festgelegte Vorlage verwendet.
Bereiten Sie ein Formular mit <form method =" POST "action =" / ">
vor und senden Sie POST mit demselben Ziel " / "
. Im Tag input type =" text "
wird der Wert von $ value im Eingabefeld wie th: text =" $ {value} "
angezeigt.
Wenn für @ RequestMapping
mehrere Argumente vorhanden sind, z. B. @RequestMapping (value =" / ", method = RequestMethod.POST)
, lassen Sie den Argumentnamen wievalue = "/"
für das Mapping-Ziel weg. Müssen ohne schreiben. Das Beispiel hat dieselbe Adresse und unterscheidet für Methoden zwischen "GET" und "POST".
Der vom Formular gesendete Wert wird von der Sendemethode verarbeitet. @ RequestParam
ist eine Anmerkung zur Angabe des im Formular übermittelten Werts, der den im Formular name =" text1 "
eingegebenen Wert an dieses Argument str
übergibt.
[Conrotorer Seite]
SampleController.java
@Controller
public class SampleController {
@RequestMapping(value="/", method=RequestMethod.GET)
public ModelAndView index(ModelAndView mav) {
mav.setViewName("form");
mav.addObject("msg", "please put and send your name.");
return mav;
}
@RequestMapping(value="/", method=RequestMethod.POST)
public ModelAndView send(@RequestParam("text1")String str, ModelAndView mav) {
mav.addObject("msg", "Hallo");
mav.addObject("value", "message");
mav.setViewName("form");
return mav;
}
[Vorlagenseite]
form.html
<body>
<h1>Sample Form</h1>
<p th:text ="${msg}">Dies ersetzt msg</p>
<form method="POST" action="/">
<input type="text" name="text1" th:value="${value}"/>
<input type="submit" value="Click" />
</form>
</body>
Der vom Formular übermittelte Wert wird von der Methode "send" empfangen. Die Methode hat vier Argumente mit @ RequestParam
, damit sie Werte aus dem Formular empfangen kann. Geben Sie den Namen des Parameters mit "Wert" an und geben Sie die Nullbedingung des Werts mit "Erforderlich" an.
[Controllerseite]
SampleController.java
@Controller
public class SampleController {
@RequestMapping(value="/", method=RequestMethod.GET)
public ModelAndView index(ModelAndView mav) {
//GET-Anfrage weggelassen
}
@RequestMapping(value="/", method=RequestMethod.POST)
public ModelAndView send(
//Kontrollkästchen: Der Wert kann den ausgewählten Status als booleschen Wert erhalten
@RequestParam(value="check1", required=false)boolean check1,
//Optionsfeld: Übergeben Sie den Wert des ausgewählten Elements als Zeichenfolgenwert, aber null, wenn es nicht ausgewählt ist
@RequestParam(value="radio1",required=false)String radio1,
//Auswahlliste: Wenn ein einzelnes Element ausgewählt ist, wird der Wert als Zeichenfolgenwert übergeben. Wenn jedoch mehrere Elemente ausgewählt werden können, wird er als Zeichenfolgenarray übergeben. Wenn er nicht ausgewählt ist, ist er null.
@RequestParam(value="select1", required=false)String select1,
@RequestParam(value="select2", required=false)String[] select2,
ModelAndView mav) {
String res = "";
//Verarbeitung entfällt
...
//Betten Sie res in msg ein
mav.addObject("msg", res);
mav.setViewName("form");
return mav;
}
}
[Vorlagenseite]
<body>
<h1>Form Controll Example</h1>
<form method="POST" action="/">
<div>
<input type="checkbox" id="check1" name="check1" />
<label for="check1">Kontrollkästchen</label>
</div>
<div>
<input type="radio" id="radioA" name="radio1" value="male" />
<label for="radioA">männlich</label>
</div>
<div>
<input type="radio" id="radioB" name="radio1" value="female" />
<label for="radioB">Weiblich</label>
</div>
<div>
<select id="select1" name="select1" size="4">
<option value="Red">rot</option>
<option value="Blue">Blau</option>
<option value="Yellow">Gelb</option>
</select>
<select id="select2" name="select2" size="4" multiple="multiple">
<option value="SmartPhone">Smartphone</option>
<option value="Tablet">Tablette</option>
<option value="Laptop">Laptop</option>
</select>
</div>
<input type="submit" value="Click" />
</form>
</body>
Es gibt ** Weiterleiten ** und ** Weiterleiten **, um zu einer anderen Adresse zu wechseln, wenn Sie auf eine Adresse zugreifen.
[Controllerseite]
SampleController.java
@Controller
public class SampleController {
@RequestMapping("/")
public ModelAndView index(ModelAndView mav) {
mav.setViewName("home");
return mav;
}
//"/other"Ist die Adresse selbst"/"Es wird in geändert, und die angezeigten Inhalte sind auch"/"Werde eine Sache.
@RequestMapping("/other")
public String other() {
return "redirect:/";
}
//"/home"Wenn Sie darauf zugreifen, bleibt der angezeigte Inhalt gleich"/"Dinge zeigen.
@RequestMapping("/home")
public String home() {
return "forward:/";
}
}
[Vorlagenseite]
home.html
<body>
<h1>Home Page</h1>
</body>
Häufig verwendete Klassen können verwendet werden, indem sie direkt in einem konstanten Ausdruck als Konstante "** # name **" beschrieben werden. Da es sich um eine Klassenkonstante handelt, kann sie durch direktes Aufrufen von Klassenmethoden verwendet werden. Wie "# Datumsangaben. Klassenmethode". Das folgende Beispiel
Dienstprogrammobjekt | Konstante |
---|---|
#strings | String-Klassenkonstante |
#numbers | Zahlenklassenkonstante |
#Bools | Boolesche Klassenkonstante |
#dates | Datumsklassenkonstante |
#objects | Objektklassenkonstante |
#arrays | Array-Klassenkonstante |
#lists | Listen Sie Klassenkonstanten auf |
#sets | Klassenkonstante setzen |
#maps | Kartenklassenkonstante |
Erstellen Sie im ersten Argument ein Date-Klassenobjekt mit der Methode format
der Date-Klassenkonstante # date
und geben Sie im zweiten Argument das Format yyyy / MM / tt HH: mm: ss
an.
<p th:text="${#dates.format(new java.util.Date(), 'dd/MMM/yyyy HH:mm')}"></p>
Bei Verwendung der formatInteger
-Methode der Konstante # numbers
der Number-Klasse wird die Ganzzahl als erstes Argument angezeigt, und die Ziffern des zweiten Arguments werden getrennt durch das dritte Argument angezeigt.
<p th:text="${#numbers.formatInteger(10000000, 3, 'COMMA')}"></p>
Das toUpperCase
der String-Klassenkonstante # strings
ist eine Methode, die den Text des Arguments in Großbuchstaben konvertiert.
<p th:text="${#strings.toUpperCase('show uppercase')}"></p>
Wenn Sie wie "{param.id}" schreiben, können Sie den in Form von "id = ○○" gesendeten Wert empfangen und die Parameter direkt in der Vorlage verwenden, ohne den Controller zu durchlaufen. Da die erhaltenen Werte jedoch Arrays sind, werden die Werte extrahiert und verwendet.
<!--/?id=hoge&name=Pass wie Fuga-->
<p th:text="'from parameter.. id=' + ${param.id[0] + ',name=' + param.name[0]}"></p>
Extrahieren Sie den Wert aus der Eigenschaftendatei und verwenden Sie ihn in der Vorlage. Die Beschreibungsmethode lautet "# {Wert angeben}"
message.properties
article.title=this is home page.
article.message=this message from properties.
<h1 th:text="#{article.title}"></h1>
<p th:text="#{article.message}"></p>
Wenn Sie auf /? Id = fuga
zugreifen, wird ** / hoge / fuga ** im Link gesetzt.
<p><a href="home.html" th:href="@{/hoge/{id}(id=${param.id})}">link</a></p>
Variable Ausdrücke können sowohl Objekte als auch Zahlen und Text verwenden. Um dies zu tun, geben Sie ein Objekt an und verwenden * {value}
, um den Wert im ausgewählten Objekt abzurufen.
<table th:object="${object}">
<tr><th>ID</th><td th:text="*{id}"></td></tr>
<tr><th>NAME</th><td th:text="*{name}"></td></tr>
<tr><th>MAIL</th><td th:text="*{value}"></td></tr>
</table>
Wenn Sie den Text davor und danach mit "|" einschließen, können Sie den Variablenausdruck direkt schreiben und die Zeichenfolgen kombinieren.
<p th:text="|My name is *{name}. Mailaddress is *{value}.|"></p>
In Thymeleaf werden bei der Ausgabe von Text als variabler Ausdruck aus Sicherheitsgründen alle HTML-Tags maskiert
Sie können die Escape-Datei mit th: utext
freigeben. Wenn der Wert jedoch ein HTML-Tag enthält, funktioniert er unverändert. Wenn Sie also Text basierend auf den vom Benutzer gesendeten Informationen erstellen, sind Sie anfällig für Angriffe wie XSS.
[Controllerseite]
@RequestMapping("/")
public ModelAndView index(ModelAndView mav) {
mav.setViewName("home");
mav.addObject("msg", "message 1<hr/>message 2<br/>message3");
return mav;
}
[Vorlagenseite]
<p th:utext="${msg}">message.</p>
Ändern Sie den Ausgabeinhalt entsprechend dem Ergebnis des zuvor erstellten Booleschen Werts.
[Controllerseite]
@RequestMapping("/{id}")
public ModelAndView index(@PathVariable int id,
ModelAndView mav) {
mav.setViewName("check");
mav.addObject("id",id);
mav.addObject("num",id % 2 == 0);
mav.addObject("even","Even number!");
mav.addObject("odd","Odd number...");
return mav;
}
[Vorlagenseite]
check.html
<p th:class="${num} ? 'even' : 'odd'"></p>
Der eingestellte Wert ist "wahr" (Nicht-Null-Zahl "0", Im Fall von (einschließlich anderen Texts als Werten wie "Aus" und "Nein") werden dieses Tag und die darin enthaltenen Tags angezeigt.
Zeigen Sie dieses Tag und interne Tags an, wenn der eingestellte Wert "false" ist (einschließlich Texten wie Nummer Null, "0", "Aus", "Nein").
[Controllerseite]
@RequestMapping("/{id}")
public ModelAndView index(@PathVariable int id,
ModelAndView mav) {
mav.setViewName("check");
mav.addObject("id",id);
mav.addObject("num",id >= 0);
mav.addObject("trueVal","POSITIVE!");
mav.addObject("falseVal","negative...");
return mav;
}
[Vorlagenseite]
check.html
<p th:if="${num}" th:text="${id} + ' is ' + ${trueVal}"></p>
<p th:unless="${num}" th:text="${id} + ' is ' + ${falseVal}"></p>
Überprüft den Wert des angegebenen bedingten Ausdrucks, sucht nach demselben Wert aus dem darin enthaltenen "th: case" und gibt nur dieses Tag aus.
th: case =" * "
ist ein Platzhalter, der alles fängt, was keine der Bedingungen erfüllt.
[Controllerseite]
@RequestMapping("/{month}")
public ModelAndView index(@PathVariable int month,
ModelAndView mav) {
mav.setViewName("index");
int m = Math.abs(month) % 12;
m = m == 0 ? 12 : m;
mav.addObject("month",m);
mav.addObject("check",Math.floor(m / 3));
return mav;
}
[Vorlagenseite]
<div th:switch="${check}">
<p th:case="0" th:text="|${month} - Winter|"></p>
<p th:case="1" th:text="|${month} - Spring|"></p>
<p th:case="2" th:text="|${month} - Summer|"></p>
<p th:case="3" th:text="|${month} - Autumn|"></p>
<p th:case="4" th:text="|${month} - Winter|"></p>
<p th:case="*">...?</p>
</div>
Bereiten Sie in th: each
ein Array oder eine Sammlung als Wert vor und beschreiben Sie es in der Art einer erweiterten for-Anweisung wie value: $ {list}
. Dadurch werden die Werte in der Reihenfolge nach dem Doppelpunkt aus der Liste abgerufen und den Variablen vor dem Doppelpunkt zugewiesen.
[Vorlagenseite]
<table>
<tr>
<th>NAME</th>
<th>MAIL</th>
<th>TEL</th>
</tr>
<tr th:each="obj:${data}">
<td th:text="${obj[0]}"></td>
<td th:text="${obj[1]}"></td>
<td th:text="${obj[2]}"></td>
</tr>
</table>
Wenn Sie es in Form von __ $ {variable} __
deklarieren, wird es im Voraus ausgewertet und der Variablenausdruck ausgeführt.
[Controllerseite]
ArrayList<Pockemon> monsters = new ArrayList<>();
monsters.add(new Pockemon(0,"Hitokage","Fire"));
monsters.add(new Pockemon(1,"Fushigidane","Grass"));
monsters.add(new Pockemon(2,"Zenigame","Water"));
mav.addObject("num", 1);
mav.addObject("monsters",monsters);
return mav
[Vorlagenseite]
<div th:object="${monsters.get(${num})}">
<p th:text="*{id}"></p>
</div>
Auch wenn Sie es nicht in Form von Attributen wie "th: text" vorbereiten (es gibt eine Seite, die die Seitenanzeige nicht beeinflusst, auch wenn Thymeleaf nicht funktioniert), Thymeleaf direkt zwischen HTML-Tags Sie können den variablen Ausdruck von schreiben. Wenn Sie "th: inline =" text "" in das Tag schreiben, können Sie einen variablen Ausdruck wie "[[$ {variable}]]" darin schreiben, um die Inline-Verarbeitung zu aktivieren.
[Controllerseite]
ArrayList<Pockemon> monsters = new ArrayList<>();
monsters.add(new Pockemon(0,"Hitokage","Fire"));
monsters.add(new Pockemon(1,"Fushigidane","Grass"));
monsters.add(new Pockemon(2,"Zenigame","Water"));
mav.addObject("monsters",monsters);
return mav
[Vorlagenseite]
<tr th:inline="text" th:each="monster : ${monsters}">
<td>[[${monster.id}]]</td>
<td>[[${monster.name}]]</td>
<td>[[${monster.type}]]</td>
</tr>
Geben Sie den Wert "
Recommended Posts