SpringMVC和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:

知道了SpringMVC是什么之后,我们还得从全局的角度来看待它,杜甫这个老诗人不是说过吗?会当凌绝顶,一览众山小。下面我们就来看看SpringMVC的处理流程。

上面这个图大致描述了SpringMVC的整个处理流程,乍一看有点晕乎,且待我一步步分析,最后弄个流程图出来就明白了。
本系列教程使用的SpringMVC是SpringMVC4.2.4这个版本。下面我就以两个案例来教大家如何快速入门SpringMVC这个框架。先来介绍第一个案例,就是咱们通常所说的Hello World小程序。
第一步,创建一个Dynamic Web Project项目,例如01-springmvc。

第二步,导入SpringMVC独立运行的jar包,一共有9个jar包,如下图所示。

第三步,在WebContent/WEB-INF目录新建一个普通的jsp目录,并在该目录下新建一个hello.jsp页面。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>输出提示title>
head>
<body>
${msg }
body>
html>
第四步,在src目录下新建一个com.meimeixia.springmvc.controller包,并在该包下创建一个Controller,例如HelloControll,它就是一个普通的Java类,有点类似于Struts2中的Action,且不需要实现任何接口,只需要在类上添加@Controller注解即可。
package com.meimeixia.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloControll {
@RequestMapping("hello") //该注解用于绑定用户的请求地址,例如hello.action
public ModelAndView hello() {
System.out.println("hello springmvc...");
ModelAndView mav = new ModelAndView();
//设置模型数据,用于传递到jsp页面中显示
mav.addObject("msg", "hello springmvc......");
//设置视图名字,用于响应用户
mav.setViewName("/WEB-INF/jsp/hello.jsp");
return mav;
}
}
大家就先照着上面这样写吧!先入门再说。不过,我还得说道说道,@RequestMapping注解是用于绑定用户的url请求地址的,例如hello.action,其中.action这个东西可以加也可以不加。在ModelAndView(模型和视图)对象中,将视图设置为了/WEB-INF/jsp/hello.jsp。
第五步,在工程下新建一个名为config的源码目录,并在该源码目录新建一个springmvc.xml的核心配置文件,其内容如下:
<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-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:component-scan base-package="com.meimeixia.springmvc.controller" />
beans>
可以清楚地看到,以上文件配置了扫描包(Controller类所在的包),那么SpringMVC就会扫描这个包下所有带@Controller注解的类,并创建好对象放到SpringMVC容器中。
第六步,配置前端控制器。即在web.xml文件中web.xml文件中添加如下配置:
<servlet>
<servlet-name>springmvcservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springmvc.xmlparam-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>springmvcservlet-name>
<url-pattern>*.actionurl-pattern>
servlet-mapping>
第七步,入门程序测试。发布咱们的项目到Tomcat服务器上,然后启动Tomcat服务器,在Google Chrome浏览器地址栏中输入url地址,例如http://localhost:8080/01-springmvc/hello.action,就能看到如下图所示的效果了。

这儿再来看第二个案例,即使用SpringMVC这个框架实现商品列表的展示。先分析一下这个需求,这里我假设请求的url为/itemList.action,由于我想要展示商品列表,所以是并不需要传递参数的,其次该案例仅仅是一个SpringMVC的入门小程序,并不会与MyBatis进行整合,所以也就不会从数据库表里面查询商品列表信息了,查询出来的商品列表数据仅仅只是一些静态数据罢了。在第一个案例中,我已经讲了一下SpringMVC入门程序的开发步骤,这里,我再重新讲一遍。
第一步,创建一个Dynamic Web Project项目,例如02-springmvc。

第二步,导入SpringMVC独立运行的jar包,一共有9个jar包,如下图所示。

第三步,在WebContent/WEB-INF目录新建一个普通的jsp目录,并在该目录下新建一个itemList.jsp页面。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询商品列表title>
head>
<body>
<form action="${pageContext.request.contextPath }/queryItem.action" method="post">
查询条件:
<table width="100%" border=1>
<tr>
<td><input type="submit" value="查询"/>td>
tr>
table>
商品列表:
<table width="100%" border=1>
<tr>
<td>商品名称td>
<td>商品价格td>
<td>生产日期td>
<td>商品描述td>
<td>操作td>
tr>
<c:forEach items="${itemList }" var="item">
<tr>
<td>${item.name }td>
<td>${item.price }td>
<td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>td>
<td>${item.detail }td>
<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改a>td>
tr>
c:forEach>
table>
form>
body>
html>
第四步,在src目录下新建一个com.meimeixia.springmvc.pojo包,并在该包下创建一个Item类,用于描述商品信息。
package com.meimeixia.springmvc.pojo;
import java.util.Date;
/**
* 商品数据模型
* @author liayun
*
*/
public class Item {
// 商品id
private int id;
// 商品名称
private String name;
// 商品价格
private double price;
// 商品创建时间
private Date createtime;
// 商品描述
private String detail;
public Item() {
super();
// TODO Auto-generated constructor stub
}
public Item(int id, String name, double price, Date createtime, String detail) {
super();
this.id = id;
this.name = name;
this.price = price;
this.createtime = createtime;
this.detail = detail;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
}
第五步,在src目录下新建一个com.meimeixia.springmvc.controller包,并在该包下创建一个Controller,例如ItemController,它就是一个普通的Java类,有点类似于Struts2中的Action,且不需要实现任何接口,只需要在类上添加@Controller注解即可。
package com.meimeixia.springmvc.controller;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.meimeixia.springmvc.pojo.Item;
@Controller
public class ItemController {
@RequestMapping("itemList")
public ModelAndView itemList() {
ModelAndView mav = new ModelAndView();
//模拟查询商品列表
List<Item> list = Arrays.asList(new Item(1, "冰箱", 1999, new Date(), "冰箱质量好"), new Item(2, "冰箱2", 1999, new Date(), "冰箱质量好2"),
new Item(3, "冰箱3", 1999, new Date(), "冰箱质量好3"), new Item(4, "冰箱4", 1999, new Date(), "冰箱很热"));
mav.addObject("itemList", list);
mav.setViewName("/WEB-INF/jsp/itemList.jsp");
return mav;
}
}
以上ItemController类中的@RequestMapping注解是用于绑定用户的url请求地址的,例如itemList.action,其中.action这个东西可以加也可以不加。在ModelAndView(模型和视图)对象中,将视图设置为了/WEB-INF/jsp/hello.jsp。
第六步,在工程下新建一个名为config的源码目录,并在该源码目录新建一个springmvc.xml的核心配置文件,其内容如下:
<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-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:component-scan base-package="com.meimeixia.springmvc.controller" />
beans>
第七步,配置前端控制器。即在web.xml文件中web.xml文件中添加如下配置:
<servlet>
<servlet-name>springmvcservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springmvc.xmlparam-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>springmvcservlet-name>
<url-pattern>*.actionurl-pattern>
servlet-mapping>
第八步,发布咱们的项目到Tomcat服务器上,然后启动Tomcat服务器,在Google Chrome浏览器地址栏中输入url地址,例如http://localhost:8080/02-springmvc/itemList.action,就能看到如下图所示的效果了。
