1.SpringMVC
Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet,负责表述层(控制层)实现简化。 由于 Spring MVC 本身就是 Spring 框架的一部分,和 Spring 框架是无缝集成。 |
2.SSM框架主要作用
![]() |
3.SpringMVC 原理架构图
![]() |
4.SpringMVC 5大组件
整个流程处理的核心,接收所有请求,协同其它组件。
存储url-->Controller映射关系.根据请求路径,找到处理请求的Controller 3. HandlerAdapter 处理器适配器 [经理] 需要加入到IoC容器 简化处理请求参数和处理响应数据数据,调用控制器Controller 4. Controller 控制器 [打工人] 需要加入到IoC容器 程序员自己定义,处理业务请求,调用service层,最终返回响应结果. 5. ViewResolver 视图解析器 [财务] 简化模版视图页面查找,将ModelView对象中view逻辑视图生成真实的物理视图 如:index---->/index.jsp |
5.SpringMVC构建web项目步骤,注解+配置类的方式实现 (推荐)
1.maven创建web项目
![]() |
2.导入相关jar包坐标,以及引入tomcat插件
<dependencies><!--spring-mvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.0.6</version></dependency><!-- web相关依赖 servlet --><dependency><groupId>jakarta.platform</groupId><artifactId>jakarta.jakartaee-web-api</artifactId><version>9.1.0</version><scope>provided</scope></dependency><!--jsp需要依赖! jstl--><dependency><groupId>jakarta.servlet.jsp.jstl</groupId><artifactId>jakarta.servlet.jsp.jstl-api</artifactId><version>3.0.0</version></dependency><!-- jstl核心坐标--><dependency><groupId>org.glassfish.web</groupId><artifactId>jakarta.servlet.jsp.jstl</artifactId><version>2.0.0</version></dependency> <!--jackson--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.0</version></dependency><!--logback: 会自动传递slf4j门面--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency> <!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version></dependency> </dependencies> <plugins><plugin><!--web打包插件--><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin></plugins> |
注意:引入logback.xml日志文件
3.创建web容器的初始化配置类, 替代web.xml
/*** 创建SpringIOC容器初始化类,作用替代web.xml配置文件 * SpringMVC程序的初始化入口,可以被web项目加载, * 加载Spring/SpringMVC配置类创建IOC容器,设置dispatcherServlet的访问地址 */public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {/*** 指定root容器对应的配置类:service / mapper层的配置类*/@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[0];}/***指定web容器对应的配置类:指定springmvc的配置类*/@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}/***设置dispatcherServlet的处理路径!一般情况下为 / 代表处理除jsp以外的所有请求!*/@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}} |
4.创建springmvc配置类
/** * SpringMVC的配置类* 实现Springmvc组件声明标准化接口WebMvcConfigurer 提供了各种组件对应的方法* 添加配置类注解@Configuration* 添加controller层扫描注解 * @EnableWebMvc:启用Spring MVC配置,它提供了处理HTTP请求、管理控制器、处理视图以及管理其他与Web相关组件的功能 * 导入handlerMapping和handlerAdapter的三种方式* 1.使用@Bean方式配置handlerMapper和handlerAdapter* 2.可以不添加,springmvc会检查是否配置handlerMapping和handlerAdapter,没有配置默认加载* 3.自动导入handlerMapping和handlerAdapter [推荐] */@EnableWebMvc @Configuration@ComponentScan("com.bdqn.controller")public class SpringMvcConfig implements WebMvcConfigurer {/*** 配置处理器映射器*/@Beanpublic HandlerMapping handlerMapping(){return new RequestMappingHandlerMapping();}/*** 配置处理器适配器*/@Beanpublic HandlerAdapter handlerAdapter(){return new RequestMappingHandlerAdapter();}/*** 配置视图解析器,配置前缀+后缀*/@Overridepublic void configureViewResolvers(ViewResolverRegistry registry) {registry.jsp("/",".jsp");}} |
5. 采用注解实现控制器处理请求
处理请求,只需要在Controller类中编写处理请求的方法
/*** 控制器的类*/@Controllerpublic class GoodsController {/*** 获取所有商品信息的控制方法* RequestMapping:指定控制器方法的映射路径,注册到HandlerMapping */@RequestMapping("/getGoods")public ModelAndView getGoods() {ModelAndView mv=new ModelAndView();List<String> list=new ArrayList<>();list.add("奥迪");list.add("迪奥");list.add("奥利奥");//往数据视图模型中添加数据mv.addObject("list", list);//往数据视图模型中指定跳转地址mv.setViewName("index");return mv;}} |
6. index.jsp页面展示商品信息
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html><body><c:forEach items="${list}" var="name"> <h2>${name}</h2></c:forEach> </body></html> |
注意:el表达式无法正常显示,需要修改web.xml配置文件的版本为4.0
<?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"></web-app> |
5.执行流程的底层实现
每当Web项目启动时,会自动调用WebApplicationInitializer接口的onStartup()方法。 在接口的AbstractDispatcherServletInitializer实现类的onStartup()方法中调用this.registerDispatcherServlet(servletContext)方法 在该方法中WebApplicationContext servletAppContext = this.createServletApplicationContext(); 调用createServletApplicationContext()方法,创建SpringIOC Web容器。 在该方法中AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();创建SpringIOC Web容器。Class<?>[] configClasses = this.getServletConfigClasses();加载SpringMVC的配置类。 同时在接口的AbstractDispatcherServletInitializer实现类的onStartup()方法中调用this.registerDispatcherServlet(servletContext)方法 在该方法中FrameworkServlet dispatcherServlet = this.createDispatcherServlet(servletAppContext);创建DispatcherServlet对象。 registration.setLoadOnStartup(1); 设置DispatcherServlet自启动。 registration.addMapping(this.getServletMappings());设置DispatcherServlet访问地址。 |
6. SpringMVC相关注解
注解 | 描述 |
@Controller | 创建控制器类的对象 |
@RequestMapping("url") | 指定处理请求的控制器的请求路径 |
@GetMapping("url") | 指定处理get请求的控制器的请求路径 |
@PostMapping("url") | 指定处理Post请求的控制器的请求路径 |
@EnableWebMvc | 启用Spring MVC配置,它提供了处理HTTP请求、管理控制器、处理视图以及管理其他与Web相关组件的功能 |
7.导入handlerMapping和handlerAdapter的三种方式
1.使用@Bean方式配置handlerMapper和handlerAdapter |