一、MVC思想与Spring MVC
MVC是一种软件架构模式
- M:Model,即数据模型,主要是封装和映射数据,对应的是Java Bean实体类
- V:View,即视图,显示数据的页面,html,jsp或者ftl文件
- C:Controller,即控制器,控制数据处理逻辑及页面跳转
MVC的流程大概是
Spring MVC
Spring为了展现层提供的基于MVC模式设计的Web框架,是主流的MVC框架之一,Spring MVC通过注解让Java Bean成为处理请求的控制器,无需实现任何接口,并且支持Rest风格的URL形式,采用松散耦合可插拔的组件结构,比其他MVC框架更具有扩展性和灵活性
重要组件:
- DispatcherServlet:负责接收请求和转发请求
- HandlerMapping:处理器映射器,根据请求查找执行类Handler,并返回Handler给到DispatcherServlet
- HandlerAdapter:处理器适配器,执行DispatcherServlet发来的Handler,并返回视图ModelAndView给DispatcherServlet。
- Handler:执行Handler方法,返回ModelAndView给HandlerAdapter,HandlerAdapter在返回给DispatcherServlet
- ViewResolver:视图解析器,解析DispatcherServlet发来的ModelAndView,返回视图
- View:视图,渲染DispatcherServlet发来的视图,并返回给DispatcherServlet,并由DispatcherServlet返回给客户端展示
二、Spring MVC QuickStart
创建Spring MVC项目
首先创建一个maven项目spring-web-mvc,添加项目依赖
<properties> <spring-version>5.3.13</spring-version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring-version}</version> </dependency> </dependencies> 复制代码
添加 Framework Support,添加Web框架支持,勾选创建web.xml
打开Project Structure,选择Artifacts,首先在WEB-INF下创建一个lib文件夹,然后将右侧的jar包导入进lib文件夹中
配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!--DispatchServlet--> <servlet> <servlet-name>springmvc</servlet-name> <!-- DispatcherServlet是Spring MVC最核心的对象 DispatcherServlet用于拦截Http请求, 并根据请求的URL调用与之对应的Controller方法,来完成Http请求的处理 --> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--applicationContext.xml--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <!-- 在Web应用启动时自动创建Spring IOC容器, 并初始化DispatcherServlet --> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!--"/" 代表拦截所有请求,/*拦截所有请求包括jsp页面这些请求--> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> 复制代码
在resources目录下新建applicationContext.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:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"> <context:component-scan base-package="com.citi"> </context:component-scan> <!--配置试图解析器,自动拼接页面地址,自动在jsp页面前增加/WEB-INF/pages/--> <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans> 复制代码
配置Tomcat
新建controller包,创建HelloController控制类
@Controller public class HelloController { // 处理转发请求 @RequestMapping("/hello") public String hello(){ System.out.println("处理中...."); // 返回页面 //return "/WEB-INF/pages/success.jsp"; // 添加视图解析器后,自动拼接页面地址 return "success"; } } 复制代码
@RequestMapping:告诉Spring MVC这方法处理什么请求,其中"/"可以省略,习惯加上会比较好
在WEB-INF文件夹下新建pages文件夹,用来存放jsp文件,新建success.jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Success</title> </head> <body> success </body> </html>