SpringMVC | SpringMVC的“入门“

news2024/11/17 13:52:03

目录:

  • Spring MVC入门 :
    • Spring MVC 概述
    • 第一个Spring MVC应用
    • SpringMVC 的 “工作流程”

Spring MVC入门 :

在这里插入图片描述

作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习!

该文章参考学习教材为:
《Java EE企业级应用开发教程 (Spring + Spring MVC +MyBatis)》 黑马程序员 / 编著
文章以课本知识点 + 代码为主线,结合自己看书学习过程中的理解和感悟 ,最终成就了该文章

文章用于本人学习使用 , 同时希望能帮助大家。
欢迎大家点赞👍 收藏⭐ 关注💖哦!!!

(侵权可联系我,进行删除,如果雷同,纯属巧合)


Spring MVC 概述

  • Spring MVC 是 Spring 提供的一个实现了 WebMVC 设计模式轻量级Web框架。它与 Struts2框架一样,都属于 MVC框架,但其 (Spring mvc )使用和性能 等方面 比Struts 2更加优异
  • Spring MVC 具有如下特点
    • Spring 框架一部分,可以方便地利用Spring所提供其他功能
    • 灵活性强易于与其他框架集成。
    • 提供了一个 前端控制器 : DispatcherServlet,使开发人员无须额外开发控制器对象
    • 自动绑定用户输入,并能正确的转换数据类型
    • 内置了常见校验器可以校验用户输入。如果校验不能通过,那么就会重定向到输
      入表单
    • 支持国际化。可以根据用户区域显示多国语言
    • 支持多种视图技术。它支持JSPVelocityFreeMarker等视图技术
    • 使用基于 XML的配置文件,在编辑后不需要重新编译应用程序

第一个Spring MVC应用

  • 第一步创建项目,引入JAR包 : 需要Spring框架的四个基本JAR + Spring MVC需要的两个JAR + 一个日志JAR

    在这里插入图片描述

​ SpringMvc所需依赖

  • 第二步(web.xml)中 配置 “前端控制器”。在 web.xml 中,配置 SpringMVC前端控制器 ( DispatcherServlet )

    web.xml

    <?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.xml中配置“前端控制器” : DispatcherServlet -->
        <!--  配置“前端过滤器” : DispatcherServlet -->
        <servlet>
            <servlet-name>SpringMvc</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
    
           <!--   初始化时加载SpringMVC的“配置文件” : springmvc-config.xml    -->
           <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:springmvc-config.xml</param-value>
           </init-param>
    
            <!--    表示容器启动时立刻加载Servlet    -->
            <load-on-startup>1</load-on-startup>
        </servlet>
        
        <servlet-mapping>
            <servlet-name>SpringMvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>
    

    在上面的 web.xml 代码中主要对 <servlet><servlet-mapping>元素 进行了 配置。在 <servlet>中,配置了 Spring MVC前端控制器 : DispatcherServlet,并通过其 子元素<init-param>配置Spring MVC配置文件 ( springmvc-config.xml ) 的位置, <load-on-startup>元素中的表示容器在启动时立即加载这个Servlet;在 <servlet-mapping>中,通过 <url-pattern>元素的“/”,会将所有URL 拦截交由DispatcherServlet处理

  • 第三步创建Controller类controller.java

    /**
     * 控制器类
     */
    public class FirstController implements Controller {
    
    
        @Override
        //该方法的返回值是 : ①一个指定路径下的.jsp文件给前端 ②返回一个ModelAndView对象给前端
        public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
            //创建ModelAndView对象
            ModelAndView mav = new ModelAndView();
            //向模型对象中添加数据
            //存一个msg的字符串对象进ModelAndView对象中,后端最终会将该ModelAndView对象传给前端,前端就能获取ModelAndView对象的值
            //前端通过${msg}来获取ModelAndView对象中的字符串值
            mav.addObject("msg", "这是我的第一个MVC程序");
            //设计逻辑视图名 (要返回给前端的“视图”的这个路径下的“first.jsp”文件),同时ModelAndView这个对象也是要返回给前端的
            mav.setViewName("/WEB-INF/jsp/first.jsp");
            //返回ModelAndView对象(里面包含了视图:first.jsp文件)
            return mav;
        }
    }
    

    handleRequest( )Controller 接口实现方法FirstController类调用该方法来处理请求,并返回一个 包含视图名包含视图名模型ModelAndView对象 ( 即存一个msg的字符串对象 进“ModelAndView对象中 ”)。代码中,向模型对象中添加了一个 名称为 msg 的字符串对象 ( 前端通过通过 ${msg}来获取ModelAndView工的值),并设置 返回的视图路径 为“/WEB-INF/jsp/first.jsp" ( 要返回的视图为 :这个路径下的first.jsp 文件),这样,同时ModelAndView这个对象也是返回给前端的 。

    (此处是后端前端发送的请求作出响应,后端打算返回一个 ModelAndView对象 给前端的,且存了一个msg字符串对象前端,前端通过 ${ msg }来获得ModelAndView中的数据,同时将指定的.jsp文件作为“视图”给前端)。

  • 第四步创建 SpringMVC的配置文件springmvc-config.xml

    springmvc-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="
    	http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans.xsd
    	http://www.springframework.org/schema/mvc
    	http://www.springframework.org/schema/mvc/spring-mvc.xsd
    	http://www.springframework.org/schema/context
    	http://www.springframework.org/schema/context/spring-context.xsd">
    
        <!-- 配置处理器Handle,映射“/firstController”请求  -->
        <bean name="/firstController" class="com.myh.controller.FirstController"/>
    
    
        <!--  下面的的复杂的 处理映射器、处理器适配器和视图解析器在实际开发中是可以不用配置  -->
        <!--  因为spring4.0之后,spring会有默认的“内部配置"来完成相应的工作  -->
        <!--  处理映射器,将处理器Handler的name作为url进行查找  -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    
        <!--  处理器适配器,配置对处理器中handleRequest()方法的调用  -->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
        <!--  视图解析器  -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
    
    </beans>
    

    ① 在上述 springmvc-config.xml 中,首先定义了一个 名称为“/firstControllerBean,该 Bean 会将控制器类 : FirstController 映射到“/firstController”请求中。 (可以理解为 :将该“url” 和 “FirstController映射/绑定 起来这样“前端请求”就能到达FirstController中,controller做出给前端响应)。

    ② 然后配置了 处理器映射器 :BeanNameUrlHandlerMapping处理器适配器SimpleControllerHandlerAdapter,其中处理器映射器用于处理器Bean中的的 name (即url)进行处理器查找,而处理器适配器用于完成对FirstController 处理器handleRequest( )方法调用

    ③ 最后配置了 视图解析器 : InternalResourceViewResolver解析结果视图,并将结果呈现给用户

    ps :
    老版本的Spring 中,配置文件内必须要配置处理器映射器处理器适配器视图解析器,但在Spring 4.0以后如果不配置处理器映射器、处理器适配器和视图解析器,也会使用Spring内部默认的配置完成相应的工作,此处 配置的的配置处理器映射器、处理器适配器和视图解析器是为了让我们能能够更加清晰地了解Spring MVC的工作流程

    (意思就是说 :上面的复杂的 处理映射器处理器适配器视图解析器在实际开发中是可以不用配置的

  • 第五步创建视图(View)页面 : (即一个返回给前端的“.jsp文件”)

    first.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>入门程序</title>
    </head>
    <body>
    ${msg}
    </body>
    </html>
    

    第六步启动项目,进行测试

    此时项目的目录结构为 :

    在这里插入图片描述

    将项目发布Tomcat 中,并启动 Tomcat 服务器。在浏览器中访问地址http://localhost:8080/firstController。

SpringMVC 的 “工作流程”

  • SpringMVC的“工作原理” :

    在这里插入图片描述

    (1) 用户通过客户端服务器发送请求请求会被SpringMVC前端控制器 : DispatcherServlet拦截
    (2) DispatcherServlet拦截请求后,会调用HandlerMapping 处理器映射器
    (3) 处理器映射器 : HandlerMapping 根据请求 URL 找到具体处理器 ,生成处理器对象处理器拦截器( 如果有则生成 )一并返回给DispatcherServlet
    (4) DispatcherServlet会通过返回信息选择合适HandlerAdapter : HandlerMapping
    (5) HandlerAdapter处理器适配器 会调用并执行
    Handler(处理器)
    : ( 如 FirstController) ,这里的处理器指的就是程序中编写的 Controller 类,也被称之为后端控制器 (负责处理请求做出响应)。
    (6) Controller执行完成后,会返回一个ModelAndView对象 ( 给前端 ),该对象中会包含视图名或包含“模型和视图名” ( 实际给这个操作首先经过HandlerAdapter ,然后再给 DispatcherServlet然后一系列的传递最后才能响应该前端的 )。
    (7) HandlerAdapter : 处理器适配器ModelAndView对象 返回给DispatcherServlet
    (8) DispatcherServlet会根据 ModelAndView对象选择一个合适的 ViewResolver : (视图解
    析器)。
    (9)ViewResolver :视图解析器 解析后,会向DispatcherServlet返回具体的View(视图),如: 一个 .jsp文件
    (10) DispatcherServletView进行渲染( 即将模型数据填充至视图中)。
    (11)视图渲染结果会返回给客户端浏览器显示 (最后响应内容给“前端客户”)。

    ps :
    上述执行过程中DispatcherServletHandlerMappingHandlerAdapterViewResolver
    对象的工作是在框架内部执行的,开发人员并不需要关心这些对象内部的实现过程只需要配置
    前端控制器(DispatcherServlet )
    ,完成Controller中的业务处理, 并在视图中(View)中展示相应信息 即可。
    ( 意思就是说 : 实际开发中要①设置好前端控制器 ②配置好controller将其对应的“处理器” ③配置好视图文件等内容即可。像HandlerMappingHandlerAdapterspring默认的内部配置即可。)

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

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

相关文章

docker 部署prometheus+grafana

首先进行部署docker 配置阿里云依赖&#xff1a; curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 配置centos 7的镜像源 yum install -y yum-utils device-mapper-persistent-data lvm2 # 安装一些后期或需要的的一下依…

MVO-CNN-BiLSTM多输入分类预测|多元宇宙优化算法-卷积-双向长短期神经网络分类预测(Matlab)

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

Android14音频进阶:AudioTrack如何拿到AudioFlinger创建的匿名共享内存(六十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

微软免费AI基础中文课程;马斯克提出撤诉OpenAI条件:“改名ClosedAI”

&#x1f989; AI新闻 &#x1f680; 马斯克提出撤诉OpenAI条件&#xff1a;“改名ClosedAI” 摘要&#xff1a;埃隆・马斯克针对OpenAI及其CEO萨姆・阿尔特曼提起诉讼&#xff0c;主因双方在人工智能开发的合作协议上出现分歧。马斯克称&#xff0c;OpenAI的转型为营利组织与…

C语言-----qsort函数的功能以及模拟实现

1.冒泡排序 &#xff08;1&#xff09;冒泡排序就是数据两个两个的进行比较每一趟都是一个数和其他的所有的数字比较&#xff0c; &#xff08;2&#xff09;这个要的是升序排列&#xff0c;所以前面的大的话&#xff0c;就会调换位置 &#xff08;3&#xff09;冒泡排序的缺…

Git 开源的版本控制系统-04-branch manage 分支管理

拓展阅读 Subversion 开源的版本控制系统入门介绍 VCS Git 开源的版本控制系统-01-入门使用介绍 Git 开源的版本控制系统-02-base usage 基本用法 Git 开源的版本控制系统-03-时间数据回溯 Git 开源的版本控制系统-04-branch manage 分支管理 Git 开源的版本控制系统-05-…

蓝桥-求和

目录 法一&#xff1a;暴力 法二&#xff1a;利用前缀和 法一&#xff1a;暴力 通过率60% #include <bits/stdc.h> using namespace std; long long a[200010]; long long s;int main() {int n;cin>>n;for(int i0;i<n;i){cin>>a[i];}for(int i0;i<…

MS9708/MS9710/MS9714

产品简述 MS9708/MS9710/MS9714 是一个 8-Bit/10-Bit/14-Bit 高速、低功耗 D/A 转换器。当采样速率达到 125MSPS 时&#xff0c; MS9708/MS9710/MS9714 也能提供优越的 AC 和 DC 性能。 MS9708/MS9710/MS9714 的正常工作电压范围为 2.7V 到 5.5V &#xff0c;…

GPT-SoVITS项目的API改良与使用

GPT-SoVITS是一个非常棒的少样本中文声音克隆项目&#xff0c;之前有一篇文章详细介绍过如何部署和训练自己的模型&#xff0c;并使用该模型在web界面中合成声音&#xff0c;可惜它自带的 api 在调用方面支持比较差&#xff0c;比如不能中英混合、无法按标点切分句子等&#xf…

perf的安装与迁移

前言 perf是性能优化很重要的工具之一&#xff0c;本篇博客就来看一下perf的安装以及遇到的问题。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博主并订阅本专栏&#xff0c;一起讨论一起学…

ElasticSearch之文档的存储

写在前面 本文看下文档的存储相关内容。 1&#xff1a;如何确定文档存储在哪个分片&#xff1f; 我们需要确保文档均匀分布在所有的分片中&#xff0c;避免某些部分机器空闲&#xff0c;部分机器繁忙的情况出现&#xff0c;想要实现均匀分布我们可以考虑如下的几种分片路由算…

HUAWEI Pocket 2说的防晒检测,能做到什么程度?

防晒是必须&#xff0c;还是噱头&#xff1f;我们来看一下经典案例&#xff1a; 《新英格兰医学杂志》调查一名69岁的卡车司机发现&#xff0c;他位于车窗侧、遭受更多阳光直晒的左半边脸&#xff0c;无论是皱纹还是皮肤厚度&#xff0c;都要比远离阳光的右半边脸要严重得多&am…

如何阅读“计算机界三大神书”之一 ——《计算机程序的构造和解释》SICP

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

【设计模式 05】原型模式

有的时候&#xff0c;我们创建对象&#xff0c;需要耗费大量时间在一些资源型操作上&#xff0c;这个时候&#xff0c;我们就可以先创建出一个模板&#xff0c;然后每次创建的时候直接从模板复制即可&#xff0c;不用反复进行耗时的资源型操作。 python代码&#xff1a; impo…

【C++干货基地】六大默认成员函数: This指针 | 构造函数 | 析构函数

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

【学习心得】Python好库推荐——websocket-client

websocket-client 是一个在 Python 中广泛使用的库&#xff0c;用于创建 WebSocket 客户端并实现与 WebSocket 服务器的双向通信。更多的关于websocket协议介绍&#xff0c;可以看看我之前写的文章哦&#xff01; 【学习心得】websocket协议简介并与http协议对比http://t.csdn…

什么是工业协议网关?作用是什么?

在工业自动化和智能制造领域&#xff0c;数据的采集、传输和处理是实现设备监控、远程控制和优化的关键。而工业协议网关&#xff0c;作为连接工业设备与上层管理系统的桥梁&#xff0c;发挥着至关重要的作用。今天&#xff0c;我们就来深入解析一下HiWoo Box这一工业协议网关的…

汽车车灯罩破损修复需要准备哪些材料?

汽车车灯罩破损修复需要准备哪些材料&#xff1f; 汽车灯罩破损修复需要准备的材料包括&#xff1a; 砂纸&#xff1a;用于打磨灯罩表面&#xff0c;去除污渍和划痕。抛光蜡或牙膏&#xff1a;用于抛光灯罩表面&#xff0c;使其恢复光滑和透明。UV胶或玻璃胶&#xff1a;用于填…

WPF —— Border、Frame控件详解

一&#xff1a;Border控件 1.Border介绍 Border&#xff08;边框&#xff09;是一个装饰的控件&#xff0c;此控件绘制一个边框、一个背景。用border标签包括目标标签。 不能有多个子元素&#xff0c;要想有多个子元素&#xff0c;多个子元素放在一个父元素下。或者放到grid标…

coreldraw2024中文版发布最新精简版绿色版

CorelDRAW Graphics Suite 2024&#xff08;简称CDR2024&#xff09;是一款非常专业的图形设计工具&#xff0c;已推出全新的2024版本&#xff0c;在功能和体验上进一步提升。它具备最新的填充和透明设备功能&#xff0c;可以完全控制任何类型的纹理&#xff0c;适用于网络摄影…