[Thực hành] Tạo ứng dụng Spring Greeting

1. Tổng quan

Mục tiêu

Luyện tập tạo và deploy ứng dụng Spring MVC.

Điều kiện

Biết cách tạo và deploy ứng dụng Spring MVC.

Mô tả

Trong phần này, chúng ta sẽ tạo một ứng dụng Spring MVC cơ bản.

Hướng dẫn được chia thành 2 phần:

  1. Tạo ứng dụng với một trang hiển thị lời chào
  2. Tạo ứng dụng với một trang hiển thị lời chào kèm theo tên được truyền vào

Hướng dẫn

Phần 1: Tạo ứng dụng Spring MVC cơ bản

Bước 1: Tạo dự án Spring MVC

Đặt tên dự án là “spring-greeting”.

Tạo thư mục WEB-INF trong web gồm các file xml như sau

Với Spring, bạn có thể sử dụng XML để cấu hình ứng dụng. Trong ứng dụng đơn giản, chúng ta thường cấu hình ứng dụng với 3 file:

  • web.xml: cấu hình ứng dụng web của java. Trong đó có chỉ ra file cấu hình Spring MVC là dispatcher-servlet.xml
  • dispatcher-servlet.xml: cấu hình dành riêng cho ứng dụng Spring MVC
  • applicationContext.xml: định nghĩa các bean được chia sẻ giữa các servlet.

Bước 2: Cấu hình dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">

<context:component-scan base-package="controllers"/>

<mvc:annotation-driven/>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>

Tập tin cấu hình này chứa đúng một thẻ <bean> . Thẻ này chứa các thuộc tính khai báo các namespace để sử dụng cho các thẻ ở phần cấu hình. Thông thường, chúng ta dùng tới đâu thì khai báo tới đó. Tuy nhiên, chúng ta có thể khai báo tất cả những gì cần thiết để chuẩn bị cho các khả năng có thể sử dụng cho ứng dụng sau này.

Chúng ta hãy chú ý đến thẻ <bean> có khai báo class  = “org.springframework.web.servlet.view.InternalResourceViewResolver”. Sau khi một action trong controller hoàn thành nhiệm vụ, thì nó phải chỉ ra view nào cần được sử dụng để hiển thị giao diện kết quả cho người dùng. Chỉ có tên view được chỉ định trong action, còn vị trí đặt view, hoặc phần mở rộng của view thì giao lại cho ViewResolver giải quyết.

Thẻ <context:component-scan base-package = “controllers”> sẽ giúp cho ứng dụng tham chiếu đến các lớp controllers.

Bước 3: Cấu hình web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app

File web.xml được sử dụng để cấu hình nhiều công việc khác nhau cho ứng dụng web nói chung. Trong phần này, chúng ta chỉ khai thác các khai báo liên quan đến ứng dụng Spring MVC.

Trong khai báo này thì org.springframework.web.servlet.DispatcherServlet để sử dụng để tiếp nhận tất cả các yêu cầu có địa chỉ url được khai báo trong cặp thẻ <url-pattern>. 

DispatcherServlet sẽ phân giải để chuyển đến các action phù hợp với các yêu cầu dựa vào định dạng url. 

Trong file cấu hình này, chúng ta cũng sử dụng tên dispatcher để đặt tên cho servlet.  

Bước 4: Tạo Controller

Tạo thư mục src/controllers và lớp GreetingController với nội dung như sau:

package controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class GreetingController {
@GetMapping("/greeting")
public String greeting(){
return "index";
}
}

Trong đó:

  • @Controller: là annotation để đánh dấu lớp GreetingController là một controller (đối tượng sẽ xử lý các request)
  • @GetMapping: là annotation để đánh dấu phương thức greeting() là một phương thức dùng để xử lý request khi có một request GET được gửi đến đường dẫn “/greeting”.

Bước 5: Tạo thư mục views bên trong thư mục WEB-INF

Thư mục views là nơi chứa các file .jsp, là các file giao diện của ứng dụng. Tạo file File index.jsp với nội dung như sau:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Greeting</title>
</head>
<body>
<h1>Hello Spring MVC</h1>
</body>
</html>
 

Bước 6: Cấu hình Artifacts

Vào File > Project Structure > Artifact và nhấn duplicate  vào 2 thư viện của Spring để chuyển vào trong thư mục WEB-INF/lib.

Bước 7: Cấu hình Tomcat

Vào menu Run

Cấu hình Tomcat

Bước 8: Chạy ứng dụng web

Bước 9: Truy cập đường dẫn http://localhost:8080/greeting

Kết quả:

Phần 2: Nhận tham số từ url

Bước 1: Cập nhật file GreetingController

@Controller
public class GreetingController {
@GetMapping("/greeting")
public String greeting(@RequestParam String name, Model modle){
modle.addAttribute("name", name);
return "index";
}
}

Trong đó: 

  • @RequestParam: là annotation để đánh dấu rằng name là tham số được truyền vào
  • model: là đối tượng để truyền dữ liệu từ controller sang view
  • model.addAttribute(): là phương thức để truyền một dữ liệu từ controller sang view

Bước 2: Cập nhật file index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Greeting</title>
</head>
<body>
<h1>Hello: ${name}</h1>
</body>
</html>
 

Trong đó:

  • ${name}: là biểu thức để in giá trị của biến name

Bước 3: Chạy lại server Tomcat

Bước 4: Truy cập đường dẫn http://localhost:8080/greeting?name=John

Kết quả:

Leave a Reply

Your email address will not be published. Required fields are marked *