1.springmvc基础入门(一)

news2025/6/9 21:36:44

1.Spring MVC概念

Spring MVC 是 Spring Framework 提供的 Web 组件,全称是 Spring Web MVC,是⽬前主流的实现

MVC 设计模式的框架,提供前端路由映射、视图解析等功能。

Java Web 开发者必须要掌握的技术框架。

2.Spring MVC 功能

MVC:Controller(控制层)、Model(模型层)、View(视图层)

流程:Controller 接收客户端请求,调⽤相关业务层组件产出 Model,或业务数据并返回给

Controller,Controller 再结合 View 完成业务数据的视图层渲染,并将结果响应给客户端,如下图所

示。

Spring MVC 对这套 MVC 流程进⾏封装,帮助开发者屏蔽底层代码,并且开放出相关接⼝供开发者调

⽤,让 MVC 开发变得更加简单⽅便。

3.Spring MVC 实现原理

核⼼组件

  • DispatcherServlet:前置控制器,负责调度其他组件的执⾏,可以降低不同组件之间的耦合性, 是整个 Spring MVC 的核⼼模块。
  • Handler:处理器,完成具体的业务逻辑,相当于 Servlet。
  • HandlerMapping:DispatcherServlet 是通过 HandlerMapping 将请求映射到不同的 Handler。
  • HandlerInterceptor:处理器拦截器,是⼀个接⼝,如果我们需要进⾏⼀些拦截处理,可以通过实现该接⼝完成。
  • HandlerExecutionChain:处理器执⾏链,包括两部分内容:Handler 和
  • HandlerInterceptor(系统会有⼀个默认的 HandlerInterceptor,如果需要额外拦截处理,可以添加拦截器进⾏设置)。
  • HandlerAdapter:处理器适配器,Handler 执⾏业务⽅法之前,需要进⾏⼀系列的操作包括表单的数据验证、数据类型的转换、将表单数据封装到 POJO 等,这⼀些列操作都是由
  • HandlerAdapter 完成,DispatcherServlet 通过 HandlerAdapter 执⾏不同的 Handler。
  • ModelAndView:封装了模型数据和视图信息,作为 Handler 的处理结果,返DispatcherServlet。
  • ViewResolver:视图解析器,DispatcherServlet 通过它将逻辑视图解析为物理视图,最终将渲染的结果响应给客户端。

⼯作流程

1、客户端请求被 DispatcherServlet 接收。

2、根据 HandlerMapping 映射到 Handler。

3、⽣成 Handler 和 HandlerInterceptor。

4、Handler 和 HandlerInterceptor 以 HandlerExecutionChain 的形式⼀并返回给

DispatcherServlet。

5、DispatcherServlet 通过 HandlerAdpater 调⽤ Handler 的⽅法完成业务逻辑处理。

6、返回⼀个 ModelAndView 对象给 DispatcherServlet。

7、DispatcherServlet 将获取的 ModelAndView 对象传给 ViewResolver 视图解析器,将逻辑视图解析

成物理视图。

8、ViewResolver 返回⼀个 View 给 DispatcherServlet。

9、DispatcherServlet 根据 View 进⾏视图渲染(将模型数据填充到视图中)。

10、DispatcherServlet 将渲染之后的视图响应给客户端。

4.Spring MVC 具体使用

1、创建 Maven ⼯程,pom.xml。

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.2.3.RELEASE</version>
</dependency>

2、在 web.xml 中配置 Spring MVC 的 DispatcherServlet。

<web-app>
   <display-name>Archetype Created Web Application</display-name>
   <servlet>
     <servlet-name>springmvc</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servletclass>
     <init-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:springmvc.xml</param-value>
     </init-param>
   </servlet>
   
   <servlet-mapping>
     <servlet-name>springmvc</servlet-name>
     <url-pattern>/</url-pattern>
   </servlet-mapping>
</web-app>

3、springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
 http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
 <!-- 配置⾃动扫描 -->
   <context:component-scan base-package="com.southwind"></context:component-scan>
     
   <!-- 视图解析器 -->
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <!-- 前缀 -->
     <property name="prefix" value="/"></property>
     <!-- 后缀 -->
     <property name="suffix" value=".jsp"></property>
  </bean>
</beans>

4、创建 Handler

package com.southwind.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloHandler {
    @RequestMapping("/index")
    public String index(){
        System.out.println("接收到了请求");
        //返回逻辑视图
        return "index";
    }
}

流程梳理

1、DispatcherServlet 接收到 URL 请求 index,结合 @RequestMapping("/index") 注解将该请求交给

index 业务⽅法进⾏处理。

2、执⾏ index 业务⽅法,控制台打印⽇志,并且返回 "index" 字符串(逻辑视图)。

3、结合 springmvc.xml 中的视图解析器配置,找到⽬标资源:/index.jsp,即根⽬录下的 index.jsp ⽂

件,将该 JSP 资源返回给客户端完成响应。

Spring MVC 环境搭建成功。

5.Spring MVC 常⽤注解

@RequestMapping

Spring MVC 通过 @RequestMapping 注解将 URL 请求与业务⽅法进⾏映射,在控制器的类定义处以及

⽅法定义处都可以添加 @RequestMapping ,在类定义处添加相当于多了⼀层访问路径。

package com.southwind.controller
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/hello")
public class HelloHandler {
 @RequestMapping("/index")
 public String index(){
     System.out.println("接收到了请求");
     //返回逻辑视图
     return "index";
 }
}

@RequestMapping 常⽤参数

1.value:指定 URL 请求的实际地址,是 @RequestMapping 的默认值

@RequestMapping(value="/index")
public String index(){
     System.out.println("接收到了请求");
     //返回逻辑视图
     return "index";
}

2.method:指定请求的 method 类型,包括 GET、POST、PUT、DELETE 等。

@RequestMapping(value = "/index",method = RequestMethod.POST)
public String index(){
     System.out.println("接收到了请求");
     //返回逻辑视图
     return "index";
}

3.params:指定 request 请求中必须包含的参数值,若不包含,⽆法调⽤该⽅法。

@RequestMapping(value = "/index",method = RequestMethod.POST,params ={"id=1","name=tom"})
public String index(){
     System.out.println("接收到了请求");
     //返回逻辑视图
     return "index";
}

上述代码表示 request 请求中必须包含 name 和 id 两个参数,并且 id 的值必须为 1,name 的值必须

为 tom,才可调⽤,否则抛出 400 异常。

5.1参数绑定

params 是对 URL 请求参数进⾏限制,不满⾜条件的 URL ⽆法访问该⽅法,需要在业务⽅法中获取

URL 的参数值。

1、在业务⽅法定义时声明参数列表。

2、给参数列表添加 @RequestParam 注解进⾏绑定

@RequestMapping(value = "/index",method = RequestMethod.POST)
public String index(@RequestParam("num") Integer id,@RequestParam("str") String name){
     System.out.println("接收到了请求,参数是:id="+id+",name="+name);
     //返回逻辑视图
     return "index";
}

Spring MVC 可以⾃动完成数据类型转换,该⼯作是由 HandlerAdapter 来完成的。

5.2 Spring MVC 也⽀持 RESTful ⻛格的 URL 参数获取

传统的 URL:localhost:8080/hello/index?id=1&name=tom

RESTful URL:localhost:8080/hello/index/1/tom

@RequestMapping("/restful/{id}/{name}")
public String restful(@PathVariable("id") Integer id,@PathVariable("name") String name){
     System.out.println(id+"-"+name);
     return "index";
}

将参数列表的注解改为 @PathVariable("id") 即可。

5.3 映射 Cookie
@RequestMapping("/cookie")
public String getCookie(@CookieValue("JSESSIONID") String sessionId){
     System.out.println(sessionId);
     return "index";
}
5.4 使⽤ POJO 绑定参数

Spring MVC 会根据请求参数名和 POJO 属性名进⾏匹配,⾃动为该对象填充属性值,并且⽀持属性级

联。

如果出现中⽂乱码,可以通过配置过滤器来解决,在 web.xml 中添加配置即可。

<filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2405867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模块缝合-把A模块换成B模块(没写完)

把MLP Head替换为KAN 1.在model文件下新建一个python文件 2.把 模块文件里的整个KAN代码复制到新的python文件中 3.在开头导入 from model.KAN(新建文件名&#xff09; import KAN&#xff08;新建文件中的类名&#xff09; 4.sys.path.append(r"D: Icode(Kansformer"…

从零开始学Flink:揭开实时计算的神秘面纱

一、为什么需要Flink&#xff1f; 当你在电商平台秒杀商品时&#xff0c;1毫秒的延迟可能导致交易失败&#xff1b;当自动驾驶汽车遇到障碍物时&#xff0c;10毫秒的计算延迟可能酿成事故。这些场景揭示了一个残酷事实&#xff1a;数据的价值随时间呈指数级衰减。 传统批处理…

Appium如何支持ios真机测试

ios模拟器上UI自动化测试 以appiumwebdriverio为例&#xff0c;详细介绍如何在模拟器上安装和测试app。在使用ios模拟器前&#xff0c;需要安装xcode&#xff0c;创建和启动一个simulator。simulator创建好后&#xff0c;就可以使用xcrun simctl命令安装被测应用并开始测试了。…

JDK17 Http Request 异步处理 源码刨析

为什么可以异步&#xff1f; #调用起始源码 // 3. 发送异步请求并处理响应 CompletableFuture future client.sendAsync( request, HttpResponse.BodyHandlers.ofString() // 响应体转为字符串 ).thenApply(response -> { // 状态码检查&#xff08;非200系列抛出异常&…

【Zephyr 系列 8】构建完整 BLE 产品架构:状态机 + AT 命令 + 双通道通信实战

🧠关键词:Zephyr、BLE、状态机、双向透传、AT 命令、Buffer、主从共存、系统架构 📌适合人群:希望开发 BLE 产品(模块/标签/终端)具备可控、可测、可维护架构的开发者 🧭 引言:从“点功能”到“系统架构” 前面几篇我们已经逐步构建了 BLE 广播、连接、数据透传系统…

【Mac 从 0 到 1 保姆级配置教程 16】- Docker 快速安装配置、常用命令以及实际项目演示

文章目录 前言1. Docker 是什么&#xff1f;2. 为什么要使用 Docker&#xff1f; 安装 Docker1. 安装 Docker Desktop2. 安装 OrbStack3. Docker Desktop VS OrbStack5. 验证安装 使用 Docker 运行项目1. 克隆项目到本地2. 进入项目目录3. 启动容器: 查看运行效果1. OrbStack 中…

2025-05-01-决策树算法及应用

决策树算法及应用 参考资料 GitHub - zhaoyichanghong/machine_learing_algo_python: implement the machine learning algorithms by p(机器学习相关的 github 仓库)决策树实现与应用决策树 概述 机器学习算法分类 决策树算法 决策树是一种以树状结构对数据进行划分的分类…

Redis知识体系

1. 概述 本文总结了Redis基本的核心知识体系&#xff0c;在学习Redis的过程中&#xff0c;可以将其作为学习框架&#xff0c;以此更好的从整体的角度去理解和学习Redis的内容和设计思想。同时知识框架带来的好处是可以帮助我们更好的进行记忆&#xff0c;在大脑中形成相应的知识…

mysql-MySQL体系结构和存储引擎

1. MySQL体系结构和存储引擎 MySQL被设计成一个单进程多线程架构的数据库&#xff0c;MySQL数据库实例在系统上的表现就是一个进 程当启动实例时&#xff0c;读取配置文件&#xff0c;根据配置文件的参数来启动数据库实例&#xff1b;若没有&#xff0c;按编译时的默认 参数设…

黑马Javaweb Request和Response

一.介绍 在 Web 开发中&#xff0c;HttpServletRequest 和 HttpServletResponse 是两个非常重要的类&#xff0c;它们分别用于处理客户端的请求和服务器的响应。以下是它们的详细说明和使用方法&#xff1a; 1. HttpServletRequest HttpServletRequest 是一个接口&#xff0…

Gerrit+repo管理git仓库,如果本地有新分支不能执行repo sync来同步远程所有修改,会报错

问题&#xff1a;创建一个本地分支TEST 来关联远程已有分支origin/TEST&#xff0c;直接执行repo sync可能会出现问题&#xff1a;比如&#xff0c;本地分支TES会错乱关联到origin/master&#xff0c;或者拉不下最新代码等问题。 // git checkout -b 新分支名 远程分支名字 git…

豆瓣图书评论数据分析与可视化

【题目描述】豆瓣图书评论数据爬取。以《平凡的世界》、《都挺好》等为分析对象&#xff0c;编写程序爬取豆瓣读书上针对该图书的短评信息&#xff0c;要求&#xff1a; &#xff08;1&#xff09;对前3页短评信息进行跨页连续爬取&#xff1b; &#xff08;2&#xff09;爬取…

Vue ④-组件通信 || 进阶语法

组件三大部分 template&#xff1a;只有能一个根元素 style&#xff1a;全局样式(默认)&#xff1a;影响所有组件。局部样式&#xff1a;scoped 下样式&#xff0c;只作用于当前组件 script&#xff1a;el 根实例独有&#xff0c;data 是一个函数&#xff0c;其他配置项一致…

从入门到实战:AI学习路线全解析——避坑指南

分享一下阿里的人工智能学习路线,为感兴趣系统学习的小伙伴们探路。 一、谁适合学这门AI课程?五类人群的精准定位 无论你是零基础小白还是职场转型者,这套系统化课程都能为你量身定制成长路径: 零基础爱好者(无编程/数学背景) 课程提供Python和数学前置学习建议,先补基…

uniapp实现的简约美观的星级评分组件

采用 uniapp 实现的一款简约美观的星级评分模板&#xff0c;提供丝滑动画效果&#xff0c;用户可根据自身需求进行自定义修改、扩展&#xff0c;纯CSS、HTML实现&#xff0c;支持web、H5、微信小程序&#xff08;其他小程序请自行测试&#xff09; 可到插件市场下载尝试&#x…

AWS Elastic Beanstalk + CodePipeline(Python Flask Web的国区CI/CD)

目标 需要使用AWS Elastic Beanstalk 部署一个Python的Flask Web应用&#xff0c;并且使用CodePipeline作为CI/CD工作流。 eb部署图 前提 假设你已经有一个能够正常运行的Python的Flask Web应用项目代码&#xff0c;而且需要对已有Flask工程做一些调整。由于AWS Elastic Bea…

多线程语音识别工具

软件介绍 本文介绍一款支持大厂接口的语音转文字工具&#xff0c;具备免配置、免费使用的特点。 软件特性 该工具是一款完全免费的桌面端应用程序&#xff0c;部署于开源社区平台&#xff0c;其核心优势在于整合了多家技术供应商的接口资源。 操作方式 用户只需将音频…

DiMTAIC 2024 数字医学技术及应用创新大赛-甲状腺B超静态及动态影像算法赛-参赛项目

参赛成绩 项目介绍 去年参加完这个比赛之后&#xff0c;整理了项目文件和代码&#xff0c;虽然比赛没有获奖&#xff0c;但是参赛过程中自己也很有收获&#xff0c;自己一个人搭建了完整的pipeline并基于此提交了多次提高成绩&#xff0c;现在把这个项目梳理成博客&#xff0c…

window安装docker\docker-compose

安装前配置 打开控制面板,参照下图打开“启动或关闭windows功能”,Hyper-V 和容器需要启用 程序和功能 启动或关闭windows功能 勾选Hyper-V 安装路径配置 Docker在Windows上的默认安装路径为C:\Program Files\Docker。 以管理员身份运行CMD在D盘,dev文件夹下创建Docker文…

Jenkins的学习与使用(CI/CD)

文章目录 前言背景CI/CDJenkins简介Jenkins特性 安装Jenkins工作流程&#xff08;仅供参考&#xff09;安装maven和其他插件新建任务任务源码管理配置maven配置git&#xff08;非必需&#xff09; 尝试手动构建jar包可能遇到的错误 发布到远程服务器前置清理工作构建触发器git钩…