JavaRush /Blog Java /Random-VI /Phần 8. Viết một ứng dụng nhỏ trong spring-boot

Phần 8. Viết một ứng dụng nhỏ trong spring-boot

Xuất bản trong nhóm
Tài liệu này là phần cuối cùng của loạt bài “Giới thiệu về Phát triển Doanh nghiệp”. Các bài viết trước: Phần 8. Viết một ứng dụng nhỏ trong spring-boot - 1Hãy xem ví dụ đơn giản nhất về triển khai MVC bằng Spring-MVC làm ví dụ. Để làm điều này, hãy viết một ứng dụng Hello World nhỏ trong spring-boot. Để bạn có thể tự mình lặp lại mọi thứ, tôi sẽ hướng dẫn bạn từng bước. Đầu tiên chúng ta sẽ viết một ứng dụng nhỏ và sau đó chúng ta sẽ phân tích nó.

Bước 1: Tạo ứng dụng khởi động mùa xuân trong IntelliJ IDEA

Sử dụng Tệp -> Mới -> Dự án... tạo một dự án mới. Trong cửa sổ mở ra, ở menu bên trái, chọn Spring Khởi tạo, chọn Dự án SDK và để tùy chọn URL dịch vụ Khởi tạo làm mặc định. Phần 8. Viết một ứng dụng nhỏ trong spring-boot - 2Nhấp vào nút Tiếp theo. Trong cửa sổ tiếp theo, chúng ta cần chọn tham số dự án. Chúng ta sẽ có một dự án Maven. Chọn Loại - Dự án Maven, điền vào Nhóm và Tạo tác Phần 8. Viết một ứng dụng nhỏ trong spring-boot - 3và nhấp vào Tiếp theo. Trong cửa sổ tiếp theo, chúng ta cần chọn các thành phần Spring Framework mà chúng ta sẽ sử dụng. Chúng tôi chỉ cần hai:
  • Spring Web là một thành phần cho phép chúng ta tạo các ứng dụng Web. Thành phần này bao gồm Spring MVC.
  • Thymeleaf - Cái gọi là công cụ mẫu. Một thứ sẽ cho phép chúng ta chuyển dữ liệu từ các trang Java sang HTML
Phần 8. Viết một ứng dụng nhỏ trong spring-boot - 4Phần 8. Viết một ứng dụng nhỏ trong spring-boot - 5Trong cửa sổ tiếp theo, chọn tên và vị trí của dự án trong hệ thống tệp: Phần 8. Viết một ứng dụng nhỏ trong spring-boot - 6Nhấp vào nút Kết thúc. Dự án đã được tạo. Chúng ta có cấu trúc dự án như sau: Phần 8. Viết một ứng dụng nhỏ trong spring-boot - 7Ở đây chúng ta quan tâm đến 2 tệp: pom.xml - bộ mô tả triển khai. Một thứ cho phép bạn nhập nhanh chóng và dễ dàng các thư viện từ các khung khác nhau vào dự án của chúng tôi, cũng như một thứ trong đó chúng tôi định cấu hình tập hợp ứng dụng của mình. Ứng dụng của chúng tôi được xây dựng bằng Maven, pom.xml là tệp cấu hình của hệ thống xây dựng này. Lớp Java - MvcDemoApplication. Đây là lớp chính của ứng dụng của chúng tôi, từ đó chúng tôi sẽ khởi chạy dự án khởi động mùa xuân của mình. Để bắt đầu, chỉ cần chạy phương thức chính trong lớp này. Đây là mã cho lớp này, cũng như tệp 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>

Bước 2. Tạo trang web

Ứng dụng của chúng tôi sẽ cực kỳ đơn giản. Chúng ta sẽ có một trang chính - index.html, bên trong sẽ có liên kết đến trang chào mừng - hello.html. Trên trang chào mừng chúng ta sẽ hiển thị lời chào. Hãy triển khai khả năng gửi tên lời chào đến trang hello.html thông qua tham số url. Hãy tạo trang chính của ứng dụng của chúng ta - index.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>
Bây giờ hãy tạo trang hello.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>
Tại đây, từ một trang html không điển hình, bạn có thể thấy một thẻ: <p th:text="'Hello, ' + ${name} + '!'" /> Thuộc tính ththẻ plà một công cụ của công cụ mẫu Thymeleaf. Nhờ đó, giá trị của thẻ psẽ là dòng chữ “Xin chào,” + giá trị của biến namemà chúng ta sẽ đặt từ mã Java.

Bước 3: Tạo bộ điều khiển

Bên trong gói mvc_demo, chúng ta sẽ tạo một gói contoller, bên trong đó chúng ta sẽ tạo bộ điều khiển của mình, 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";
   }

}
Một mặt có rất ít mã, nhưng mặt khác lại có rất nhiều thứ đang diễn ra. Hãy bắt đầu phân tích. Chú thích @Controller chỉ ra rằng lớp này là bộ điều khiển. Bộ điều khiển trong Spring xử lý các yêu cầu HTTP tới các địa chỉ cụ thể. Lớp của chúng ta có một phương thức helloWorldController, được đánh dấu bằng chú thích - @RequestMapping(value = "/greeting"). Chú thích này cho chúng ta biết rằng phương thức này xử lý các yêu cầu HTTP GET tới địa chỉ /greeting. Nói cách khác, phương pháp này sẽ hoạt động nếu ai đó truy cập /greeting. Phương thức này trả về String. Theo Spring-MVC, phương thức điều khiển phải trả về tên của chế độ xem. Tiếp theo, Spring sẽ tìm kiếm một file html có cùng tên, file này sẽ được trả về dưới dạng phản hồi cho yêu cầu HTTP. Như bạn có thể thấy, phương thức của chúng tôi trả về tên của trang web mà chúng tôi đã tạo trước đó - lời chào. Phương pháp của chúng tôi có 2 đối số. Hãy xem xét chúng: Tham số 1: @RequestParam(name = "name", bắt buộc = false, defaultValue = "World") Tên chuỗi. Chú thích @RequestParam cho biết tham số Tên chuỗi là tham số url. Các dấu ngoặc đơn chú thích cho biết tham số này trong url là tùy chọn (bắt buộc = false), nếu vắng mặt thì giá trị của tham số Tên chuỗi sẽ là World (defaultValue = "World"), còn nếu có thì tham số này trong url sẽ được gọi là name (name="name") Có thể có nhiều điều chưa rõ ràng ở đây. Hãy đưa ra ví dụ. Bảng bên dưới cho biết giá trị của tham số Tên chuỗi sẽ là bao nhiêu đối với các tùy chọn khác nhau để truy cập địa chỉ /greeting (có và không có tham số trong URL)
URL mẫu Giá trị tham số tên chuỗi
/Lời chào Thế giới
/greeting?name=Amigo bạn ơi
/greeting?name=Zor Zor
Tham số 2: Tham số thứ 2 là Model model. Tham số này là một mô hình. Mô hình này bao gồm nội bộ của các thuộc tính khác nhau. Mỗi thuộc tính có một tên và một giá trị. Một cái gì đó giống như cặp khóa-giá trị. Sử dụng tham số này, chúng ta có thể chuyển dữ liệu từ mã Java sang các trang html. Hoặc, theo thuật ngữ MVC, chuyển dữ liệu từ Mô hình sang Chế độ xem. Nó vẫn còn để phân tích dòng cuối cùng. Cách chúng ta truyền dữ liệu từ Java sang html hoặc từ Model sang View. Phần thân của phương thức chứa dòng sau: model.addAttribute("name", name); Ở đây chúng ta tạo một thuộc tính mới có tên là name và gán cho nó giá trị của tham số name. Hãy nhớ rằng, gần đây chúng ta đã thảo luận về thẻ: <p th:text="'Hello, ' + ${name} + '!'" /> Chúng ta đã nói rằng giá trị của thẻ p sẽ là văn bản “Xin chào,” + giá trị của biến tên mà chúng ta sẽ đặt từ mã Java. Chúng tôi đặt giá trị này bằng cách sử dụng dòng model.addAttribute("name", name);

Bước 5. Khởi chạy

Để khởi chạy, chúng ta cần chạy phương thức chính trong lớp MvcDemoApplication: Phần 8. Viết một ứng dụng nhỏ trong spring-boot - 9Trong nhật ký khởi chạy, chúng ta sẽ thấy rằng ứng dụng web của chúng ta đã khởi động trên cổng 8080: Phần 8. Viết một ứng dụng nhỏ trong spring-boot - 10Và điều này có nghĩa là chúng ta có thể truy cập trang trong trình duyệt: http:// localhost:8080 : Phần 8. Viết một ứng dụng nhỏ trong spring-boot - 11Tại đây trang index.html đã được hiển thị cho chúng tôi. Hãy theo liên kết để chào mừng: Phần 8. Viết một ứng dụng nhỏ trong spring-boot - 12Trong quá trình chuyển đổi này, bộ điều khiển của chúng tôi đã hoạt động. Chúng tôi không chuyển bất kỳ tham số nào qua URL, do đó, như đã nêu trong chú thích, giá trị của thuộc tính name lấy giá trị mặc định Thế giới. Bây giờ chúng ta hãy thử truyền tham số qua url: Phần 8. Viết một ứng dụng nhỏ trong spring-boot - 13Mọi thứ đều hoạt động như dự định. Bây giờ hãy thử theo dõi đường dẫn của biến tên:
  1. Người dùng truyền giá trị tham số name = Amigo -> qua url
  2. Bộ điều khiển đã xử lý hành động của chúng tôi, chấp nhận biến tên và đặt thuộc tính mô hình, với tên tên và giá trị được chấp nhận ->
  3. Từ mô hình, dữ liệu này đi đến View, đến trang hello.html và được hiển thị cho người dùng
Đó là tất cả!

Hôm nay chúng tôi đã giới thiệu đến các bạn một chủ đề khá lớn và thú vị về MVC (Model - View - Controller). Đây là phần cuối của loạt bài, mục đích là giới thiệu cho bạn những điều bạn cần biết trước khi bắt đầu phát triển Doanh nghiệp.

Để lại các chủ đề mà bạn quan tâm trong phần bình luận - chúng tôi sẽ làm điều đó!

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION