Thứ Ba, 23 tháng 8, 2016

Spring 3.0 Hello World với MVC Design Pattern

Spring 3.0 Hello World

Tác giả: Nguyễn Anh Khoa

Mục đích: Trong bài này, chúng ta sẽ viết ứng dụng HelloWorld theo mô hình MVC với Spring Framework.

Tác giả: Nguyễn Anh Khoa

Mục đích: Trong bài này, chúng ta sẽ viết ứng dụng HelloWorld theo mô hình MVC với Spring Framework.

 

Để thực hiện được bài demo này, các bạn cần những tool sau đây:

·        Eclipse IDE for J2EE Developer

·        Apache Tomcat v6

·        Spring Plugin  cho Eclipse.

 

Sau khi các bạn download Spring plugin thi giải nén và copy các file trong 2 folder featuresplugin vào folder tương ứng trong Eclipse.

 

 

Nếu đang mở Eclipse thì restart để active Plugin.

 

MVC in Spring

 

Hình dưới đây mô tả luồng xử lý một request.

 

 

1.      DispatcherServlet nhận request và dựa vào HandlerMapping để tìm và invoke Controller tương ứng.

2.      Controller xử lý Request và return một ModelAndView object. ModelAndView object này chứa model data và ViewName.

3.      ViewResolver nhận ViewName từ DispatcherServlet để tìm View tương ứng và return View về cho DispatcherServlet.

4.      DispatcherServlet sẽ pass Model vào View và response về user.

 

Phần xử lý View ở đây hơi rắc rối và khó hiểu nhưng chúng ta sẽ tìm hiểu kĩ bên dưới.

Tạo Project

 

1.      Khởi động Eclipse

2.      Chọn File à New à Project

3.      Chọn Dynamic Web Project và click Next

 

 

4.      Nhập tên project là Spring_MVC_HelloWorld và chọn server như hình.

Click Finish.

 

Add Spring nature and libs

1.      Click chuột phải vào Project và chọn Spring tools à Add Spring nature:

 

 

2.      Add những file jar sau vào thư mục lib:

 

Tạo Controller

 

1.      Trước tiên tạo file JSP để send request đến Controller.

Chọn File à New à Other.

Chọn Web à JSP  File. Click Next.

Chọn folder WebContent và nhập tên file là redirect.jsp.

Click Finish.

Implement như bên dưới:

 

 

2.      Click chuột phải vào Project và chọn New à Class

3.      Nhập tên package và tên class như sau:

 

 

 

4.      Click Browse, nhập vào AbstractController và chọn Superclass cho class HelloController:

 

 

Click OK.

 

5.      Click Finish.

6.      Implement class HelloController như sau:

 

 

 

 

Property message sẽ được set giá trị trong file config của Spring thông qua setter.

Mỗi Controller phải override method handleRequestInternal() để xử lý request.

Object ModelAndView được tạo để return về cho Dispatcher Servlet :

·        welcomePage: ViewName

·        welcomeMsg: Model name, được dùng để gọi model này ra trên View(JSP file).

·        message: model object.

 

5.      Mở file web.xml và cấu hình như sau:

 

 

Ở đây chúng ta cấu hình <url-pattern> là *.htm.

Trong file redirect.jsp, một request được gửi đến Server với tên là welcome.htm nên sẽ map với servlet này.

Mặc định, khi DispatcherServlet được invoke thì nó sẽ load file cấu hình cho Spring MVC có tên là:

 

                        [servlet-name] + “-servlet.xml”

 

Ta đặt tên cho servlet là dispatcher nên ta cần tạo file cấu hình với tên là: dispatcher-servlet.xml.

 

Tạo file cấu hình cho Spring MVC

 

1.      Click chuột phải lên Project và chọn New à Other .

2.      Chọn Spring à Spring Bean Definition.

Click Next:

 

 

3.      Đặt tên file là dispatcher-servlet.xml và chọn folder là WEB-INF.

Click Finish.

 

 

4.      Chúng ta cấu hình như sau:

 

 

DispatcherServlet get URL pattern từ request và dùng BeanNameUrlHandlerMapping để get Controller tương ứng. BeanNameUrlHandlerMapping  dựa vào file config để get object có tên map với URL pattern. Vì thế chúng ta config thế này:

 

<bean name="/welcome.htm" class="sample.controller.HelloController">

 

Attribute id của tag bean không chấp nhận kí tự “/” nên ta cấu hình cho attribute name.

Như vậy chúng ta đã hiểu DispatcherServlet có thể invoke Controller tương ứng với request như thế nào. Ngoài ra giá trị của property message cũng được set thông qua Dependency Injection như sau:    

 

            <property name="message" value="Hello World"/>

 

Method handleRequestInternal() của class HelloController được invoke và trả về object ModelAndView. Object này có model data là giá trị của property message được binding với tên là welcomeMsg và ViewName là welcomePage. Khi có ViewName, DispatcherServlet sẽ invoke ViewResolver:

 

            <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

          <property name="prefix">

              <value>/WEB-INF/jsp/</value>

          </property>       

          <property name="suffix">

              <value>.jsp</value>

          </property>       

     </bean>

 

ViewResolver gọi InternalResourceViewResolver để xác định View như sau:

 

[prefix] + [ViewName] + [suffix]

 

Ở đây,  dựa vào cấu hình như trên ta sẽ xác định được View là:

/WEB-INF/jsp/welcomePage.jsp

 

 

Tạo View

 

1.      Click chuột phải vào project và chọn New à Folder

Chọn location cho folder là WEB-INF và tên là jsp.

Click Finish.

2.      Tạo file welcomePage.jsp trong folder jsp vừa tạo và implement như sau:

 

 

Ở đây chúng ta đã sử dụng model data dựa vào tên là welcomeMsg.

Cấu trúc source:

 

 

Build Project

Run on Server.

Đây là kết quả:

 

Hãy nhìn lại URL một chút các bạn sẽ thấy là giống như mình đang request đến một trang HTML bình thường.

 

Chúc mừng các bạn đã hoàn thành xong bài Spring MVC HelloWorld!

Hẹn gặp lại các bạn ở chủ đề sau!

Không có nhận xét nào:

Đăng nhận xét