介绍
SpringMVC 简介
- 和众多其他 Web 框架一样,它基于 MVC 设计理念,此外,它采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。
- Spring MVC 在数据绑定、视图解析、本地化处理及静态资源处理上都有许多不俗的表现
- Spring MVC 框架围绕
DispatcherServlet
这个核心展开,DispatcherServlet
是 Spring MVC 的总导演、总策划,它负责截获请求并将其分派给相应的处理器处理。
SpringMVC 和 Struts2 对比
SpringMVC 与 Struts2 的区别 | |||
---|---|---|---|
对比项目 | SpringMVC | Struts2 | 优势 |
国内市场情况 | 有大量用户,一般新项目启动都会选用 SpringMVC。 | 有部分老用户,老项目组,由于习惯了,一直在使用。 | 国内情况,SpringMVC 的使用率已经超过了 Struts2。 |
框架入口 | 基于 Servlet。 | 基于 Filter。 | 本质上没有太大优势,只是配置方式不同。 |
框架设计思想 | 控制器基于方法级别的拦截,处理器设计为单实例。 | 控制器基于类级别的拦截,处理器设计为多实例。 | 由于设计本身原因,造成了 Struts2 通常只能设计为多实例模式,相比于 SpringMVC 设计为单实例模式,Struts2 会消耗更多内存。 |
参数传递 | 参数通过方法入参传递。 | 参数通过类的成员变量传递。 | Struts2 通过成员变量传递参数,导致了参数的线程不安全,有可能引发并发问题。 |
与 Spring 整合 | 与 Spring 属于同一家公司开发,可与 Spring 无缝整合。 | 需要整合包。 | SpringMVC 可以与 Spring 更轻松的整合。 |
入门程序
1、使用 Maven 创建 Web 工程,依赖如下:
<!-- pom.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zze.springmvc</groupId>
<artifactId>springmvc_test1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--使用 tomcat7:run-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
2、创建 SpringMVC 核心配置文件:
<!-- springmvc.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置控制器扫描-->
<context:component-scan base-package="com.zze.springmvc.web.controller"/>
<mvc:annotation-driven/>
</beans>
3、配置 SpringMVC 核心监听 Servlet 并加载核心配置文件:
<!-- WEB-INF/web.xml -->
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加载 SpringMVC 核心配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--注意:这里使用 / ,如果使用 /* 会出现找不到视图的问题-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
4、创建测试用的 POJO:
// com.zze.springmvc.pojo.User
import java.util.Date;
public class User {
private Integer id;
private String name;
private Date birthday;
private String address;
public User(Integer id, String name, Date birthday, String address) {
this.id = id;
this.name = name;
this.birthday = birthday;
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
5、创建视图:
<!-- WEB-INF/jsp/userlist.jsp -->
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html>
<head>
<title>list</title>
</head>
<body>
<table border="1">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Birthday</th>
<th>Address</th>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td><fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd"/></td>
<td>${user.address}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
6、创建控制器:
// com.zze.springmvc.web.controller.TestController
import com.zze.springmvc.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
@Controller
public class TestController {
@RequestMapping("list")
public ModelAndView list() throws ParseException {
List<User> userList = new ArrayList<>();
userList.add(new User(1, "张三", new SimpleDateFormat("yyyy-MM-dd").parse("1997-1-12"), "湖南"));
userList.add(new User(2, "李四", new SimpleDateFormat("yyyy-MM-dd").parse("1995-5-23"), "湖北"));
userList.add(new User(3, "王五", new SimpleDateFormat("yyyy-MM-dd").parse("1993-2-23"), "常德"));
userList.add(new User(4, "赵六", new SimpleDateFormat("yyyy-MM-dd").parse("1998-5-6"), "北京"));
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("list", userList);
modelAndView.setViewName("/WEB-INF/jsp/userlist.jsp");
return modelAndView;
}
}
7、测试,浏览器输出如下:
8、至此,入门程序搭建完成。
评论区