金立工厂深度探秘:使用Spring MVC3构建Web应用详细教程

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 03:39:18
【IT168 应用】本文将指导大家如何使用Spring MVC3去构建一个Web应用。在Spring MVC中,所有的用户请求都会被派发到控制器模块,控制器然后再根据业务逻辑去调用数据访问层获得数据,最后通过JSP视图返回。

  在动手之前,我们先准备好我们的环境,需要的是JDK 1.5以上以及Eclipse IDE,当然还要下载最新版本的Spring 3,本文还要下载最新版本的ant,以便我们学习如何通过ant去构建应用。

  Spring MVC3构建Web应用第一步

首先在Eclipse中利用新建菜单,建立一个Dynamic WebProject(动态Web工程),命名为SampleSpringMVC,接下来,我们要建立一个ant.xml的文件,这个文件会方便我们把做好的程序打包成war文件,这个可以有如下几步去实现:

  1、点文件—新建—文件,如下图:

  2、输入ant.xml作为文件名,并点完成。如下图:

  3、打开ant.xml文件,编辑内容如下:

#div_code img { border: 0px none; }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        Building...
26        
27        
28            
29            
30        

31    

32  
33    
34        Archiving...
35        
36            
37                
38            

39        

40    

41  
42    
43        Deploying...
44        
45            
46                
47            

48        

49    

50  
51

  Spring MVC3构建Web应用第二步

  建立一个ant.properties文件,该文件会存放一些值的属性,并且这些值也会是ant.xml中用到的。请按如下步骤实现:

  1)点文件—新建-文件

  2) 将文件命名为ant.properties,并点完成,如下图:

  3)打开ant.properties,修改tomcat.home的目录为你安装tomcat的实际目录。

#div_code img { border: 0px none; }1tomcat.home=C:/Tools/apache-tomcat-6.0.2
2tomcat.lib=$...{tomcat.home}/lib

 

  下载下面列表的.jar文件,并放到SampleSpringMVC/war/WEB-INF/lib下。

#div_code img { border: 0px none; }1commons-logging.jar
2jstl-api-1.2.jar
3jstl.jar
4org.springframework.asm-3.0.5.RELEASE.jar
5org.springframework.beans-3.0.5.RELEASE.jar
6org.springframework.context-3.0.5.RELEASE.jar
7org.springframework.core-3.0.5.RELEASE.jar
8org.springframework.expression-3.0.5.RELEASE.jar
9org.springframework.web-3.0.5.RELEASE.jar
10org.springframework.web.servlet-3.0.5.RELEASE.jar
11standard.jar

 

  按如下修改web.xml:

#div_code img { border: 0px none; }1  
2  
34    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
6  
7    SampleSpringMVC
8  
9    
10        SampleSpringMVC
11        org.springframework.web.servlet.DispatcherServlet
12        1
13    

14  
15    
16                SampleSpringMVC
17                *.htm
18        
    
19  
20    
21        index.jsp
22    

23  
24

 

  创建index.jsp,这个只需要在war/WEB-INF下建立即可,并且将内容设置为如下:

#div_code img { border: 0px none; }1<%@ page language="java" session="false" contentType="text/html; charset=UTF-8"%>
2<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3
4    
5        Adobocode : Sample Spring MVC
6    
7    
8        

Adobocode : Hello World


9        

10        ">Person List
11    
12

  Spring MVC3构建Web应用第三步

  在SampleSpringMVC/war/WEB-INF中建立文件SampleSpringMVC-servlet.xml,并将内容修改如下:

#div_code img { border: 0px none; }1
2  
3
4  
56    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
7    xmlns:p="http://www.springframework.org/schema/p"
8    xmlns:context="http://www.springframework.org/schema/context"
9    xsi:schemaLocation="
10  
11http://www.springframework.org/schema/beans
12  
13http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
14  
15http://www.springframework.org/schema/context
16  
17http://www.springframework.org/schema/context/spring-context-3.0.xsd">
18  
19    
20  
21    
22  
23    
24  
25    
26  
27    
28        org.springframework.web.servlet.view.JstlView
29        /WEB-INF/jsp/
30        .jsp
31    

32  
33

 

这里,我们利用了spring 3 mvc的新特性,自动扫描,通过context:component-scanbase-package,设置了paul.syney.controller和paul.sydney.service两个包下的文件只要使用spring 3的标准注释都可以被扫描到。

  在SampleSpringMVC/war/WEB-INF下建立目录jsp;

  在SampleSpringMVC/war/WEB-INF下建立目录classes;

  在SampleSpringMVC/war/WEB-INF/jsp下建立一个新的jsp文件叫personDisplay,并写入如下代码:

#div_code img { border: 0px none; }1
2  
3<%@ page language="java" session="false"
4    contentType="text/html; charset=UTF-8"%>
5<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
6  
7
8
9    
10        Adobocode : Sample Spring MVC using JSTL iteration
11    
12    
13        

Adobocode : Person List


14        
15            
16                
17                
18                
19                
20            
21            
22            

23                
29                
30                
31                
32            
33            
34        
Id Name Age Address

24                    
25                                    
26                            

27                    $...{p.id}
28                
$...{p.name} $...{p.age} $...{p.address}

35    

 

  在SampleSpringMVC/war/WEB-INF/jsp下建立一个新的jsp文件叫personForm,修改代码如下:

#div_code img { border: 0px none; }1  
2  
3<%@ page language="java" session="false" contentType="text/html; charset=UTF-8"%>
4<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
5<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
6
7    
8        Adobocode : Sample Spring MVC using Forms
9    
10  
11    
12        

Adobocode : Person Form


13        
14            
15            

16                
17                    
18                        
19                        
20                    
21                    
22                        
23                        
24                    
25                    
26                        
27                        
28                    
29                    
30                        
31                        
35                    
36                
Name
Age
Address

32                            
33                            
34                        

37            

38        

39    
40

  Spring MVC3构建Web应用第四步

  现在我们开始设计控制器,鼠标右击src目录,选择新建-包,如下图:

  并将包的名命名为paul.sydney.controller,在这个包中,新建立一个类,命名为PersonDisplay,将代码修改如下:

#div_code img { border: 0px none; }1  package paul.sydney.controller;
2  
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.stereotype.Controller;
5import org.springframework.ui.ModelMap;
6import org.springframework.web.bind.annotation.RequestMapping;
7import org.springframework.web.bind.annotation.RequestParam;
8  
9import paul.sydney.service.DummyService;
10  
11/** *//**
12 * PersonDisplay class, display controller for the 'personDisplay.jsp'
13 * Copyright : adobocode.com , 2010
14 * @author Paul Sydney Orozco | xtrycatchx@gmail.com
15 *
16 */
17@Controller
18public class PersonDisplay ...{
19  
20     private final DummyService dummyService;
21  
22    @Autowired
23    public PersonDisplay(DummyService dummyService) ...{
24        this.dummyService = dummyService;
25    }
26  
27    @RequestMapping("/personDisplay.htm")
28    public ModelMap defaultHandler() ...{
29        return new ModelMap("personList", this.dummyService.getDummyList());
30    }
31 }

 

这里,使用注解@Controller表示这个是一个控制器,而@RequestMapping("/personDisplay.htm")则表示对于personDisplay.htm这样的请求,使用defaultHandler这个方法去处理。而在defaultHandler中,又调用了逻辑服务层的

  dummyService.getDummyList()方法获得人员列表,最后把列表存放到一个ModelMap中去(可以先理解为Map的一种数据结构)。

  同样地,在paul.sydney.controller包中,新建一个类PersonForm,并将代码修改如下:

#div_code img { border: 0px none; }1package paul.sydney.controller;
2  
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.stereotype.Controller;
5import org.springframework.ui.ModelMap;
6import org.springframework.validation.BindingResult;
7import org.springframework.web.bind.annotation.ModelAttribute;
8import org.springframework.web.bind.annotation.RequestMapping;
9import org.springframework.web.bind.annotation.RequestMethod;
10import org.springframework.web.bind.annotation.RequestParam;
11import org.springframework.web.bind.annotation.SessionAttributes;
12import org.springframework.web.bind.support.SessionStatus;
13  
14import paul.sydney.model.Person;
15import paul.sydney.service.DummyService;
16@Controller
17@RequestMapping("/personForm.htm")
18@SessionAttributes("person")
19public class PersonForm ...{
20  
21    private final DummyService dummyService;
22  
23    @Autowired
24    public PersonForm(DummyService dummyService) ...{
25        this.dummyService = dummyService;
26    }
27  
28    @RequestMapping(method = RequestMethod.GET)
29    public String setupForm(@RequestParam("personId") int id, ModelMap model) ...{
30        Person person = this.dummyService.retrievePerson(id);
31        model.addAttribute("person", person);
32        return "personForm";
33    }
34  
35    @RequestMapping(method = RequestMethod.POST)
36    public String processSubmit(@ModelAttribute("person") Person person, BindingResult result, SessionStatus status) ...{
37           this.dummyService.savePerson(person);
38            status.setComplete();
39            return "redirect:personDisplay.htm";
40    }
41}

 

这里,首先通过依赖注入,注入了服务层逻辑dummyService,然后在setupForm中,根据传入的参数personId,通过服务层逻辑dummyService找出这个人,然后将其保存到一个Model中去,返回给视图层personForm.jsp显示;而processSubmit是调用服务层逻辑保存用户的资料(通过this.dummyService.savePerson(person)实现),最后使用redirect跳转到personDisplay.htm。


  Spring MVC3构建Web应用第五步

  构建业务实体模型。在src目录中,新建包命名为paul.sydney.model,在这个包下,再新建一个实体类,命名为Person,修改代码如下:

#div_code img { border: 0px none; }1 package paul.sydney.model;
2  
3/** *//**
4 * Copyright : adobocode.com , 2010
5 * @author Paul Sydney Orozco | xtrycatchx@gmail.com
6 */
7public class Person ...{
8  
9    private int id;
10    private String name;
11    private int age;
12    private String address;
13  
14    public int getId() ...{
15        return id;
16    }
17    public void setId(int id) ...{
18        this.id = id;
19    }
20  
21    public String getName() ...{
22        return name;
23    }
24    public void setName(String name) ...{
25        this.name = name;
26    }
27    public int getAge() ...{
28        return age;
29    }
30    public void setAge(int age) ...{
31        this.age = age;
32    }
33    public String getAddress() ...{
34        return address;
35    }
36    public void setAddress(String address) ...{
37        this.address = address;
38    }
39  
40    @Override
41    public String toString()...{
42        StringBuilder sb = new StringBuilder();
43        sb.append("\nname : " + this.name);
44        sb.append("\nage : " + this.age);
45        sb.append("\naddress : " + this.address);
46        return sb.toString();
47  
48    }
49  
50}

 

  构建业务逻辑层。同样在src目录下新建一个包,命名为paul.sydney.service,并且新建一个类DummyService,代码如下:

#div_code img { border: 0px none; }1paul.sydney.service;
2  
3import java.util.ArrayList;
4  
5import paul.sydney.model.Person;
6  
7import java.util.List;
8  
9import org.springframework.stereotype.Service;
10  
11/** *//**
12 * Copyright : adobocode.com , 2010
13 * @author Paul Sydney Orozco | xtrycatchx@gmail.com
14 */
15@Service
16public class DummyService ...{
17  
18    /** *//**
19     * This method supposed to be returning a Collection of Person objects from a DAO layer
20     * For this tutorial, let us just hard-code this List of Person objects
21     */
22    public List getDummyList() ...{
23        List list = new ArrayList();
24        Person p1 = new Person();
25        p1.setId(12345);
26        p1.setName("Paul");
27        p1.setAge(27);
28        p1.setAddress("Dalaguete, Cebu");
29  
30        Person p2 = new Person();
31        p2.setId(54321);
32        p2.setName("Sydney");
33        p2.setAge(25);
34        p2.setAddress("Cebu City");
35  
36        list.add(p1);
37        list.add(p2);
38        return list;
39    }
40  
41    /** *//**
42     * This method supposed to be returning Person object from a DAO layer
43     * For this tutorial, let us just hard-code the Person instance
44     */
45    public Person retrievePerson(int id) ...{
46        Person person = new Person();
47        person.setId(56789);
48        person.setName("Nikki");
49        person.setAge(63);
50        person.setAddress("Dalaguete, Cebu");
51        return person;
52    }
53  
54    /** *//**
55     * This method supposed to be persisting the passed Person object
56     * For this tutorial, let us include the persisting DAO layer
57     * and assume the method successful saved or updated the Person object
58     */
59    public void savePerson(Person person) ...{
60        System.out.println("\n\nSaving" + person);
61    }
62}

 

  在这里,只是简单的在一个List中存放了多个person对象而已。

  最后,项目的结构如下图:

  接着,我们右击ant.xml,选择Run As->Ant Build,如下图:


  Spring MVC3构建Web应用第六步

  接着在编辑对话菜单中,记得选择build,war-archiving及deploy,如下图:

  最后点RUN,运行脚本,然后我们就可以在浏览器中运行了,如下图:

  点Person List,可以看到如下的人员列表:

  点其中的一个ID,可以进入如下页面:

  这里可以修改个人信息,并点保存,跳转到人员列表页面,并可以看到所做的更改。

  总结:

  Spring MVC3中大量使用了注解去简化了编程,本文只是做了一个初步入门的导学。