![]()
DispatcherServlet
SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它的处理和分发
HandlerMapping
SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效,它内部缓存handler(controller方法)和handler访问路径数据,被DispatcherServlet调用,用于查找路径对应的handler
HandlerAdapter
SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效,它可以处理请求参数和处理响应数据数据,每次DispatcherServlet都是通过handlerAdapter间接调用handler,他是handler和DispatcherServlet之间的适配器
Handler
handler又称处理器,他是Controller类内部的方法简称,是由我们自己定义,用来接收参数,向后调用业务,最终返回响应结果
ViewResovler
SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效!视图解析器主要作用简化模版视图页面查找的,但是需要注意,前后端分离项目,后端只返回JSON数据,不返回页面,那就不需要视图解析器!所以,视图解析器,相对其他的组件不是必须的
springMvc初体验
1.导入相关依赖
点击查看代码
<!-- springioc相关依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.6</version>
</dependency>
<!-- servlet 依赖 -->
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-web-api</artifactId>
<version>9.1.0</version>
<scope>provided</scope>
</dependency>
<!-- springwebmvc相关依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>6.0.6</version>
</dependency>
2.声明配置类
点击查看代码
@Configuration //声明配置类
@ComponentScan("com.wind.controller") //包扫描
public class MvcConfig {
@Bean //将 handlerMapping 加入ioc容器
public RequestMappingHandlerMapping handlerMapping() {
return new RequestMappingHandlerMapping();
}
@Bean //将 handlerAdapter 加入ioc容器
public RequestMappingHandlerAdapter handlerAdapter() {
return new RequestMappingHandlerAdapter();
}
}
3.初始化ioc容器
点击查看代码
public class SpringMvcInit extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[0];
}
@Override //设置项目对应的配置
protected Class<?>[] getServletConfigClasses() {
//加载配置类 创建ioc容器
return new Class[]{MvcConfig.class};
}
@Override //配置 springmvc内部自带servlet的访问地址
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
4.定义控制层所需要的方法
点击查看代码
@Controller //控制层注解
@RequestMapping("user") //注册地址
public class UserController {
/**
* @RequestMapping 放在类上和方法上的区别
* 类上是通用的访问地址
* 方法上是具体的handler地址 (方法上的地址是必须的)
* 访问 :类地址 + 方法地址即可
*/
@RequestMapping("login") //注册地址 把handler 注册到 handlerMapping上
@ResponseBody //代表返回数据给前端 不经过 视图解析器
public String login(){
return "login";
}
}