前面介绍了SpringMVC的框架原理,这一次主要来实现一个入门程序,借此来熟悉SpringMVC的流程。
需求
查询所有的商品信息,并在JSP页面进行显示
环境
实例项目采用MAVEN来架构。
IDE:IDEA 13
JDK:1.7.0_79
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.11</junit.version>
<slf4j.version>1.7.12</slf4j.version>
<logback.version>1.0.13</logback.version>
<servlet.version>2.5</servlet.version>
<jstl.version>1.2</jstl.version>
<springmvc.version>4.2.2.RELEASE</springmvc.version>
<mongo.version>2.12.3</mongo.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springmvc.version}</version>
</dependency>
</dependencies>
需求实现
用MAVEN来新建个基于WEB的项目,加入环境中所需要的类库。
配置SpringMVC
SpringMVC的DispatcherServlet是SpringMVC的前端控制器,所有请求,先通过DispatcherServlet进行拦截,之后才能发送到后续进行处理。在web.xml中配置请求路径由DispatcherServlet进行处理。如下:
<servlet>
<servlet-name>SpringMVCDemo</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVCDemo</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
应用程序启动时,DispatcherServlet会找到配置文件,默认是在WEB-INF文件夹下寻找-servlet.xml文件(此处即为SpringMVCDemo-servlet.xml)。在实际环境中,由于配置文件并不会只有一个,一般都是将配置文件置于resources目录下,此时可以配置路径让DispatcherServlet找到配置文件。配置如下:
<servlet>
<servlet-name>SpringMVCDemo</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVCDemo</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
配置文件springmvcdemo.xml
在resources目录下,新建配置文件springmvc.xml。参照框架原理中的要求(DispatcherServlet->HandlerMapping->HandlerAdaptor->Handler->ViewResolver),其中,DispatcherServlet在web.xml中已配置。
当controller是以标注实现时:
<!--注解映射的支持-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--自动扫描-->
<context:component-scan base-package="indi.latch.demo"></context:component-scan>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/item/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
商品信息POJO
public class ItemsPojo {
private int id;
private String name;
private float price;
private Date createTime;
private String detail;
//setter and getter
}
新建controller
在此,只是介绍SpringMVC,没有与数据库等框架集成,所以商品信息就自己创建。
@Controller:表明此类为一个处理器
@RequestMapping:表明通过uri为/queryItemsAnnotation可以访问queryItemsAnnotation方法
@Controller
public class ItemsControllerV3 {
@RequestMapping("/queryItemsAnnotation")
public ModelAndView queryItemsAnnotation () {
List<ItemsPojo> itemList = new ArrayList<ItemsPojo>();
ItemsPojo item1 = new ItemsPojo();
item1.setId(1);
item1.setName("小米手机3 V3");
item1.setPrice(1499);
item1.setCreateTime(new Date());
item1.setDetail("小米手机3 V3 联通版");
itemList.add(item1);
ItemsPojo item2 = new ItemsPojo();
item2.setId(2);
item2.setName("小米手机5 V3");
item2.setPrice(1499);
item2.setCreateTime(new Date());
item2.setDetail("小米手机5 V3 全网通版");
itemList.add(item2);
//返回商品信息以及逻辑视图名
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("itemList", itemList);
modelAndView.setViewName("itemList");
return modelAndView;
}
}
JSP页面
根据springmvc.xml文件中视图解析器配置的路径下新建名为itemList的JSP文件
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>商品列表</title>
</head>
<body>
<table>
<tr>
<td>序号</td>
<td>商品名称</td>
<td>商品价格</td>
<td>商品创建时间</td>
<td>商品详情</td>
</tr>
<c:forEach items="${itemList}" var="item">
<tr>
<td>${item.id}</td>
<td>${item.name}</td>
<td>${item.price}</td>
<td><fmt:formatDate value="${item.createTime}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate></td>
<td>${item.detail}</td>
</tr>
</c:forEach>
</table>
</body>
</html>