[JAVA] Spring Boot ab Null Teil 2

Ziel

Es wird mehrfach implementiert.

  1. Machen Sie sich eine ungefähre Vorstellung davon, was Spring Boot ist
  2. Umgebungskonstruktion anzeigen & Hello World!
  3. ** Parameter und Objekte übergeben ** ← Was diesmal zu tun ist </ font>
  4. Probieren Sie andere Funktionen aus

Vorwort

Das letzte Mal habe ich die folgenden zwei Dinge getan, um Hello World anzuzeigen.

  • Zeigen Sie die Zeichenkette mit "@ RestController" an
  • Zeigt index.html mit @ Controller an

Das Projekt verwendet weiterhin das zuletzt erstellte. Im Einzelnen werden wir Folgendes tun. Es gibt zwei Hauptwege, um dies zu erreichen. Beginnen wir mit @ RequestParam.

Lassen Sie uns die Parameter übergeben (RequestParam Edition)

Schreiben Sie den -Teil von index.html wie folgt um.

index.html


<body>
<form action="/hello" method="get">
Name:
<input type="text" name="username">
<input type="submit" value="Senden">
</form>
</body>
Klicken Sie hier, um eine Beschreibung der verschiedenen Tags anzuzeigen.
Etikett Elementname Inhalt
form action Geben Sie die URL an, an die die Anfrage gesendet werden soll.
method Wählen Sie die Übertragungsmethode aus GET und POST aus und geben Sie sie an.
input type="text" Textfeld.
name Der Name des Parameters. Wird verwendet, wenn Sie auf die Java-Seite kommen.
type="submit" Schaltfläche zum Senden von Parametern.
value Geben Sie die Zeichenfolge an, die im Inhalt angezeigt werden soll (Textfeld, Schaltfläche usw.).

Fügen Sie als Nächstes den folgenden Code zu "DemoController.java" hinzu.

DemoController.java


package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class DemoController {
	
	//Es ist dasselbe wie die zuletzt erstellte Hallo-Methode. (Wechseln Sie zum Index, da der Methodenname abgedeckt ist.)
	@RequestMapping(value="/",method=RequestMethod.GET)
	public ModelAndView index() {
		ModelAndView mav=new ModelAndView();
		mav.setViewName("/index");
		return mav;
	}
	
	//Dies ist die Methode, um diese Zeit hinzuzufügen.
	@GetMapping("/hello")
	public ModelAndView hello(@RequestParam String username,ModelAndView mav) {
		mav.addObject("username",username);
		mav.setViewName("/hello");
		return mav;
	}
}

Informationen zur Funktion von ModelAndView finden Sie im vorherigen Artikel!

@RequestParam Beschrieben am Anfang des Arguments. Durch Hinzufügen wird der Wert des Anforderungsparameters automatisch in der Variablen gespeichert. Darüber hinaus gibt es verschiedene Möglichkeiten zu schreiben, so dass ich sie alle zusammen vorstellen werde. Der Name des gesendeten Parameters lautet beispielsweise "Benutzername".

  • @RequestParam String username
    Dies ist der diesmal verwendete Schreibstil. Der Variablenname (in rot) und der Name des Parameters, den Sie empfangen möchten, müssen identisch sein. Ein Fehler tritt auf, wenn derselbe Parameter wie der Variablenname nicht vorhanden ist.

Beschreibungsbeispiel


@RequestParam String username //OK
@RequestParam String name //NG
  • @RequestParam("username") String username
    Dies ist die sicherste Art zu schreiben. Geben Sie auf der Anmerkungsseite den Namen des Parameters an, den Sie empfangen möchten. Wenn Sie einen Namen angeben, der nicht vorhanden ist, tritt ein Fehler auf. Zu diesem Zeitpunkt kann der Variablenname ein beliebiger Name sein.

Beschreibungsbeispiel


@RequestParam("username") String username //OK
@RequestParam("username") String name //OK
@RequestParam("name") String username //NG
  • @RequestParam(value="username",required=false) String username
    Es kommt nicht viel heraus. Sie können wählen, ob der Name des Parameters mit "Wert" und das Vorhandensein des Parameters mit "Erforderlich" erforderlich sein soll. Der Standardwert ist true.
    Wenn auf false gesetzt, tritt kein Fehler auf, auch wenn der angegebene Parameter nicht vorhanden ist (obwohl Parameter natürlich nicht übergeben werden können ...). Auch hier kann der Variablenname ein beliebiger Name sein.

Beschreibungsbeispiel


@RequestParam(value="username",required=false) String username //OK
@RequestParam(value="name",required=false) String name //OK, kann aber nicht geliefert werden
@RequestParam(value="name",required=true) String name //NG

Erstellen Sie dann eine HTML-Datei, die die Parameter empfängt. Erstellen Sie eine HTML-Datei mit dem Namen "hello.html" im selben Ordner wie "index.html" und schreiben Sie den Inhalt wie folgt neu.

hello.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<span th:text="${username}"></span>, Hallo Welt!
</body>
</html>
  • <html xmlns:th="http://www.thymeleaf.org">
    Mit dieser Beschreibung können Sie Thymeleaf-Funktionen mit Tag-Namen aufrufen, die mit "th" beginnen.
    Was ist Thymeleaf? Für [vorherigen Artikel](https://qiita.com/hatopo/items/ecc16fdc757fc8cc8d55#%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81 % AB% E3% 81% A4% E3% 81% 84% E3% 81% A6) und Offizielle Dokumente!
  • ** th: text =" $ {Parametername} " **
    Ruft die in ModelAndView gespeicherten Parameter ab und zeigt sie im Inhalt an. Es wird für die Tags "
    ", "" und "

    " verwendet.

  • ** th: value =" $ {Parametername} " **
    Gleich wie "th: text". Dies wird für <input type =" text "> usw. verwendet.

Andere Tags werden jedes Mal erklärt, wenn sie angezeigt werden.


Greifen wir jetzt auf "http: // localhost: 8080" zu. Geben Sie einen geeigneten Namen ein und klicken Sie auf die Schaltfläche "Senden". Der eingegebene Name kann auf der nächsten Seite angezeigt werden! Das Obige ist die Übergabe von Parametern durch @ RequestParam. Das Bild ist wie folgt. flow_param.png

Lassen Sie uns Parameter übergeben (PathVariable Edition)

Als nächstes folgt die Parameterübergabemethode, die nur mit der GET-Methode möglich ist. Mit dieser Methode können Sie die in der URL enthaltene Zeichenfolge unverändert abrufen. (Wenn Sie beispielsweise auf "http: // localhost: 8080 / hello / xxx" zugreifen, können Sie "xxx" als Parameter erhalten.)

Schreiben Sie die "Hallo" -Methode von "DemoController.java" neu.

DemoController.java


@GetMapping("/hello/{username}")
public ModelAndView hello(@PathVariable String username,ModelAndView mav) {
	mav.addObject("username",username);
	mav.setViewName("/hello");
	return mav;
}

@GetMapping Ich habe das letzte Mal gemacht, aber das Problem ist das Argument. Fügen Sie den Teil, den Sie von der URL erhalten möchten, in "{}" ein und geben Sie den Namen für den Aufruf mit "@ PathVariable" ein, der später beschrieben wird.

@PathVariable Beschrieben am Anfang des Arguments. Es gibt mehrere Möglichkeiten, dies zu schreiben, aber es ist dasselbe wie "@ RequestParam", daher werde ich es weglassen.

Zusätzlich können mehrere Parameter erfasst werden. Wenn Sie beispielsweise beim Zugriff auf http: // localhost: 8080 / hello / hatopo / 24`` hatopo und 24 erhalten möchten, schreiben Sie wie folgt.

Beschreibungsbeispiel


@GetMapping("/hello/{username}/{age}")
public ModelAndView hello(@PathVariable String username,@PathVariable int age,ModelAndView mav) {
	//Der Inhalt wird weggelassen
	return mav;
}

Greifen wir jetzt auf "http: // localhost: 8080 / hello / xxx" zu. (Geben Sie eine beliebige Zeichenfolge für xxx ein.) Ich konnte die Parameter nach / hello anzeigen!

Für diejenigen, die keine Parameter übergeben möchten ...
Obwohl es völlig schlampig ist, können Parameter durch Schreiben eines Javascript übergeben werden, das den Wert des Textfelds an die URL anfügt und den Seitenübergang vornimmt. Schreiben Sie das Innere von "" von "index.html" wie folgt um.

index.html


<body>
Name:<input type="text" id="name">
<input type="submit" value="Senden" onclick="send()">
<script>
function send(){
	var name = document.getElementById("name").value;
	if(name == "")name = "default_name";
	location.href = "http://localhost:8080/hello/" + name;
}
</script>
</body>

Sie können den Eingabewert anzeigen, indem Sie auf "http: // localhost: 8080 /" zugreifen, den Namen eingeben und auf die Schaltfläche "Senden" klicken!

Das Obige ist die Übergabe von Parametern. Lassen Sie uns die Objekte weiter übergeben.

Objekte übergeben

Für diejenigen, die nichts über Objekte wissen, ist es in Ordnung, es vorerst als "Box (Klasse) mit Parametern" zu verstehen.

Erstellen Sie zunächst eine Klasse mit dem Namen "User" im selben Ordner wie "DemoController" und fügen Sie den folgenden Code hinzu.

User.java


package com.example.demo;

public class User {
	private String name;
	private int age;
}

Fügen Sie als Nächstes die Methoden "getter" und "setter" hinzu, die Java zum Abrufen / Festlegen von Parametern benötigt. Sie können es manuell schreiben. Wenn Sie es jedoch automatisch hinzufügen möchten, platzieren Sie den Cursor an einer geeigneten Stelle in der Benutzerklasse und klicken Sie auf "Quelle" >> "Getter- und Setter-Generierung". Klicken Sie auf "Alles auswählen" >> "Generieren". Es ist in Ordnung, wenn der gesamte Code so aussieht:

User.java


package com.example.demo;

public class User {
	private String name;
	private int age;
	//↓ Code durch automatische Generierung hinzugefügt
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	//↑ Code durch automatische Generierung hinzugefügt
}
  • Wenn Sie ein Plug-In namens Lombok verwenden, müssen Sie diesen Code nicht schreiben, aber dieser Artikel behandelt ihn nicht.

Dann schreiben Sie index.html wie folgt um.

index.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/hello" method="get" th:object="${user}">
Name:<input type="text" name="name"><br>
Alter:<input type="text" name="age"><br>
<input type="submit" value="Senden">
</form>
</body>
</html>
  • ** th: object =" $ {Objektname} " **
    Die Parameter in dem Tag, das dies beschreibt, können zusammen mit einem Objektnamen referenziert werden. In diesem Beispiel geben wir "Name" und "Alter" in ein Feld mit dem Namen "Benutzer" ein.

Lassen Sie uns auch die "Hallo" -Methode von "DemoController.java" umschreiben.

DemoController.java


@GetMapping("/hello")
public ModelAndView hello(@ModelAttribute User user,ModelAndView mav) {
	mav.addObject("user",user);
	mav.setViewName("/hello");
	return mav;
}

@ModelAttribute Beschrieben am Anfang des Arguments. Speichern Sie das vom Formular gesendete Objekt in einer Variablen. Zu diesem Zeitpunkt wird Spring hinter den Kulissen Folgendes tun.

Interne Verarbeitung


User user = new User();
user.setName(name);
user.setAge(age);

Daher funktioniert es nicht richtig, wenn die Feldvariable name nicht in der Klasse User definiert ist oder die Methode setAge nicht definiert ist.

Sie können diese Anmerkung auch in eine Methode schreiben, sie wird jedoch sehr unterschiedlich verwendet, sodass ich sie in diesem Artikel weglassen werde ...


Zum Schluss schreiben wir hello.html wie folgt um.

hello.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div th:object="${user}">
<span th:text="*{name}"></span>Ist
<span th:text="*{age}"></span>Ich bin alt!
</div>
</body>
</html>
  • ** th: text =" * {Parametername} " **
    Abkürzung für th: text =" $ {Objektname.Parametername} ".
    In dem Tag, das th: object = {} beschreibt, kann es wie oben abgekürzt werden.

Greifen wir jetzt auf "http: // localhost: 8080" zu. Geben Sie Ihren Namen und Ihr Alter ein und klicken Sie auf "Senden" ...

Ich konnte meinen Namen und mein Alter anzeigen!

Rezension

--Passing-Parameter mit @ RequestParam

  • Holen Sie sich URL-Parameter mit @ PathVariable
  • Objekte mit @ ModelAttribute übergeben

Das ist alles für diese Zeit. Danke für deine harte Arbeit. Ab dem nächsten Mal werde ich auf ernstere Funktionen eingehen.

Recommended Posts