快速入门Spring MVC 一篇就够了

news2025/6/30 2:29:06

前言

我们前面学习了Spring两大核心机制IoC和AOP,接下来我们一起来学习Spring MVC。这篇文章带你快速入门Spring MVC。

Spring MVC概述

Spring MVC是目前主流的实现MVC设计模式的框架,是Spring框架的一个分支产品,以Spring loC容器为基础,并利用容器的特性来简化它的配置。Spring MVC相当于Spring的-一个子模块,可以很好的和Spring结合起来进行开发,是Java Web开发者必须要掌握的框架。

什么是MVC设计模式?

将应用程序分为Controller Model View 三层,Controller 接收客户端请求,调用Model生成业务数据,传递给View,Spring MVC就是对这套流程的封装,屏蔽了很多底层代码,开放出接口,让开发者可以更加轻松、便捷地完成基于MVC模式的Web开发。

MVC核心组件

  • DispatcherServlet: 前置控制器,是整个流程控制的核心,控制其他组件的执行,进行统一调度,降低组件之间的耦合性,相当于总指挥。

  • Handler: 处理器,完成具体的业务逻辑,相当于Servlet 或Action。

  • HandlerMapping: DispatcherServlet 接收到请求之后,通过HandlerMapping将不同的请求映射到不同的Handler。

  • HandlerInterceptor: 处理器拦截器,是-一个接口,如果需要完成- -些拦截处理, 可以实现该接口。

  • HandlerExecutionChain: 处理器执行链,包括两部分内容: Handler 和HandlerInterceptor (系统会有一个默认的HandlerInterceptor,如果需要额外设置拦截,可以添加拦截器)。

  • HandlerAdapter: 处理器适配器,Handler执行业务方法之前,需要进行- -系列的操作,包括表单数据的验证、数据类型的转换、将表单数据封装到JavaBean等,这些操作都是由HandlerApater来完成,开发者只需将注意力集中业务逻辑的处理上,DispatcherServlet 通过HandlerAdapter执行不同的Handler。

  • ModelAndView: 装载了模型数据和视图信息,作为Handler的处理结果,返回给DispatcherServlet。

  • ViewResolver: 视图解析器,DispatcheServlet 通过它将逻辑视图解析为物理视图,最终将渲染结果响应给客户端。

Spring MVC的工作流程

  • 客户端请求被DisptacherServlet接收。

  • 根据HandlerMapping映射到Handler。

  • 生成Handler和HandlerInterceptor。

  • Handler 和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DisptacherServlet。

  • DispatcherServlet 通过HandlerAdapter调用Handler的方法完成业务逻辑处理。

  • Handler 返回一个ModelAndView给DispatcherServlet。

  • DispatcherServlet将获取的ModelAndView对象传给ViewResolver视图解析器,将逻辑视图解析为物理视图View。

  • ViewResovler 返回-个View给DispatcherServlet。

  • DispatcherServlet 根据View进行视图渲染。

  • DispatcherServlet 将渲染后的结果响应给客户端。

创建第一个Spring MVC项目

前面我们讲了这么多的理论,看起来非常的复杂,其实,在我们实际开发中,Spring MVC使用起来还是比较简单的,其中很多的过程Spring都会自动去处理好。下面我们就来创建自己的第一个Spring MVC项目。

1.创建一个maven项目

这里创建maven项目不同于我们之前,这里需要勾选Create from archetype并选择archetype-webapp,后面就很简单,一路next下去就ok。

创建项目之后,需要稍等几分钟下载一些依赖。

创建完成之后就是这么个目录结构。webapp包中存放的是webapp的一些组件。

在main目录下创建java文件夹用于存放Java代码,然后右键点击java文件夹。

2.在pom.xml中引入spring-webmvc依赖

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.3.15</version>
</dependency>b
复制代码

3.spring.xml配置

<!-- 自动扫描 -->
<context:component-scan base-package="com"></context:component-scan>

<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>
复制代码

自动扫描我们应该比较熟悉,之前在AOP中有配置过。

这个视图解析器呢实际上就是相当于把逻辑视图解释成物理视图,这么说可能比较抽象。比如我们一个方法返回了一个homepage,我们这时需要将homepagehomepage.jsp匹配起来,我们就需要配个前缀和后缀,prefixsuffix分别就是前缀和后缀的意思。前缀是在homepage前面写的/ 表示根目录,后缀即写在homepage后面的就是.jsp

4.在web.xml中配置DispatcherServlet

<servlet>
  <servlet-name>dispatcherServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>dispatcherServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
复制代码

5.创建Handler

在java文件下创建一个包,我的包名为com.controller,包下创建FirstHandlerjava文件。

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class FirstHandler {

    @RequestMapping("/homepage")
    public String homepage(){
        System.out.println("打开homepage");
        return "homepage";
    }
}
复制代码

代码解析

@Controller注解与@Component注解类似,都是将类交给IoC容器来进行管理,但与@Component不同的是,@Controller多了一个控制器的功能。

homepage()就是我们的业务方法,这时我们需要将业务方法和控制器关联起来,我们就需要用到 @RequestMapping注解参数为"/homepage",这样在我们在浏览器中访问http://localhost:8080/homepage的时候,我们就能执行homepage()方法,这个方法又返回一个"homepage"相当于一个逻辑视图,这样再配合我们前面配置的视图解析器就能找到我们的homepage.jsp文件了。

6.创建homepage.jsp文件

<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <h1>HelloWorld</h1>
    </body>
</html>
复制代码

这样我们Spring MVC的基本环境就配置好了,接下来要运行我们的项目就需要配置tomcat。

配置tomcat

1.首先,我们点击ADD Configurations,如图所示:

2.然后,点击左上角的+号。

3.在左侧边栏中找到Tomcat Server并点击Local。

4.点击Deplyment,再点击+号,将项目war包添加进来。

5.修改Application context。

我们去掉后面的直接访问根目录。然后点击Apply和ok就可以了。

启动项目

运行项目,然后我们在浏览器中访问http://localhost:8080/homepage就能看到我们的页面了。

这样我们就完成了Spring MVC的基本的环境搭建。

对Spring MVC感兴趣的小伙伴们支持一下,后面的内容我会持续更新。

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

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

相关文章

Fabric.js 铅笔笔刷

本文简介 点赞 关注 收藏 学会了 fabric.js 的铅笔其实是继承基础画笔的一个工具&#xff0c;在基础画笔的基础上多了“拐角平滑度”等配置项。 本文讲解铅笔的基础用法以及常用事件。 常规配置 真实世界的铅笔有不同的型号&#xff0c;颜色的深浅、笔芯的硬度都是不同的…

90后,27岁转行软件测试,从月入3000+到月薪过万,打开了人生新篇章~

承蒙时光不弃&#xff0c;感谢努力的自己。以前总是在某些鸡汤文中看到这句话&#xff0c;当时觉得过于矫情&#xff0c;而如今当我突破重重困难成功转行&#xff0c;收获了更好的人生后&#xff0c;才发自内心的也有了这样的感叹。 几个月的努力和辛劳&#xff0c;一时之间难以…

转互联网好难,如何避免无效转行?

如果你现在是在传统行业工作&#xff0c;想转行互联网&#xff0c;应该怎么做呢&#xff1f; 很多人经常会担心自己的行业、专业、年龄等等会是障碍&#xff0c;或者自己没有经验&#xff0c;去面试的时候公司却都需要相关经验的人&#xff0c;怎么办呢&#xff1f; 这篇文章…

图形驱动软件栈

图形驱动软件栈 HINZER&#xff0c;2022年&#xff0c;我在北京。芯片设计行业&#xff0c;GPU 固件和驱动开发&#xff0c;对嵌入式系统感兴趣。 1 说明背景 1.1 近来想法 做了一段时间的 GPU 固件和驱动开发&#xff0c;加上平时学习的一些零散的知识&#xff0c;最近打算整…

【Web前端HTML5CSS3】06、盒模型

六、盒模型 1、文档流&#xff08;normalflow&#xff09; 网页是一个多层的结构&#xff0c;一层摁着一层 通过 CSS 可以分别为每一层来设置样式&#xff0c;作为用户来讲只能看到最顶上一层 这些层中&#xff0c;最底下的一层称为文档流 文档流是网页的基础我们所创建的元…

牛客java刷题知识点总结(八)

方法调用 类中变量&#xff1a; 除了private权限外&#xff0c;其他权限的变量&#xff08;没有表示默认default&#xff09;&#xff0c;均可以用“对象.变量名”来调用。对于private变量&#xff0c;即使使用static&#xff0c;也不能用“类.变量名”来调用私有变量。只能通过…

UID走私:一种在线跟踪用户的新技术

©网络研究院 几十年来&#xff0c;广告商和网络追踪者已经能够在用户访问的所有网站上汇总用户信息&#xff0c;主要是通过在用户的浏览器中放置第三方cookies。 两年前&#xff0c;几个优先考虑用户隐私的浏览器开始默认屏蔽所有用户的第三方cookies。 对于那些代表其…

2022年转行编程选哪门语言?这份报告给你答案!

本报告展示了 JetBrains &#xff08;IntelliJ IDEA的开发公司&#xff09;于2021年进行的第五次年度开发者生态系统调查的综合结果。来自 183 个国家或地区的 31,743 名开发者帮助我们绘制了开发者社区版图。 本文将摘录部分个人觉得有价值的报告&#xff0c;从全球视角以国内…

AI-多模态-2021:Stable Diffusion【根据文本生成图像】【开源】【目前开源模型中最强】

最近大火的Stable Diffusion也开源了(20220823); 我也本地化测试了一下效果确实比Dall-E mini强太多了&#xff0c;对于我们这些玩不上Dall-E2的这个简直就是就是捡钱的感觉&#xff0c;当然后期跑起来&#xff0c;稍微不注意显存就炸了。 这里我写一下安装过程&#xff0c;具…

Fabric.js 限制边框宽度缩放

本文简介 点赞 关注 收藏 学会了 使用 fabric.js 在某些情况下你可能需要固定元素边框的宽度&#xff0c;仔细看文档你会发现 fabric.js 已经为我们提供了这个功能。本文简单介绍一下这个功能。 实现方法 先揭晓答案&#xff0c;将元素的 strokeUniform 属性设置为 true 后…

适合贵校的核心营销讯息

香港 (Xinwengao.com) — 优秀的学校具备策略来提升形象、提高学生的成功率、改善收生&#xff08;和重新入学&#xff09;的成果。这包括为你的学校定下营销讯息。大多数学校都具备自己的营销策略&#xff0c;但很少有营销讯息。一个有力的营销讯息可大大地支援营销策略。 即…

避坑细节拉满!阿里p8技术官私传:MyBatis源码全解析,全彩版附代码分享

摘要 MyBatis是一款优秀的持久层框架&#xff0c;它支持自定义SQL&#xff0c;存储过程以及高级映射&#xff0c;越来越多的企业已经将MyBatis使用到了正式的生产环境&#xff0c;而国内Mybatis流行的原因就在于绝大部分项目都是面向表结构编程的&#xff0c;把Java对象仅当成…

【敏捷研发系列】前端DevOps流水线实践

一、背景现状 软件开发从传统的瀑布流方式到敏捷开发&#xff0c;将软件交付过程中开发和测试形成快速的迭代交付&#xff0c;但在软件交付客户之前或者使用过程中&#xff0c;还包括集成、部署、运维等环节需要进一步优化交付效率。因此Devops的产生将敏捷的相关理念扩展到运…

认识操作系统

操作系统 1 OS 简史 1.1 批处理操作系统 1946-02-04 世界上第一台公认的通用计算机ENIAC在 宾夕法尼亚大学 诞生。1956 年实现 GM-NAA I/O 系统具备批处理特性。 1.2 从专用走向通用 1964 年&#xff0c;美国IBM公司发布 IBM System/360 的大型机。将计算机架构和实现分开…

【Java入门基础第10天】Java常用的转义字符

Java常用的转义字符1、\t:一个制表位,实现对齐功能2、\n:换行符3、\\:转义字符 一个4、\":一个"5、\:一个6、\r:一个回车 System.out.println("学刑法\r有钱途")7、应用实例(Exercise&#xff09;1、\t:一个制表位,实现对齐功能 \t:一个制表位,实现对齐功…

从文科生到前端专家 - 在转行时我想过的问题

▐ 在学习编程之前 在高中时&#xff0c;因为学不会物理和化学&#xff0c;我选择了文科&#xff0c;这也意味着计算机专业类对我关上了大门&#xff0c;不过在当时我也没有想到自己在未来会喜欢上写代码并以此为生。 现在回想起来&#xff0c;与编程有关的只有两件事情。 一是…

java学习day65(乐友商城)实现搜索、分页、排序

1.索引库数据导入 昨天我们学习了Elasticsearch的基本应用。今天就学以致用&#xff0c;搭建搜索微服务&#xff0c;实现搜索功能。 1.1.创建搜索服务 创建module&#xff1a; Pom文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <…

【软件测试】瓶颈?资深测试聊测试开发的瓶颈在哪?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试开发的发展是不…

嵌入式C语言面向对象编程 --- 封装

大部分使用 C 语言进行开发的工程师,在接触更高级的编程语言之前,都认为 C 语言是面向过程的。事实也是如此,对于一些小规模的单片机应用程序,一般都是使用“面向过程”的思维进行单片机C语言编程开发。 但是,如果是需要用C语言开发一些规模比较大的软件的时候,比如操作…

pycharm 中sqlite升级方法

sqlite 3.21升级到3.40 Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> help Type help()…