SpringMVC基础了解

Spring MVC的介绍

Spring MVC 是 Spring 框架中用于构建 Web 应用的MVC(Model-View-Controller)框架,核心作用是处理 HTTP 请求、实现前后端数据交互,是 Java Web 开发中最常用的框架之一。

首先引入Servlet:

Servlet 是 Java EE 定义的服务器端组件规范,是处理 HTTP 请求的最基础方式。你可以把它理解为:
  • 一个运行在服务器上的 Java 类,专门接收前端的 HTTP 请求(GET/POST 等);
  • 需要手动处理请求参数、响应数据、请求转发 / 重定向,甚至手动处理中文乱码;
  • 每个 Servlet 通常对应一个固定的 URL 路径,开发效率低,代码冗余度高。

Servlet 和 Spring MVC的关系:

Servlet 和 Spring MVC 是 Java Web 开发中两个核心的技术,其中 Spring MVC 是基于 Servlet 构建的高级框架,

Servlet 是基础、底层、开发繁琐,Spring MVC 是框架、上层、注解驱动、解耦且高效;

Spring MVC:主要解决的Servlet什么问题

1,解决接受前台传递参数时候的麻烦

2,解决servlet实例只能接受一个请求

介绍Spring MVC设计模式的介绍

M(model):模型层:数据模型:pojo

业务模型:service、mapper

V(view):视图层

jsp和html:负责和用户交互

C(controller):控制层

servlet和controller,负责接受请求

mvc的调用关系:

view--->controller--->model

Spring mvc和三层架构的关系:都是对代码进行分层,三层架构没有页面

三层架构 职责 对应 MVC 组件 典型实现
表现层(Controller层) 接收请求、返回响应 C(控制器)+ V(视图) Servlet/Controller + JSP/HTML
业务逻辑层(service) 处理核心业务、逻辑判断 M(模型) Service 接口 / 实现类
数据访问层(dao) 操作数据库、文件等存储 M(模型) Mapper/DAO 接口 / 实现类

介绍Spring MVC工作原理

pom文件依赖

java 复制代码
 <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        //日志
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.26</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
复制代码
springmvc.xml文件
java 复制代码
  <!-- 配置创建 spring 容器要扫描的包 -->
    <context:component-scan base-package="com.yunkukukukuku"/>
    <!--视图解析器:拼接jsp的路径,/pages/ success .jsp-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/pages/"/>
        <property name="suffix" value=".jsp"/>
            <--
        这段代码配置了 Spring MVC 的视图解析器:
        功能:自动将 Controller返回的逻辑视图名拼接成完整的 JSP 路径
        工作原理:前缀 + 视图名 + 后缀-->
    </bean>
    <!--开启springmvc注解的支持:??????-->
    <mvc:annotation-driven/>
 

web.xml文件

python 复制代码
<!--    初始化xml文件-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--servlet的初始化参数,加载springmvc时使用-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--tomcat启动时就创建该servlet-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!--
            /*:接受所有请求,比如:*.js、*.css、*.png、/user/getUserById
            /:接受正常路径,比如:/user/getUserById
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

Ø 第一步:发起请求到前端控制器(DispatcherServlet)

Ø 第二步:前端控制器请求HandlerMapping查找 Handler

Ø 第三步:处理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器对象,多个HandlerInterceptor拦截器对象),通过这种策略模式,很容易添加新的映射策略

Ø 第四步:前端控制器调用处理器适配器去执行Handler

Ø 第五步:处理器适配器HandlerAdapter将会根据适配的结果去执行Handler

Ø 第六步:Handler执行完成给适配器返回ModelAndView

Ø 第七步:处理器适配器向前端控制器返回ModelAndView (ModelAndView是springmvc框架的一个底层对象,包括 Model和view)

Ø 第八步:前端控制器请求视图解析器去进行视图解析 (根据逻辑视图名解析成真正的视图),通过这种策略很容易更换其他视图技术,只需要更改视图解析器即可

Ø 第九步:视图解析器向前端控制器返回View

Ø 第十步:前端控制器进行视图渲染

Ø 第十一步:前端控制器向用户响应结果

springmvc的核心组件

DispatcherServlet(前端控制器):接受请求,加载springmvc.xml

HandlerMapping(处理器映射器):找handler

HandlerAdapter(处理器适配器):调用handler

ViewResolver(视图解析器):拼接jsp的路径

View(视图渲染器):把数据填充到request,跳转页面

类方法

python 复制代码
package com.yunkukukukuku.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

// 控制器类
@Controller
public class HelloController {
    @RequestMapping("/hello")//映射路径
        public ModelAndView helloWorld() {
            //创建模型和视图
            ModelAndView modelAndView = new ModelAndView();
            // 设置模型数据
            modelAndView.addObject("msg", "一级路径");
            // 设置视图名称
            modelAndView.setViewName("success");
            // 返回模型和视图
            return modelAndView;
        }
}

在首页写出跳转地址

在springmvc.xml文件已经配置好了 跳转的前缀 和后缀

加上这里面的/hello(视图名)就是跳转的网址

点击a标签之后就能成功进入

java 复制代码
请求 → 
前端控制器(DispatcherServlet)→ 
处理器映射器(URL匹配→找到Controller方法,反射获取方法对象)→
处理器适配器(执行方法→返回ModelAndView)→ 
视图解析器(解析视图名→拼接JSP完整路径)→ 
视图渲染器(填充模型数据到JSP)→ 响应返回给用户
相关推荐
BUG?不,是彩蛋!2 小时前
AI智慧社区--从0到1开发柱状图数据接口
java·spring boot·后端·intellij-idea·mybatis
arvin_xiaoting2 小时前
OpenClaw Agent与Sub-agent架构深度分析:关系、通信与权限隔离
java·linux·架构·多智能体·ai agent·openclaw·sub-agent
码农时代者2 小时前
拒绝重复造轮子!开发者如何靠“高质量源码”实现项目高效交付?
java·python·php
稽稽稽稽不如人2 小时前
《从零开始的java从入门到入土的学习生活——JavaWeb后端篇》Chapter18——JavaWeb后端篇学习记录——AOP 面向切面编程
java·学习·生活
BUG?不,是彩蛋!2 小时前
从零到一掌握 K 线与技术指标:Java 实战教程 | MA, RSI, MACD 全解析
java·开发语言·spring boot·量化投资
qq_427940342 小时前
java-UI自动化selenium+TestNG
java·selenium·自动化
biter down2 小时前
C++ 设计不可被继承的类
java·开发语言·c++
于先生吖2 小时前
Java 智慧社区本地生活系统:上门服务 + 商城模块完整开发
java·大数据·生活
摇滚侠2 小时前
Java 项目教程《尚庭公寓-下》,单体架构项目,从开发到部署
java·开发语言·架构