springMVC 的执行流程

- 具体流程
(1)当用户通过浏览器发起一个HTTP请求,请求直接到前端控制器DispatcherServlet;
(2)前端控制器接收到请求以后调用处理器映射器HandlerMapping,处理器映射器根据请求的URL找到具体的Handler,并将它返回给前端控制器;
(3)前端控制器调用处理器适配器HandlerAdapter去适配调用Handler;
(4)处理器适配器会根据Handler去调用真正的处理器去处理请求,并且处理对应的业务逻辑;
(5)当处理器处理完业务之后,会返回一个ModelAndView对象给处理器适配器,HandlerAdapter再将该对象返回给前端控制器;这里的Model是返回的数据对象,View是逻辑上的View。
(6)前端控制器DispatcherServlet将返回的ModelAndView对象传给视图解析器ViewResolver进行解析,解析完成之后就会返回一个具体的视图View给前端控制器。(ViewResolver根据逻辑的View查找具体的View)
(7)前端控制器DispatcherServlet将具体的视图进行渲染,渲染完成之后响应给用户(浏览器显示)。
SpringMVC使用的配置
1. 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>org.example</groupId> |
| <artifactId>SpringMVC</artifactId> |
| <version>1.0-SNAPSHOT</version> |
| <packaging>pom</packaging> |
| <modules> |
| <module>springmvc-hello</module> |
| <module>springmvc-01-annotation</module> |
| </modules> |
| |
| <properties> |
| <maven.compiler.source>17</maven.compiler.source> |
| <maven.compiler.target>17</maven.compiler.target> |
| <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| </properties> |
| |
| <dependencies> |
| <dependency> |
| <groupId>junit</groupId> |
| <artifactId>junit</artifactId> |
| <version>3.8.1</version> |
| <scope>test</scope> |
| </dependency> |
| |
| <dependency> |
| <groupId>com.mysql</groupId> |
| <artifactId>mysql-connector-j</artifactId> |
| <version>8.0.33</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.mybatis</groupId> |
| <artifactId>mybatis</artifactId> |
| <version>3.5.13</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.springframework</groupId> |
| <artifactId>spring-webmvc</artifactId> |
| <version>6.0.11</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.springframework</groupId> |
| <artifactId>spring-jdbc</artifactId> |
| <version>6.0.11</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.aspectj</groupId> |
| <artifactId>aspectjweaver</artifactId> |
| <version>1.9.19</version> |
| <scope>runtime</scope> |
| </dependency> |
| |
| |
| <dependency> |
| <groupId>org.mybatis</groupId> |
| <artifactId>mybatis-spring</artifactId> |
| <version>3.0.2</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.projectlombok</groupId> |
| <artifactId>lombok</artifactId> |
| <version>1.18.28</version> |
| <scope>provided</scope> |
| </dependency> |
| |
| |
| |
| |
| <dependency> |
| <groupId>jakarta.servlet</groupId> |
| <artifactId>jakarta.servlet-api</artifactId> |
| <version>6.0.0</version> |
| <scope>provided</scope> |
| </dependency> |
| |
| |
| <dependency> |
| <groupId>jakarta.servlet.jsp</groupId> |
| <artifactId>jakarta.servlet.jsp-api</artifactId> |
| <version>3.1.1</version> |
| <scope>provided</scope> |
| </dependency> |
| |
| |
| <dependency> |
| <groupId>jakarta.servlet.jsp.jstl</groupId> |
| <artifactId>jakarta.servlet.jsp.jstl-api</artifactId> |
| <version>3.0.0</version> |
| </dependency> |
| |
| |
| <dependency> |
| <groupId>org.apache.taglibs</groupId> |
| <artifactId>taglibs-standard-spec</artifactId> |
| <version>1.2.5</version> |
| </dependency> |
| |
| |
| <dependency> |
| <groupId>org.apache.taglibs</groupId> |
| <artifactId>taglibs-standard-impl</artifactId> |
| <version>1.2.5</version> |
| <scope>runtime</scope> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.glassfish.web</groupId> |
| <artifactId>jakarta.servlet.jsp.jstl</artifactId> |
| <version>2.0.0</version> |
| </dependency> |
| |
| |
| <dependency> |
| <groupId>mysql</groupId> |
| <artifactId>mysql-connector-java</artifactId> |
| <version>5.1.48</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>junit</groupId> |
| <artifactId>junit</artifactId> |
| <version>4.13.2</version> |
| <scope>compile</scope> |
| </dependency> |
| |
| |
| <dependency> |
| <groupId>com.alibaba.fastjson2</groupId> |
| <artifactId>fastjson2</artifactId> |
| <version>2.0.38</version> |
| </dependency> |
| </dependencies> |
| |
| <build> |
| <resources> |
| <resource> |
| <directory>src/main/java</directory> |
| <includes> |
| <include>**/*.properties</include> |
| <include>**/*.xml</include> |
| </includes> |
| <filtering>false</filtering> |
| </resource> |
| <resource> |
| <directory>src/main/resources</directory> |
| <includes> |
| <include>**/*.properties</include> |
| <include>**/*.xml</include> |
| </includes> |
| <filtering>false</filtering> |
| </resource> |
| </resources> |
| </build> |
| |
| </project> |
2. 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"> |
| |
| <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-servlet.xml</param-value> |
| </init-param> |
| |
| <load-on-startup>1</load-on-startup> |
| </servlet> |
| |
| <servlet-mapping> |
| <servlet-name>SpringMVC</servlet-name> |
| <url-pattern>/</url-pattern> |
| </servlet-mapping> |
| |
| |
| <filter> |
| <filter-name>encoding</filter-name> |
| <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> |
| <init-param> |
| <param-name>encoding</param-name> |
| <param-value>utf-8</param-value> |
| </init-param> |
| </filter> |
| <filter-mapping> |
| <filter-name>encoding</filter-name> |
| <url-pattern>/*</url-pattern> |
| </filter-mapping> |
| </web-app> |
3. springmvc.xml(spring的配置文件)
| <?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 |
| https://www.springframework.org/schema/context/spring-context.xsd |
| http://www.springframework.org/schema/mvc |
| https://www.springframework.org/schema/mvc/spring-mvc.xsd"> |
| |
| <context:component-scan base-package="com.mao.controller"/> |
| |
| <mvc:default-servlet-handler /> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <mvc:annotation-driven /> |
| |
| <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" |
| id="internalResourceViewResolver"> |
| |
| <property name="prefix" value="/WEB-INF/jsp/" /> |
| |
| <property name="suffix" value=".jsp" /> |
| </bean> |
| |
| </beans> |
4. 示例Controller.java
| import org.springframework.stereotype.Controller; |
| import org.springframework.ui.Model; |
| import org.springframework.web.bind.annotation.RequestMapping; |
| |
| @Controller |
| public class HelloController { |
| |
| @RequestMapping("hello") |
| public String hello(Model model){ |
| model.addAttribute("title","hello"); |
| model.addAttribute("msg","hello springMVC by annotation"); |
| |
| return "hello"; |
| } |
| } |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现