Mô hình MVC trong Spring. Tạo Project HelloWorld

on

Trong phần này tôi sẽ hướng dẫn tạo 1 ứng dụng đơn giản bằng Spring MVC Framework , đồng thời giải thích các luồng dữ liệu được xử lý khi chạy ứng dụng. Ứng dụng này hiển thị một thông điệp ra trình duyệt web. Tôi đảm bảo khi nghiên cứu chi tiết bài viết này sẽ hiểu khá rõ về Spring MVC Framwork 

Spring Web model-view-controller (MVC) framework được thiết kế xung quanh một 

DispatcherServlet 

xử lý hết tất cả các HTTP yêu cầu và HTTP phản hồi lại. Các luồng xử lý của Spring MVC được mô tả trong sơ đồ sau:

[1] Sau khi nhận được 1 yêu cầu HTTP, DispatcherServlet sẽ tư vấn HandlerMapping Controller thích hợp.

[2] Controller nhận các yêu cầu và gọi phương thức thích hợp bằng cách sử dụng phương thức GET hoặc POST. Tại đây phương thích hợp được gọi sẽ thiết lập model dữ liệu và trả về tên View cho DispatcherServlet.

[3] DispatcherServlet sẽ nhận được sự trợ giúp từ ViewResolver để xác định View cho các yêu cầu.

[4] Quá trình chọn View hoàn thành, DispatcherServlet chuyển model dữ liệu tới View  đó và cuối cùng chuyển tới trình duyệt.

Chúng ta bắt đầu tạo 1 ứng dụng Spring MVC:

Tạo Project

Trong bài này ta sẽ setup 1 project maven. Lợi ích là ta không phải nhọc công quản lý 1 đống lib nữa, việc này ta giao cho maven xử lý.

B1: Trong cửa sổ làm việc của Eclipse, bạn chọn File -> New -> Maven Project. Nếu không tìm thấy Maven Project, bạn chọn dòng Others. Trong cửa sổ hiện ra, bạn tìm maven project ở khung search, sau đó nhấn Next

Làm quen với Spring MVC - Hello World

B2: Ở cửa sổ tiếp theo, tiếp tục nhấn Next

Làm quen với Spring MVC - Hello World

maven-archetype-webapp

 (vì chúng ta cần 1 project web mà  :-) )

B3: Ở cửa số kế, bạn chọn dòng có Artifact Id là(vì chúng ta cần 1 project web mà

Làm quen với Spring MVC - Hello World

B4: Tới lúc đặt tên cho project của bạn rồi. Bạn nhập vào 2 dòng là Group ID và Artifact ID. Tên hiển thị trong Eclipse sẽ là Artifact ID. Group ID sẽ dùng cho việc đóng gói sau này. Sau khi nhập xong xuôi, bạn bấm Finish để hoàn tất nhé.

Làm quen với Spring MVC - Hello World

B5: 1 bước nhỏ đó là điều chỉnh lại Project Facets cho project này. Các bạn nhấp phải vào project -> Properties. Trong cửa sổ hiện ra, chọn 

Project Facets

 ở menu bên trái. Ta chọn 3 mục như trong hình bên dưới
Làm quen với Spring MVC - Hello World

Ghi chú: nếu bị thông báo không thể thay đổi Dynamic Web Module, các bạn check bỏ mục này rồi apply, sau đó chọn lại bình thường. Bạn cũng check vào Apache Tomcat v7.0 trong thẻ Runtimes

B6: Tiếp tục vào Properties của Project, chọn Java Build Path. Trong tab source, bỏ check mục Allow output folder for source folders. Sau khi nhấn Apply, project của chúng ta sẽ xuất hiện thêm 

src/main/java

. Đây là folder chứa tất cả các code java của chúng ta sau này.
Làm quen với Spring MVC - Hello World

Project dependency

Đây là dependency của maven dùng cho bài này. Các bạn mở file pom.xml lên và copy đoạn code phía dưới vào nhé.

1

2

3

4

5

6

7

8

9

10

11

12

<properties>

  

<!– Spring –>

  

<spring-framework.version>

3.2.4.RELEASE

</spring-framework.version>

</properties>

<dependencies>

    

  

<dependency>

        

<groupId>

org.springframework

</groupId>

        

<artifactId>

spring-webmvc

</artifactId>

        

<version>

${spring-framework.version}

</version>

    

</dependency>

</dependencies>

Cấu hình các file xml

Các file cấu hình xml ta để chung vào thư mục WebContent/WEB-INF

Ta cần tạo 2 file, 

web.xml

 và 

spring-mvc-servlet.xml

Web.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<?

xml

version

=

“1.0”

encoding

=

“UTF-8”

?>

<web-app

xmlns

:

xsi

=

“http://www.w3.org/2001/XMLSchema-instance”

    

xmlns

=

“http://java.sun.com/xml/ns/javaee”

    

xsi

:

schemaLocation

=

“http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”

    

id

=

“WebApp_ID”

version

=

“2.5”

>

    

<display-name>

hello_world

</display-name>

    

<servlet>

        

<servlet-name>

spring-mvc

</servlet-name>

        

<servlet-class>

org.springframework.web.servlet.DispatcherServlet

</servlet-class>

        

<load-on-startup>

1

</load-on-startup>

    

</servlet>

    

<servlet-mapping>

        

<servlet-name>

spring-mvc

</servlet-name>

        

<url-pattern>

/

</url-pattern>

    

</servlet-mapping>

    

<context-param>

        

<param-name>

contextConfigLocation

</param-name>

        

<param-value>

/WEB-INF/spring-mvc-servlet.xml

</param-value>

    

</context-param>

    

<listener>

        

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

    

</listener>

</web-app>

Giải thích:

Ta cấu hình dispatcherServlet trỏ về dispatcher của spring. Mọi request sẽ đi qua dispatcher này trước khi được xử lý. Trong file này ta cũng cấu hình file context cho spring, và tên file này ta có thể thay đổi tùy theo ý thích (ở đây là spring-mvc-servlet.xml)

spring-mvc-servlet.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<?

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

:

p

=

“http://www.springframework.org/schema/p”

    

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-3.1.xsd  

      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd  

      http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd”

>

    

<context:component-scan

base-package

=

“com.fastcodevn.springmvc.hello_world”

/>

    

<context:annotation-config

/>

    

<bean

        

class

=

“org.springframework.web.servlet.view.InternalResourceViewResolver”

>

        

<property

name

=

“prefix”

>

            

<value>

/WEB-INF/pages/

</value>

        

</property>

        

<property

name

=

“suffix”

>

            

<value>

.jsp

</value>

        

</property>

    

</bean>

</beans>

Giải thích:

Ta cần chú ý 2 điểm:

– Khai báo base-package: khai báo package chứa các controller

– Bean view: khai báo kiểu “view” mà ta sử dụng. Trên đây ta sử dụng view là .jsp và các file view được chứa trong folder /WEB- INF/pages/. Vậy ta sẽ có các file view với dạng là 

/WEB-INF/pages/[tên-file-view].jsp

Controller

Ta bắt tay vào viết Controller đầu tiên

Trong 

src/main/java

 ta tạo package như khai báo trong spring-mvc-servlet.xml. Package mình xài trong ví dụ là 

com.fastcodevn.springmvc.hello_world

. Tiếp tục ta tạo 1 class trong package này, đặt tên là HelloWorldController.java

Sau đây là nội dung của HelloWorldController.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

package

com

.

fastcodevn

.

springmvc

.

hello_world

;

import

org

.

springframework

.

stereotype

.

Controller

;

import

org

.

springframework

.

ui

.

Model

;

import

org

.

springframework

.

web

.

bind

.

annotation

.

RequestMapping

;

import

org

.

springframework

.

web

.

bind

.

annotation

.

RequestMethod

;

@Controller

public

class

HelloWorldController

{

    

@RequestMapping

(

value

=

“/hello”

,

method

=

RequestMethod

.

GET

)

    

public

String

printHelloWorld

(

Model

model

)

{

        

model

.

addAttribute

(

“message”

,

“Xin chào các bạn đến với Spring MVC”

)

;

        

return

“hello”

;

    

}

}

Nội dung rất đơn giản phải không các bạn, mình xin lưu ý 1 số điểm.

– Annotation @Controller: thông báo đây là 1 controller.

– Annotation @RequestMapping: value cho biết url của controller này, method chỉ ra phương thức request mà Controller xử lý (ở đây là phương thức GET).

– model.addAttribute: thêm 1 thuộc tính để trả về cho trang jsp.

– Return hello: trả về trang hello.jsp.

JSP

Tạo 1 file 

hello.jsp

 trong folder /WEB-INF/pages có nội dung như sau:

1

2

3

4

5

6

7

8

9

10

11

12

<%

@

page

language

=

“java”

contentType

=

“text/html; charset=UTF-8”

    

pageEncoding

=

“UTF-8”

%>

<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>

<html>

<head>

<meta

http-equiv

=

“Content-Type”

content

=

“text/html; charset=UTF-8”

>

<title>

Hello World

</title>

</head>

<body>

    

<h1>

${message }

</h1>

</body>

</html>

Chạy ứng dụng

Trước hết ta cần tạo 1 server để chạy project. Bạn có thể tải Tomcat ở

đây

và cài đặt vào máy.

Tiếp tục, vào File->New->Other…->Server. Ở cửa sổ hiện ra, chọn Tomcat v7.0, nhấn Next.

Làm quen với Spring MVC - Hello World

Trỏ tới folder nơi bạn cài đặt Tomcat. Next.

Làm quen với Spring MVC - Hello World

Chọn project và add vào server. Finish.

Làm quen với Spring MVC - Hello World

Thê là xong, bây giờ chỉ cần chuột phải vào server và chọn Start.

Làm quen với Spring MVC - Hello World

Tất cả thế là xong. Để kiểm tra thành quả, bạn gõ vào trình duyệt đường dẫn sau

Kết quả thu được là hình bên dưới.

Làm quen với Spring MVC - Hello World

Trên đây là bài viết hướng dẫn các bước cơ bản để làm quen với Spring MVC. Chúc các bạn làm quen nhanh chóng và thực hiện bài ví dụ này thành công. Mình có đính kèm theo source code của ví dụ này để các bạn tham khảo. Mọi ý kiến đóng góp các bạn có thể để lại comment ở bên dưới.

SHARE THIS