Spring教程-Spring MVC 教程
Spring MVC 教程
Spring MVC是一个用于构建Web应用程序的Java框架,遵循模型-视图-控制器设计模式。它实现了核心Spring框架的所有基本功能,如控制反转(IoC)和依赖注入(DI)。
Spring MVC通过DispatcherServlet提供了在Spring框架中使用MVC的优雅解决方案。在这里,DispatcherServlet是一个接收传入请求并将其映射到正确资源(如控制器、模型和视图)的类。
Spring Web 模型-视图-控制器
- 模型(Model) - 模型包含应用程序的数据。数据可以是单个对象或对象的集合。
- 控制器(Controller) - 控制器包含应用程序的业务逻辑。在这里,使用@Controller注解将类标记为控制器。
- 视图(View) - 视图以特定格式表示提供的信息。通常,使用JSP+JSTL创建视图页面。尽管Spring还支持其他视图技术,如Apache Velocity、Thymeleaf和FreeMarker。
- 前端控制器(Front Controller) - 在Spring Web MVC中,DispatcherServlet类作为前端控制器工作。它负责管理Spring MVC应用程序的流程。
理解 Spring Web MVC 流程
- 如图所示,所有传入的请求都被前端控制器DispatcherServlet拦截。
- DispatcherServlet从XML文件获取处理程序映射的条目,并将请求转发给控制器。
- 控制器返回ModelAndView对象。
- DispatcherServlet在XML文件中检查视图解析器的条目,并调用指定的视图组件。
Spring MVC 框架的优势
让我们看一些Spring MVC框架的优势:
- 角色分离 - Spring MVC将每个角色分开,模型对象、控制器、命令对象、视图解析器、DispatcherServlet、验证器等可以由专门的对象完成。
- 轻量级 - 它使用轻量级的Servlet容器来开发和部署应用程序。
- 强大的配置 - 它为框架和应用程序类提供了强大的配置,包括在上下文之间进行轻松引用,例如从Web控制器到业务对象和验证器。
- 快速开发 - Spring MVC有助于快速且并行开发。
- 可重用的业务代码 - 它允许我们使用现有的业务对象,而不是创建新对象。
- 易于测试 - 在Spring中,通常我们创建JavaBeans类,通过setter方法可以注入测试数据。
- 灵活的映射 - 它提供特定的注解,可以轻松地重定向页面。
Spring Web MVC 框架示例
让我们看一个Spring Web MVC框架的简单示例。步骤如下:
- 加载Spring jar文件,或在Maven中添加依赖项
- 创建控制器类
- 在web.xml文件中提供控制器的入口
- 在单独的XML文件中定义bean
- 在JSP页面中显示消息
- 启动服务器并部署项目
Spring MVC 的目录结构
使用 Maven 的 Spring MVC 目录结构
所需的 Jar 文件或 Maven 依赖项
要运行此示例,您需要加载以下内容:
- Spring Core jar 文件
- Spring Web jar 文件
- JSP + JSTL jar 文件(如果您使用其他视图技术,请加载相应的 jar 文件)。
下载链接: 下载包括 JSP 和 JSTL 的所有 Spring jar 文件。
如果您使用Maven,您无需添加jar文件。现在,您需要将Maven依赖项添加到pom.xml文件中。
1. 在 pom.xml 文件中提供项目信息和配置。
pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.javatiku</groupId>
<artifactId>SpringMVC</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SpringMVC 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>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
</dependency>
</dependencies>
<build>
<finalName>SpringMVC</finalName>
</build>
</project>
2. 创建控制器类
为了创建控制器类,我们使用了两个注解:@Controller 和 @RequestMapping。
@Controller 注解标记了这个类作为控制器。
@RequestMapping 注解用于将该类映射到指定的URL名称。
HelloController.java
package cn.javatiku;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/")
public String display()
{
return "index";
}
}
3. 在 web.xml 文件中提供控制器的入口
在这个xml文件中,我们指定了DispatcherServlet类作为Spring Web MVC中的前端控制器。所有对html文件的传入请求都将转发到DispatcherServlet。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>SpringMVC</display-name>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
4. 在 xml 文件中定义 bean
这是一个重要的配置文件,在这里我们需要指定视图组件。
context:component-scan 元素定义了DispatcherServlet将在其中搜索控制器类的基本包。
这个xml文件应该位于WEB-INF目录中。
spring-servlet.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: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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- Provide support for component scanning -->
<context:component-scan base-package="cn.javatiku" />
<!--Provide support for conversion, formatting and validation -->
<mvc:annotation-driven/>
</beans>
5. 在 JSP 页面中显示消息
这是一个简单的JSP页面,显示控制器返回的消息。
index.jsp
<html>
<body>
<p>Welcome to Spring MVC Tutorial</p>
</body>
</html>
Output: