Saturday, April 4, 2015

Spring MVC cho người mới bắt đầu

Spring MVC cho người mới bắt đầu


1- Giới thiệu 

Spring 4 MVC

Tài liệu hướng dẫn này được viết dựa trên:
  • Eclipse 4.4 (LUNA)

  • Spring 4.0.3.RELEASE

Gợi ý: Bạn nên xem trước tài liệu nó về cấu trúc Spring Framework, và bản chất Spring làm gì, thông qua một hướng dẫn HelloWorld Spring tại:
2- Xem trước luồng đi của ứng dụng 
DispatcherServlet của Spring MVC sẽ đọc file xml cấu hình theo nguyên tắc mà SpringMVC đề ra:
  • {servlet-name} ==> /WEB-INF/{servlet-name}-servlet.xml
Trong trường hợp bạn không muốn sử dụng nguyên tắc đó bạn có thể cấu hình DispatcherServlet của SpringMVC theo cách sau (Trong file web.xml):
?
1
2
3
4
5
6
7
8
9
10
<servlet>
   <servlet-name>my-dispatcher-name</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <init-param>
       <!-- override default name {servlet-name}-servlet.xml -->
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/springmvc-myconfig.xml</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
</servlet>
Luồng đi chính của ứng dụng MVC:
3- Tạo Maven Project 
Bạn cần có kiến thức về Maven, trước khi bắt đầu Spring MVCMaven đã trở lên quan trọng với hầu hết các dự án Java thời điểm hiện nay.

Bạn có thể bỏ ra 10 phút để học ví dụ HelloWorld Maven tại đây:
Tạo một Project kiểu Maven. Maven giúp chúng ta quản lý thư viện một cách tốt nhất. Bạn sẽ rảnh tay để sử lý các vấn đề khác.
Trên Eclipse vào "File/New/Other..."
Chọn nguyên mẫu (archetype) "maven-archetype-webapp".
Nhập vào:
  • Group Id: org.o7planning
  • Artifact Id: HelloSpringMVC
  • Package: org.o7planning.tutorial.springmvc
Đây là cấu trúc Project được tạo ra:
Bạn đừng lo lắng với thông báo lỗi khi Project vừa được tạo ra. Lý do là bạn chưa khai báo thư viện Servlet.

Eclipse 4.4 (Luna) tạo ra project Maven có thể sai cấu trúc. Bạn cần phải kiểm tra.
4- Cấu hình Spring 
Đây là hình ảnh Project sau khi hoàn thành:
Cấu hình Maven sử dụng các thư viện Spring.
  • pom.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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

    <modelVersion>4.0.0</modelVersion>
    <groupId>org.o7planning</groupId>
    <artifactId>HelloSpringMVC</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>HelloSpringMVC Maven Webapp</name>
    <url>http://maven.apache.org</url>


    <dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <!-- Servlet Library -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- Spring dependencies -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>

    </dependencies>
     
    <build>
        <finalName>HelloSpringMVC</finalName>
    </build>

</project>
Cấu hình web.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
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="UTF-8"?>
   id="WebApp_ID" version="3.0">
    
   <display-name>HelloWorldSpring</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>

    <!-- Other XML Configuration -->
   <!-- Load by Spring ContextLoaderListener -->
   <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/root-context.xml</param-value>
   </context-param>

    
    <!-- Spring ContextLoaderListener -->
   <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>
    
</web-app>
DispatcherServlet của SpringMVC sẽ đọc file cấu hình xml theo nguyên tắc:
 
  • {servlet-name} ==> /WEB-INF/{servlet-name}-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
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="UTF-8"?>
    xsi:schemaLocation="http://www.springframework.org/schema/beans

    <context:component-scan base-package="org.o7planning.tutorial.springmvc" />
     
    <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>
Chú ý:

ContextLoaderListener sẽ làm nhiệm vụ đọc các file cấu hình xml khác trong ứng dụng Spring của bạn. Bạn có thể không cần cấu hìnhContextLoaderListener nếu ứng dụng của bạn không cần thiết phải đọc các file cấu hình xml khác.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- web.xml -->

<!-- Spring ContextLoaderListener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Sẽ được đọc bởi Spring ContextLoaderListener -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
         /WEB-INF/root-context.xml,
         /WEB-INF/abc.xml
</param-value>
</context-param>
  • /WEB-INF/root-context.xml
?
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>

  <!-- Empty -->

</beans>
  • HelloWorldController.java
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package org.o7planning.tutorial.springmvc;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class HelloWorldController {

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

}
  • helloworld.jsp
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Spring4 MVC -HelloWorld</title>
</head>
<body>
    <h1>Hello ${name}</h1>
</body>
</html>
5- Chạy ứng dụng Spring 
Nhấn phải chuột vào project và chọn properties:
Chọn Server sẽ chạy là Tomcat 7.
6- Luồng đi của ứng dụng 
Bạn đã hoàn thành xong project và chạy thành công ở bước trên. Lúc này chúng ta sẽ xem chương trình chạy thế nào.

No comments:

Post a Comment