SpringMVC | SpringMVC的“入门“

目录:

  • 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默认的内部配置即可。)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂Persistence One- 如何将Restaking带入Cosmos

Persistence One正在将Restaking引入Cosmos。用户将能够通过pSTAKE、Stride、Quicksilver和Milkyway将Liquid Staked Tokens&#xff08;如ATOM、TIA、DYDX等&#xff09;存入Persistence One&#xff0c;对其进行Restaking&#xff0c;从而安全地连接更多区块链&#xff0c;首…

计算机网络之传输层 + 应用层

.1 CIDR地址块中还有三个特殊的地址块 a. 前缀 n 32 , 即32位IP地址都是前缀, 没有主机号, 这其实就是一个IP地址, 用于主机路由 b. 前缀 n 31 , 这个地址块中有两个IP地址, 主机号分别为0/1 , 这个地址块用于点对点链路 c. 前缀 n 0 , 用于默认路由使用二叉线索树查找转发…

就业班 2401--3.7 Linux Day13--日志轮转+jumpserver堡垒机

一、日志轮转 日志重要性 Linux系统日志对管理员来说&#xff0c;是了解系统运行的主要途径&#xff0c;因此需要对 Linux 日志系统有个详细的了解。 Linux 系统内核和许多程序会产生各种错误信息、告警信息和其他的提示信息&#xff0c;这些各种信息都应该记录到日志文件中&a…

【备战蓝桥杯系列】Java组国二选手笔记一:蓝桥杯中的常用语法特性

蓝桥杯Java国二选手笔记一&#xff1a;蓝桥杯中的常用语法特性 前言 参加了好几次蓝桥杯了&#xff0c;C组参加了&#xff0c;Java也参加过&#xff0c;也会用python刷算法。下面给出常用的Java语法特性在蓝桥杯中的使用&#xff0c;以及常见的需要注意的Java语法规范。有准备…

Git你必须知道的知识

一&#xff1a;使用Git的原因 我们在写版本的时候&#xff0c;可能会谢谢改改&#xff0c;可能要回到之前的文件&#xff0c;修改之前的文件&#xff0c;因此总是要保持很多个文件&#xff0c;且书写文件名也很麻烦。git可以有一个仓库&#xff0c;版本库&#xff0c;可以保存这…

c语言经典测试题12

1.题1 float f[10]; // 假设这里有对f进行初始化的代码 for(int i 0; i < 10;) { if(f[i] 0) break; } 上述代码有那些缺陷&#xff08;&#xff09; A: for(int i 0; i < 10;)这一行写错了 B: f是float型数据直接做相等判断有风险 C: f[i]应该是f[i] D: 没有缺…

GamiPress与MyCred:游戏化插件

游戏化插件很受欢迎&#xff0c;可以提高用户参与度并鼓励在动态网站和内容管理环境中采取所需的操作。GamiPress和MyCred 是游戏化领域的主要参与者&#xff0c;它们提供功能丰富的解决方案&#xff0c;将游戏机制有效地融入网站。旨在吸引并留住受众的组织面临着 GamiPress 和…

什么是攻防演练,能给企业带来什么

随着互联网技术的发展和企业信息化程度的提高&#xff0c;企业面临的网络安全威胁越来越多。为了保护企业的信息安全&#xff0c;攻防演练已经成为企业安全运营中不可或缺的一部分。攻击者通常会利用各种方法来破坏企业的安全系统和数据&#xff0c;因此企业需要像攻击者一样思…

TDengine 资深研发分享解决思路,长查询不再成为系统性能瓶颈!

长查询问题指的是在数据库写入和查询并存的日常应用场景中&#xff0c;存在处理数据量大且耗时很长的查询长时间占用系统资源&#xff0c;导致写入可能被阻塞的问题。有时&#xff0c;查询代码对于资源释放函数调用的遗忘也可能以长查询问题的形式表现出来。如何在数据写入不被…

一家新店怎么快速出体验分?教大家一个简单好用的方法,建议收藏

大家好&#xff0c;我是电商花花。 在现在直播电商时代&#xff0c;抖音电商已经成为了一种新兴的商业模式&#xff0c;在抖音小店的项目上&#xff0c;店铺体验分成为了抖音小店能否成功的一个关键因素之一。 店铺的体验分越高&#xff0c;我们店铺的权重才会更高&#xff0…

基于springboot+vue的在线远程考试系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

前端如何上传图片给后台?如何传递 multipart/form-data 类型的数据?图片大小、格式检查?

1. 如何上传图片&#xff1f; 图片上传需要传二进制流&#xff0c;请求头的 content-type 类型需为 multipart/form-data&#xff0c;传递的格式如下图所示 前后端交互通常为&#xff1a; 先调用接口上传二进制流图片然后再上传表单其他内容&#xff08;第一步通常会返回后台…

Python语言基础与应用-北京大学-陈斌-P32-31-计算和控制流-上机练习:创建并调用函数-字符集合的并集-上机代码

Python语言基础与应用-北京大学-陈斌-P32-31-计算和控制流-上机练习&#xff1a;创建并调用函数-字符集合的并集-上机代码 本文环境&#xff1a; win10 Thonny4.1.4 # 函数训练字符集合的并集 def my_union(str1,str2):list1 []list2 []i 0 while i < len(str1):lis…

python_读取txt文件绘制多条曲线

读取txt文件&#xff0c;将匹配条件的多列绘制成曲线展示&#xff1a; import matplotlib.pyplot as plt import re from datetime import datetime from pylab import mplmpl.rcParams["font.sans-serif"] ["SimHei"] # 设置显示中文字体 mpl.rcParam…

[LeetCode][8]【学习日记】实现字符串转换整数 (atoi)函数

题目 8. 字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串并丢弃无用的前导空格检查下一个字…

3.7 day2 Free RTOS

使用ADC采样光敏电阻数值&#xff0c;如何根据这个数值调节LED灯亮度。2.总结DMA空闲中断接收数据的使用方法 while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */adc_value HAL_ADC_GetValue(&hadc);TIM3->CCR3 adc_value * 999 / 4095;printf("%d …

hadoop伪集群部署教程

文章目录 前言一、安装准备1. 安装条件2. 安装jdk3. 配置本节点免密登录 二、安装hadoop1. 下载并解压hadoop2. 设置环境变量2.1 设置hadoop安装目录环境变量2.2. 设置hadoop的root用户环境变量 3. 修改配置文件3.1 修改 etc/hadoop/hadoop-env.sh 文件3.2 修改 etc/hadoop/cor…

【Unity】【VR开发】用控制器摇杆改变Canvas的大小和位置

【背景】 做一个VR投屏工具,希望能够用右手控制器的摇杆,前后控制Canvas距离,左右控制Canvas大小。 【分析】 需要解决几个问题: 获取摇杆在横纵轴方向上的输入值需要通过合适的Event触发改变Canvas大小和距离的函数写具体的Canvas改变大小和距离的功能【技术选型】 VR…

eNSP | OSPF 协议来模拟和测试路由器之间的动态路由配置

一、拓扑结构的搭建 &#xff08;一&#xff09;PC1&#xff1a;IP如下图所示 注意&#xff1a; 1.网关地址一定要和所指示的接口IP相同 2.配置完PC1IP后&#xff0c;点击下面应用 &#xff08;二&#xff09;PC2&#xff1a;同pc1 二、IP地址的配置 &#xff08;一&#x…

什么是单点登录(SSO)前端用 iframe 实现单点登录 超详细说明!!

目录 什么是单点登录&#xff1f; 使用 iframe 实现单点登录 什么是单点登录&#xff1f; 单点登录的英文名叫做&#xff1a;Single Sign On&#xff08;简称SSO&#xff09;。 单点登录是一种身份验证过程&#xff0c;允许用户通过一次登录验证即可访问多个应用程序或服务…