欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > SpringMVC

SpringMVC

2025/7/29 23:24:51 来源:https://blog.csdn.net/2301_80220193/article/details/143057837  浏览:    关键词:SpringMVC
1.SpringMVC

Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet,负责表述层(控制层)实现简化。

由于 Spring MVC 本身就是 Spring 框架的一部分,和 Spring 框架是无缝集成。

2.SSM框架主要作用

3.SpringMVC 原理架构图
4.SpringMVC 5大组件
  1. DispatcherServlet 前端控制器  [ CEO ]  web.xml/配置类配置生效

整个流程处理的核心,接收所有请求,协同其它组件

  1. HandlerMapping  处理器映射器  [秘书]  需要加入到IoC容器

存储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相关组件的功能

* 导入handlerMappinghandlerAdapter的三种方式* 1.使用@Bean方式配置handlerMapperhandlerAdapter* 2.可以不添加,springmvc会检查是否配置handlerMappinghandlerAdapter,没有配置默认加载* 3.自动导入handlerMappinghandlerAdapter [推荐] */@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
 2.可以不添加,springmvc会检查是否配置handlerMapping和handlerAdapter,没有配置默认加载
 3.自动导入handlerMapping和handlerAdapter [推荐]

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词