目录
2、接收请求(前端控制器:DispatcherServlet)。
4、业务处理与模型创建(Handle request、Create model)。
5、视图渲染(Delegate rendering of response、Render response)。
6、返回响应(Return control、Return response)。
(2)Tomcat(版本:9.0.68)运行环境、打包与部署。
Tomcat服务启动日志乱码问题。(conf->logging.properties)
一、SpringMVC框架核心流程。
(1)SpringMVC框架处理客户端请求流程。(简要)
1、接收请求
- 客户端发送请求,该请求首先被SpringMVC框架接收。
- SpringMVC中的DispatcherServlet作为前端控制器,会拦截所有进入的HTTP请求,它是整个请求处理流程的入口。
2、请求映射。
- SpringMVC框架根据请求的URL等信息,将请求映射到对应的Controller。
- Controller在SpringMVC中以JavaBean的形式存在 。框架通过配置(如:注解@RequestMapping等 )来确定哪个Controller处理该请求。
3、处理请求。
- 被映射到的Controller接收请求后,会进行具体的业务逻辑处理。如调用服务层方法、操作数据库等,然后返回处理结果(通常会携带视图信息和模型数据 )。后续再由框架进行视图渲染等操作,最终将响应返回给客户端。
(2)SpringMVC框架的核心工作流程。(详细)
1、请求到达(Incoming request)。
- 客户端发起请求。该请求首先抵达DispatcherServlet(前端控制器 )。
2、接收请求(前端控制器:DispatcherServlet)。
- 所有客户端请求首先到达 DispatcherServlet。它是SpringMVC的入口,类似于一个交通枢纽,负责接收和初步处理所有请求。
3、委托请求(Delegate request) 。
- DispatcherServlet根据请求的URL等信息,将请求委托给合适的Controller(如:图中的HelloController)。它通过查找配置信息(如注解或配置文件)来确定哪个Controller能处理该请求。
4、业务处理与模型创建(Handle request、Create model)。
- 被委托的Controller处理具体业务逻辑(如调用服务层方法、操作数据库等)。
- 在处理请求过程中,Controller会创建一个Model对象,用于封装处理业务逻辑过程中产生的数据,这些数据后续会传递到视图层展示给用户。
5、视图渲染(Delegate rendering of response、Render response)。
- 委托渲染响应:Controller处理完业务逻辑后,将Model和视图相关信息返回给 DispatcherServlet。提示可以进行响应的渲染工作了。
- 渲染响应 :DispatcherServlet根据返回的视图信息,找到对应的视图模板(View template。如图中提到的JSP)。然后将Model中的数据填充到视图模板中进行渲染,生成最终要返回给客户端的HTML或其他格式内容。
6、返回响应(Return control、Return response)。
- 渲染完成后,控制权返回给DispatcherServlet。(Return control)
- 最后DispatcherServlet将响应结果返回给客户端。(Return response)
7、运行环境。
- 整个流程是在Servlet引擎(如:Tomcat )提供的环境中运行的 。
二、SpringMVC快速入门项目小结。
(1)pom文件Maven依赖项。
spring-webmvc。
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.18</version> </dependency>
javax.servlet-api。(非必需)
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
(2)Tomcat(版本:9.0.68)运行环境、打包与部署。
tomcat本地部署打包与打包。
控制台乱码问题。(VM options)
-Dfile.encoding=utf-8
Tomcat服务启动日志乱码问题。(conf->logging.properties)
(3)Web容器初始化配置类。
package com.hyl.config; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class InitServletContainerConfig extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[]{SpringConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { return new Class[]{SpringMvcConfig.class}; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } }
(4)SpringMVC配置类。
package com.hyl.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @Configuration @ComponentScan("com.hyl.controller") @EnableWebMvc //开启json接收 public class SpringMvcConfig { }
(5)Spring配置类。
注解扫描。排除controller层注解扫描。
package com.hyl.config; import org.springframework.context.annotation.*; import org.springframework.web.bind.annotation.RestController; @Configuration @ComponentScan( value = "com.hyl", excludeFilters = @ComponentScan.Filter( type = FilterType.ANNOTATION, classes = {RestController.class} ) ) @PropertySource("classpath:jdbc.properties") @Import({JdbcConfig.class, MyBatisConfig.class}) public class SpringConfig { }