1.什么是SpringMVC
基于MVC开发模式的框架,用来优化控制器.它是Spring家族的一员.它也具备IOC和AOP.
什么是MVC?
一种开发模式,模型视图控制器的简称.所有的web应用都是基于MVC开发.
M:模型层,包含实体类,业务逻辑层,数据访问层
V:视图层,html,javaScript,vue等都是视图层,用来显现数据
C:控制器,用来接收客户端的请求,并返回响应到客户端的组件,Servlet就是组件
2.SSM框架优化的方向
MyBatis是对数据访问层的优化
SpringMVC是对控制器的优化
Spring框架是管理其他框架的框架
3.SpringMVC框架的优点
- 轻量级,基于MVC的框架
- 易于上手,容易理解,功能强大
- 具备IOC和AOP
- 完全基于注解开发
4.SpringMVC对控制器的优化
5.SpringMVC执行的流程
分析web请求
web请求执行的流程
核心处理器
index.jsp<--------------->DispatcherServlet<------------------->SpringMVC的处理器是一个普通的方法
one.jsp <--------------->DispatcherServlet<------------------->SpringMVC的处理器是一个普通的方法
DispatcherServlet要在web.xml文件中注册才可用
执行流程说明:
- 向服务器发送HTTP请求,请求被前端控制器 DispatcherServlet 捕获。
- DispatcherServlet 根据<servlet-name>中的配置对请求的URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用 HandlerMapping 获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以 HandlerExecutionChain 对象的形式返回。
- DispatcherServlet 根据获得的Handler,选择一个合适的 HandlerAdapter。
- 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
HttpMessageConveter:将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息。
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等。
数据格式化:对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等。
数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中。 - Handler(Controller)执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象。
- 根据返回的ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet。
- ViewResolver 结合Model和View,来渲染视图。
- 视图负责将渲染结果返回给客户端
6.基于注解的SpringMVC框架开发的步骤
- 新建项目,选择webapp模板.
- 修改pom.xml文件,添加SpringMVC的依赖,添加Servlet的依赖
<?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>org.example</groupId>
<artifactId>springmvc-001-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--springmvc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>6.0.2</version>
</dependency>
<!--servlet依赖-->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>
- 添加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: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/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--添加包扫描-->
<context:component-scan base-package="com.powernode.controller"/>
<!--添加视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置前缀-->
<property name="prefix" value="/admin/"/>
<!--配置后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
- 在web.xml文件中注册springMVC框架(所有的web请求都是基于servlet的)
<?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">
<!--注册SpringMVC的框架-->
<servlet>
<servlet-name>springmvc</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>springmvc</servlet-name>
<!--指定拦截什么样的请求-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
- 在webapp目录下新建admin目录,在admin目录下新建main.jsp页面
在index.jsp页面发送请求给服务器
<a href="${pageContext.request.contextPath}/demo.action">访问服务器</a>
- 开发控制器(Servlet),它是一个普通的类.
package com.powernode.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
// 交给spring去创建对象
@Controller
public class DemoAction {
/**
* action中所有的功能实现都是由方法来完成的
* action方法的规范
* 1.访问权限是public
* 2.返回值类型任意
* 3.方法名称任意
* 4.方法参数任意
* 5.要使用@RequestMapping注解来声明访问的路径(名称)
*/
@RequestMapping("/demo.action")
public String demo(){
System.out.println("服务器被访问");
// 可以直接跳到/admin/main.jsp页面
return "main";
}
}
- 添加tomcat10进行测试功能