0
点赞
收藏
分享

微信扫一扫

Asp.net Core MVC 动态路由

目标践行者 2024-11-02 阅读 20

一.SpringMVC

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

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

二.SSM框架主要作用

三.SpringMVC 原理架构图

四.SpringMVC 5大组件

    1.DispatcherServlet 前端控制器  [ CEO ]  web.xml/配置类配置生效

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

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

存储url-->Controller映射关系.根据请求路径,找到处理请求的Controller

    3. HandlerAdapter 处理器适配器   [经理]  需要加入到IoC容器

        简化处理请求参数和处理响应数据数据,调用控制器Controller

    4. Controller  控制器  [打工人]   需要加入到IoC容器

        程序员自己定义,处理业务请求,调用service层,最终返回响应结果.

    5. ViewResolver 视图解析器   [财务]

        简化模版视图页面查找,将ModelView对象中view逻辑视图生成真实的物理视图

如:index---->/index.jsp

五.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层的配置类
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }
    /**
     *指定web容器对应的配置类:指定springmvc的配置类
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }
    /**
     *设置dispatcherServlet的处理路径!一般情况下为 / 代表处理除jsp以外的所有请求!
     */
    @Override
    protected 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 {
    /**
     * 配置处理器映射器
     */
    @Bean
    public HandlerMapping  handlerMapping(){
        return new RequestMappingHandlerMapping();
    }
    /**
     * 配置处理器适配器
     */
    @Bean
    public HandlerAdapter handlerAdapter(){
        return new RequestMappingHandlerAdapter();
    }
    /**
     * 配置视图解析器配置前缀+后缀
     */
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/",".jsp");
    }
}

   

   5. 采用注解实现控制器处理请求

          处理请求,只需要在Controller类中编写处理请求的方法

/**
 * 控制器的类
 */
@Controller
public 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>

六.执行流程的底层实现

每当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访问地址。

 七.SpringMVC相关注解

注解

描述

@Controller

创建控制器类的对象

@RequestMapping("url")

指定处理请求的控制器的请求路径

@GetMapping("url")

指定处理get请求的控制器的请求路径

@PostMapping("url")

指定处理Post请求的控制器的请求路径

@EnableWebMvc

启用Spring MVC配置,它提供了处理HTTP请求、管理控制器、处理视图以及管理其他与Web相关组件的功能

  

八.导入handlerMappinghandlerAdapter的三种方式

 1.使用@Bean方式配置handlerMapper和handlerAdapter
 2.可以不添加,springmvc会检查是否配置handlerMapping和handlerAdapter,没有配置默认加载
 3.自动导入handlerMapping和handlerAdapter [推荐]

举报

相关推荐

0 条评论