JavaRush /Blog Java /Random-PL /Część 8. Pisanie małej aplikacji w spring-boocie

Część 8. Pisanie małej aplikacji w spring-boocie

Opublikowano w grupie Random-PL
Materiał ten stanowi ostatnią część serii „Wprowadzenie do rozwoju przedsiębiorstwa”. Poprzednie artykuły: Część 8. Pisanie małej aplikacji w spring-boocie - 1Przyjrzyjmy się najprostszemu przykładowi implementacji MVC na przykładzie Spring-MVC. Aby to zrobić, napiszmy małą aplikację Hello World w trybie spring-boot. Abyś mógł wszystko powtórzyć sam, podam Ci instrukcje krok po kroku. Najpierw napiszemy małą aplikację, a następnie ją przeanalizujemy.

Krok 1: Utwórz aplikację do rozruchu wiosennego w IntelliJ IDEA

Używając Plik -> Nowy -> Projekt... utwórz nowy projekt. W oknie, które zostanie otwarte, w menu po lewej stronie wybierz Spring Inicjalizacja, wybierz Project SDK i pozostaw opcję URL usługi Inicjalizacja jako domyślną. Część 8. Pisanie małej aplikacji w spring-boocie - 2Kliknij przycisk Dalej. W kolejnym oknie musimy wybrać parametry projektu. Będziemy mieli projekt Maven. Wybierz Typ - Projekt Maven, wypełnij Grupy i Artefakt Część 8. Pisanie małej aplikacji w spring-boocie - 3i kliknij Dalej. W kolejnym oknie musimy wybrać komponenty Spring Framework, z których będziemy korzystać. Potrzebujemy tylko dwóch:
  • Spring Web to komponent, który pozwoli nam tworzyć aplikacje internetowe. Ten komponent zawiera Spring MVC.
  • Thymeleaf - Tak zwany silnik szablonów. Rzecz, która pozwoli nam przenieść dane z Javy na strony HTML
Część 8. Pisanie małej aplikacji w spring-boocie - 4Część 8. Pisanie małej aplikacji w spring-boocie - 5W kolejnym oknie wybierz nazwę i lokalizację projektu w systemie plików: Część 8. Pisanie małej aplikacji w spring-boocie - 6Kliknij przycisk Zakończ. Projekt został stworzony. Mamy następującą strukturę projektu: Część 8. Pisanie małej aplikacji w spring-boocie - 7Tutaj interesują nas 2 pliki: pom.xml - deskryptor wdrożenia. Rzecz, która pozwala szybko i łatwo zaimportować do naszego projektu biblioteki z różnych frameworków, a także rzecz, w której konfigurujemy montaż naszej aplikacji. Nasza aplikacja jest zbudowana przy użyciu Mavena, pom.xml jest plikiem konfiguracyjnym tego systemu kompilacji. Klasa Java - MvcDemoApplication. Jest to główna klasa naszej aplikacji, z której uruchomimy nasz projekt spring-boot. Aby rozpocząć, po prostu uruchom główną metodę w tej klasie. Oto kod tej klasy, a także plik pom.xml: MvcDemoApplication:
@SpringBootApplication
public class MvcDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(MvcDemoApplication.class, args);
    }

}
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.javarush</groupId>
    <artifactId>mvc_demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mvc_demo</name>
    <description>Spring MVC Demo</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Krok 2. Utwórz strony internetowe

Nasza aplikacja będzie niezwykle prosta. Będziemy mieli stronę główną - indeks.html, wewnątrz której będzie znajdował się link do strony powitalnej - pozdrowienia.html. Na stronie powitalnej wyświetlimy powitanie. Zaimplementujmy możliwość wysyłania nazwy powitania do strony pozdrowienia.html poprzez parametry url. Stwórzmy stronę główną naszej aplikacji - indeks.html:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Main page</title>
</head>
<body>
    <p>Get your greeting <a href="/greeting">here</a></p>
</body>
</html>
Stwórzmy teraz stronę z pozdrowieniami.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>
Tutaj, na nietypowej stronie HTML, możesz zobaczyć tag: <p th:text="'Hello, ' + ${name} + '!'" /> Atrybut thtagu pjest narzędziem silnika szablonów Thymeleaf. Dzięki temu wartością tagu pbędzie tekst „Hello” + wartość zmiennej name, którą ustawimy z kodu Java.

Krok 3: Utwórz kontroler

Wewnątrz pakietu mvc_demo utworzymy pakiet kontrolera, w którym utworzymy nasz kontroler HelloWorldController:
@Controller
public class HelloWorldController {

   @RequestMapping(value = "/greeting")
   public String helloWorldController(@RequestParam(name = "name", required = false, defaultValue = "World") String name, Model model) {
       model.addAttribute("name", name);
       return "greeting";
   }

}
Z jednej strony kodu jest bardzo mało, ale z drugiej strony dużo się dzieje. Zacznijmy analizę. Adnotacja @Controller wskazuje, że ta klasa jest kontrolerem. Kontrolery w Springu przetwarzają żądania HTTP kierowane do określonych adresów. Nasza klasa posiada metodę helloWorldController, która jest oznaczona adnotacją - @RequestMapping(value = "/greeting"). Ta adnotacja informuje nas, że ta metoda przetwarza żądania HTTP GET kierowane do adresu /greeting. Innymi słowy, ta metoda zadziała, jeśli ktoś przejdzie do /greeting. Ta metoda zwraca String. Według Spring-MVC metoda kontrolera musi zwracać nazwę widoku. Następnie Spring będzie szukał pliku HTML o tej samej nazwie, który zostanie zwrócony w odpowiedzi na żądanie HTTP. Jak widać nasza metoda zwraca nazwę strony internetowej, którą stworzyliśmy wcześniej - powitanie. Nasza metoda przyjmuje 2 argumenty. Przyjrzyjmy się im: Parametr 1: @RequestParam(nazwa = „nazwa”, wymagana = fałsz, wartość domyślna = „Świat”) Nazwa ciągu. Adnotacja @RequestParam stwierdza, że ​​parametr String name jest parametrem adresu URL. Nawiasy adnotacyjne wskazują, że ten parametr w adresie URL jest opcjonalny (wymagany = false), w przypadku jego braku wartość parametru String name będzie równa World (defaultValue = „World”), a jeśli jest obecny, to ten parametr w adresie URL będzie się nazywać name (name = „name”). Może być tu wiele niejasności. Podajmy przykłady. Poniższa tabela pokazuje, jaka będzie wartość parametru String name dla różnych opcji dostępu do adresu /greeting (z parametrami w adresie URL i bez nich)
Przykładowy adres URL Wartość parametru nazwy ciągu
/Powitanie Świat
/greeting?name=Przyjacielu amigo
/greeting?name=Zor Zorza
Parametr 2: Drugi parametr to Model modelu. Ten parametr jest modelem. Model ten składa się wewnętrznie z różnych atrybutów. Każdy atrybut ma nazwę i wartość. Coś w rodzaju par klucz-wartość. Za pomocą tego parametru możemy przenieść dane z kodu Java na strony HTML. Lub, używając terminologii MVC, przenieś dane z modelu do widoku. Pozostaje przeanalizować ostatnią linię. Sposób, w jaki przekazujemy dane z Java do HTML lub z Modelu do Widoku. Treść metody zawiera następującą linię: model.addAttribute("name", name); Tutaj tworzymy nowy atrybut o nazwie name i przypisujemy mu wartość parametru name. Przypomnijmy, niedawno omawialiśmy tag: <p th:text="'Hello, ' + ${name} + '!'" /> Powiedzieliśmy, że wartością tagu p będzie tekst „Hello” + wartość zmiennej name, którą ustawimy z kodu Java. Wartość tę ustalamy za pomocą linii model.addAttribute("name", name);

Krok 5. Uruchom

Aby uruchomić musimy uruchomić metodę main w klasie MvcDemoApplication: Część 8. Pisanie małej aplikacji w spring-boocie - 9W logach uruchamiania zobaczymy, że nasza aplikacja webowa została uruchomiona na porcie 8080: Część 8. Pisanie małej aplikacji w spring-boocie - 10A to oznacza, że ​​możemy przejść do strony w przeglądarce: http:// localhost:8080 : Część 8. Pisanie małej aplikacji w spring-boocie - 11Tutaj wyświetlona została nam strona Index.html. Przejdźmy do linku do powitania: Część 8. Pisanie małej aplikacji w spring-boocie - 12Podczas tego przejścia nasz kontroler działał. Przez adres URL nie przekazaliśmy żadnych parametrów, dlatego jak podano w adnotacji, wartość atrybutu name przyjęła domyślną wartość World. Spróbujmy teraz przekazać parametr przez adres URL: Część 8. Pisanie małej aplikacji w spring-boocie - 13Wszystko działa zgodnie z przeznaczeniem. Teraz spróbuj prześledzić ścieżkę zmiennej name:
  1. Użytkownik przekazał wartość parametru name = Amigo -> poprzez adres URL
  2. Kontroler przetworzył naszą akcję, zaakceptował zmienną name i ustawił atrybut modelu z nazwą name i zaakceptowaną wartością ->
  3. Z modelu dane te trafiały do ​​widoku, na stronę pozdrowienia.html i były wyświetlane użytkownikowi
To wszystko!

Dzisiaj przedstawiliśmy Wam dość duży i ciekawy temat MVC (Model – Widok – Kontroler). To koniec serii, której celem jest wprowadzenie Cię w to, co musisz wiedzieć przed rozpoczęciem rozwoju Enterprise.

Zostaw tematy, które Cię interesują w komentarzach - zrobimy to!

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION