SpringMVC新版本(Spring 5.3.0)官网详解(一)

spring基于5.3.0GA版本-笔记 Spring 框架的作用:解耦和(降低耦性) 形成生态(让更多的人用或者使用的人很多,说明这个东西很好) 一、spring初识 1.1、框架 人话: 举个例子,现在的楼盘都相当于毛坯房,我们买到的毛坯房都是一模一样的,这个毛坯房就相当于框架,我们可以添加东西,让他具备一定的风格。不同的人有不同的装修风格,所以毛坯房都一样,但是装修风格不同,所得到的成品就不同,简单来说,就相当一件房子的模型已经固定好了,你可以随意往里面添加东西。看自己具体怎么设计。 切换到我们所编写的应用来说,所依赖的固定的东西,别人已经给 阅读详情

前言

Spring MVC是Spring框架中一个非常基础又核心的理念。笔者相信大多数同学都用过,但是如果被深究起来恐怕还是说不出来什么具体的东西。这篇文章将会统一的说下什么是Spring MVC,以及在较新版本中一个Spring MVC的框架应该怎么去搭建。本篇将会给大家带来一篇纯Java版本的Spring MVC教程。更多Spring内容进入【Spring解读系列目录】。

MVC 和 Spring MVC

为了照顾新人,就先说一下MVC和Spring MVC的区别。MVC是模型(model)-视图(view)-控制器(controller)的缩写,可以说是一个非常经典的软件设计的概念。Spring MVC是这种概念的一个实现,Spring公司基于这种MVC的概念开发出来Spring MVC用于形成一个规范,并提供相应的API和Plugin完成Spring公司定义的MVC模型,不得不说Spring MVC这个实现确实非常的厉害。曾经风靡一时的Struts 2也是MVC的模型之一,只不过慢慢的被Spring MVC替代掉了。一个是概念,一个是具体的实现。

Spring MVC的依赖

既然说到Spring MVC就必然少不了Spring公司提供的各种依赖包。下面就是搭建一个Spring MVC必要的maven依赖。只要这三个在porm.xml里就够了,因为Maven会自动把其他的依赖导入进来。

<!--Spring 上下文包,核心包之一-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>
<!--Spring web依赖,DispatcherServlet就在这个里面-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>
<!--servlet依赖,为了在编译时期让Spring获取Servlet,很重要-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

老版本环境配置基于XML

在老版本中,搭建一个Spring MVC一般需要在web.xml中配置DispatcherServlet对请求URL进行解析。为了让Spring能够感知到DispatcherServlet我们一般还会配置一个ContextLoaderListener,在这个之后一般还有一个Filter,其实从这个配置顺序也能看出来整个Web项目的启动顺序:ContextLoaderListener>Filter>DispatcherServlet。大概类似于下面【官网】上的配置。

<!--以下内容来自官网-->
<web-app>  
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/app-context.xml</param-value>
</context-param>
    <servlet>
        <servlet-name>app</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>app</servlet-name>
        <url-pattern>/app/*</url-pattern>
    </servlet-mapping>
</web-app>

那么项目里配置的ContextLoaderListener是干嘛用的呢?就是用于解析Spring.xml,就是上面的app-context.xml。对应在Java程序中使用的解析器就是ClassPathXmlApplicationContext,利用classpath下面的xml初始化应用程序的上下文。如果使用的是注解那么就是AnnotationConfigApplicationContext,利用注解的配置去初始化应用程序的上下文。当Spring环境被实例化以后,才会执行DispatcherServlet。

新版环境配置基于Java

新版SpringMVC官网中已经对此做了更新的解读,以下英文部分摘自官网。

Spring MVC, as many other web frameworks, is designed around the front controller pattern where a central Servlet, the DispatcherServlet, provides a shared algorithm for request processing, while actual work is performed by configurable delegate components. This model is flexible and supports diverse workflows.

Spring MVC也是围绕着前端Controller模式设计的,它的中心控制器(也就是DispatcherServlet)为请求处理提供了一个分享算法,实际的工作是由配置的委托组件坐的。还支持不同的工作流。

The DispatcherServlet, as any Servlet, needs to be declared and mapped according to the Servlet specification by using Java configuration or in web.xml. In turn, the DispatcherServlet uses Spring configuration to discover the delegate components it needs for request mapping, view resolution, exception handling, and more.

根据Servlet的规范,DispatcherServlet需要被声明并且映射到Java配置文件或者web.xml里面。然后DispatcherServlet 就能够使用Spring配置去完成发现委托组件去完成请求映射,视图解析,异常处理等等功能。

The following example of the Java configuration registers and initializes the DispatcherServlet, which is auto-detected by the Servlet container (see Servlet Config):

上面废话了一堆,终于到了实用的地方了。一个官方提供的Java Sample来展示怎么样使用一个Java的配置去完成DispatcherServlet的注册和初始化的,而且可以自动被Servlet容器探测到:

public class MyWebApplicationInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) {
        // Load Spring web application configuration
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.register(AppConfig.class);
        // Create and register the DispatcherServlet
        DispatcherServlet servlet = new DispatcherServlet(context);
        ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet);
        registration.setLoadOnStartup(1);
        registration.addMapping("/app/*");
    }
}

简单来说,新的Spring官网希望用户自己写一个初始化类并且实现WebApplicationInitializer里面的onStartup()方法去完成一个Spring-Web项目的初始化。也就是说当实现onStartup()的时候,Spring容器会自动把所有的Web环境调用起来。

Spring MVC Sample

既然Spring已经把话放出来了,那么就写一个例子去验证下怎么用的,根据官网介绍和以前的经验我们应该有如下的事情要做。

  1. 初始化Spring Context。
  2. 添加一个 DispatcherServlet。

根据以往经验和刚刚学习的知识,添加DispatcherServlet有下面三种方法。

  • a. 在web.xml中添加。
  • b. @WebServlet,直接在Servlet添加这个注解,就会被认为是一个Servlet。
  • c. 直接new添加DispatcherServlet扔给Tomcat,本篇博客主要介绍的内容。

WebApplicationInitializer

既然知道要创建这个类,那么就把它创建出来。

public class MyWebApplicationInitial implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
	    //这里注意是WebApplicationContext,和之前的博客里的类不一样了
        AnnotationConfigWebApplicationContext anno=new AnnotationConfigWebApplicationContext();
        //稍后在创建配置类AppConfig
        anno.register(AppConfig.class);
        anno.refresh();
        //new出来DispatcherServlet,并且把上下文传给DispatcherServlet
        DispatcherServlet servlet=new DispatcherServlet(anno);
        //构建一个动态注册器
        ServletRegistration.Dynamic registration = servletContext.addServlet("myDS", servlet);
        //配置load-on-startup大于等于0即可
        registration.setLoadOnStartup(1);
        //添加一个mapping
        registration.addMapping("/");
    }
}

AppConfig

做完了以后,根据官网所说,还需要添加一个AppConfig的配置类,顺带把视图解析器一起配置进去。

@ComponentScan("com.demo")
@Configuration
public class AppConfig {
    @Bean //配置视图解析器
    public InternalResourceViewResolver internalResourceViewResolver(){
        InternalResourceViewResolver internalResourceViewResolver=new InternalResourceViewResolver();
        //配置前缀
        internalResourceViewResolver.setPrefix("/");
        //配置后缀
        internalResourceViewResolver.setSuffix(".jsp");
        return internalResourceViewResolver;
    }
}

测试用Controller

@Controller
public class IndexController {
    @RequestMapping("/index")
    public String index(){
        System.out.println("------------");
        return "index";
    }
}

构建一个Controller用来测试搭建的Spring MVC是否可用。为什么这里写index是因为,创建Maven-Web项目会自带一个index.jsp文件。

配置运行环境

既然要测试至少要有一个服务器吧,所以直接加载内置的就可以了,porm文件添加Tomcat插件。

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
</plugin>

配置好运行器Configurations。
在这里插入图片描述
启动Tomcat,访问http://localhost:8080/项目名字/index,完成Spring MVC的配置。
在这里插入图片描述

总结

到目前为止Spring MVC纯Java配置就完成了,也顺便解析了为什么以往的项目中为什么要配置ContextLoaderListener和DispatcherServlet以及其里面的内容。如果各位同学读过前几版的Spring官网,其实可以看到Spring公司一直在进行着去XML的过程。其实还有一个问题,那就是为什么Tomcat启动后会执行Spring中的onStartup()方法对整个外部项目进行初始化?这对于这个问题会在下一篇【SpringMVC新版本(Spring 5.3.0)官网详解(二)源码探究】中从源码中探究这个问题。

附:load-on-startup的作用

上面Java程序中,配置load-on-startup大于等于0,代表着是否需要启动时实例化并加载这个Servlet,可能伴随着调用初始化方法init()。等价于下面在xml中配置的<servlet>标签。

<servlet>
		<servlet-name>myDS</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param/>
		<load-on-startup>1</load-on-startup>
</servlet>

load-on-startup的值一般是整数,当其>=0时代表启动时加载这个Servlet;当<0或者没有配置,表示当前Servlet只有被使用时才会去加载。数值代表着优先级,数字越小代表优先级越高。优先级越高代表着Servlet被越早的加载出来。要注意的是,这里不是加载时间而是加载的顺序。一般情况下可以用这个参数去调整整个项目的Servlet的加载顺序,由于目前大多数的Web开发使用Springboot,相当于把这些内容交给Spring容器去管理。这里是为了展示Spring MVC知识点才会涉及到,实际编程很可能看不到这些配置。

SpringMVC(看这一篇就够了) MVC全称Model View Controller,是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分:Model(模型):指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中,JavaBean对象,业务模型等都属于Model。View(视图):用于展示模型中的数据的,一般为jsp或html文件。Controller(控制器):是应用程序中处理用户交互的部分。接受视图提出的请求,将数据交给模型处理,并将处理后的结果交给视图显示。 阅读详情

相关推荐

springboot+spring+springmvc+mybatis详解

再三注意:   在阅读本文之前务必配置Gradle环境。 gradle倒入jar包教程 在开始之前。我认为有必要提醒。你需要先点击FILE->NEW->OTHERS->Gradle project。如果没有Gradle project说明你没有配置gradle环境。 那么什么是Gradle呢?传统的配置环境过程中,不得不去官网下载所需要的jar包,然后build path手动导入。而

qq_36068028的博客 1万+

spring MVC官网Example的地址

    spring MVC官网Example的地址 https://github.com/SpringSource/spring-mvc-showcase

kanpiaoxue的专栏 495

官方源码 spring-framework-5.3.0.zip

官方源码 spring-framework-5.3.0.zip官方源码 spring-framework-5.3.0.zip

Spring MVC

具体解释可以看官网&gt; https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#spring-web spring MVC 加载过程: spring-web 的META-INFO/services  下面有个配置文件,在spring启动时会加载这个配置文件, 这个配置文件中记录了sp...

u011647020的博客 423

【可不卸载重装】VS2019新建项目里没有CUDA选项

问题:VS2019 新建项目里没有CUDA选项,vs也属性没有cuda。这是因为你在Visual Studio 2019安装之前,先安装了CUDA Toolkit。

qq_62844901的博客 1321

开关电源三大基本拓扑:反激、正激与桥式选型本质

开关电源拓扑是电力电子系统设计的核心基础概念,其本质决定能量传递路径、器件应力分布与系统物理边界。反激拓扑以耦合电感形式实现隔离与升降压,适用于小功率AC-DC场景;正激拓扑依赖实时能量传递与强制复位机制,支撑中功率高效率需求;桥式拓扑(含推挽/半桥/全桥)通过电压应力分摊与双向磁化,成为大功率系统的刚性选择。理解三者在磁芯工作模式、电流连续性、直流偏磁抑制等方面的原理差异,直接关系到效率、温升、EMI及可靠性等关键技术指标。本文聚焦反激、正激、桥式三大工程级基本拓扑的物理本质与落地约束,揭示从需求参数到电

cqwmy840702的博客 377

SpringMVC新版本(Spring 5.3.0)官网详解(二)源码探究

上一篇最后留了一个问题。当启动Tomcat的时候,Tomcat自动去访问了Spring框架中实现了WebApplicationInitializer接口的类。那么这个问题就是Tomcat是怎么知道Spring中有一个实现类去初始化各种Web环境的呢?本篇就从源码里探究一下这个是怎么做到的。

Smallc0de的博客 1060

深入理解Cornerstone3D.js渲染Stack影像数据

这个是调用的core\src下的init.ts的init方法,作用是:初始化cornerstone-core,检测客户端是否支持WebGL,默认情况下是支持中等GPU层级.另外一个重要的是实例化WebWorkManager.WebWorkManager类似于Java的线程池,是用来对Web Worker进行管理的管理器。使用DICOMwebClient获取影像文件的元数据,然后将它们缓存到imageLoader的metaDataManager中,在上面我们可以输出元数据看一下是什么。

wangwei19820517的博客 1493

【最新最全面小白安装】Spring框架部分优点简述及spring-5.2.8.RELEASE-dist.zip下载及导入IDEA详尽流程

Spring框架部分优点简述及安装导入IDEA流程Spring框架的优点Spring MVC 的优点MyBatis的优点spring-5.2.8.RELEASE-dist.zip官网下载流程以Spring和Spring MVC导入IDEA2018.2.5为例 Spring框架的优点 Spring能通过接口而不是类促进好的编程习惯,减少编程代价到几乎为零。 使用Spring构建的应用程序易于单元测试。 以及其他各种优点等着大家学习! Spring MVC 的优点 Spring为展现层提供的基

无痕坚守本心的博客 5103

液晶电视维修必看:TCON逻辑板故障排查全指南(附常见问题解决方案)

本文详细解析了液晶电视TCON逻辑板的工作原理与故障排查方法,涵盖LVDS信号处理、DC-DC电压系统等核心知识。提供从基础测量到高级维修的完整指南,帮助技术人员快速诊断黑屏、竖线等常见故障,并给出预防性维护建议,提升维修效率与成功率。

weixin_42535461的博客 616

unity6000.0.3版本URP下ScriptableRendererFeature如何实现一张自定义贴图效果?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 585

Spring Framework 5.0 入门篇

1.为什么学习Spring?随着对Java EE的不断接触和理解,你会发现Spring 在各个企业和项目中发挥着越来越重要的作用。掌握Spring 已成为我们IT行业生存必学的本领之一。Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发布,也有.NET平台上的移植版本。该框架基于 E...

weixin_34082854的博客 330

构建AI招聘助手:提高人才筛选与匹配效率

人工成本高:传统招聘过程涉及大量的简历筛选和面试安排,需要耗费大量的人力和时间。匹配效率低:简历筛选过程中,人为因素可能导致信息遗漏或误判,影响匹配效果。招聘周期长:从职位发布到最终录用,传统招聘流程往往耗时较长,影响企业业务发展。机器学习(Machine Learning)是一门让计算机通过数据和经验来学习并改进性能的学科。自然语言处理(Natural Language Processing,NLP)是计算机科学领域与人工智能领域中的一个重要方向,旨在让计算机能够理解和解释人类语言。

AI天才研究院 1306

Spring MVC3.0.5搭建全程

用了大半年的Spring MVC3.0,用着感觉不错。简单写一个搭建Spring MVC3.0的流程(以Spring3.0.5为列),数据库交互使用spring JDBC Template,附件有项目(没有jar包)。整个项目架构如下图所示:   1、去官网下载3.0.5所有jar包,所需jar包,见附件图片,每个jar包得用处如下: org.springframewor

uyehgdhg的专栏 788

【系统架构设计师-2023年真题】综合知识-答案及详解

要实现多任务间的协同工作,操作系统必须提供任务间的通信手段。嵌入式操作系统一般都会提供多任务间通信的方法,其中()是任务间最直接、最明显的通信方法,也是访问共享的数据结构,即不同的任务都可以访问同一地址空间。()作为一种更高级的通信方式,能够在同一处理器的各个任务间传递任意长度(理论上只受物理内存和机器字长限制)的信息。(1)A. 共享内存 B. Socket C. 消息传递 D. 信号量(2)A. 共享内存 B. Socket C. 消息传递 D. 信号量【答案】A、C关于星型拓扑结构,下列说法正确的是(

数据知道的博客 1万+

【MATLAB例程】三维下的IMM(交互式多模型),模型使用CV(匀速)和CA(匀加速),滤波使用EKF。附完整代码

CV模型:状态包含位置、速度和零加速度(9维状态),状态转移矩阵忽略加速度项CA模型:完整包含位置、速度和加速度(9维状态),状态转移矩阵包含二次项过程噪声矩阵Q分别根据两种模型的运动特性推导。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 561

01-基于IDEA,Spring官网,阿里云官网,手动四种方式创建SpringBoot工程

01-基于IDEA,Spring官网,阿里云官网,手动四种方式创建SpringBoot工程

欢迎阅读我的博客 1472

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

servlet2.5+Spring5 springMVC5 +Log4J2配置

搞了几乎一天。因为项目用到了spring5,配置Log4J的时候发现spring5少了Log4jConfigListener这个监听器,导致在web.xml里面不能启动log4j,官方建议用log4j2。用的是servlet2.5,所以就需要在web.xml中配置监听器。如果是servlet3的话,直接导入log4J2的jar包就行了,不需要再在web.xml中配置了,因为会自动启动的。log4J...

花2不谢 4524

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

springMvc3.0.5搭建全程

简单写一个搭建Spring MVC3.0的流程(以Spring3.0.5为列),数据库交互使用spring JDBC Template,附件有项目(没有jar包)。整个项目架构如下图所示: 1、去官网下载3.0.5所有jar包,所需jar包,见附件图片,每个jar包得用处如下: org.springframework.aop- 3.0.0.RELEASE--------------

为梦想放生,创造梦一样的未来! 649

Spring5 笔记一

Spring5 笔记一 1. SPRING简介 1.1. Spring作用 Spring封装了创建对象的功能 内部实现机制:框架写了自己的工厂类,读用户的配置文件,然后反射出配置文件中配置的各种对象 Spring是分层的JavaSE/EE应用一站式的轻量级(重量级EJB,SUN公司(Session Bean[控制层], Service Bean[业务层], Persistace Bean[DAO层]))开源框架(官网: http://spring.io/ ),以Ioc(Inverse of control)

qq_47897078的博客 243

很难出错的Spring5(一)—— spring介绍、IOC、HelloSpring

SSM三个框架——SpringMVC、Spring、MyBatis用Spring写代码比用java基础写代码还要轻松!

qq_44886213的博客 117

Servlet3.0与springmvc那些事

官方文档:https://docs.spring.io/spring/docs/5.0.2.RELEASE/spring-framework-reference/web.html#mvc-servlet-context-hierarchy 以前开发web工程:servlet、filter、listener都需要在web.xml进行注册,包括springmvc的前端控制器DispatcherSe...

weixin_34352005的博客 289

spring MVC3.0.5搭建全程

简单写一个搭建Spring MVC3.0的流程(以Spring3.0.5为列),数据库交互使用SpringJdbcTemplate,附件有项目(没有jar包)。整个项目结构如下图所示:    1、去官网下载3.0.5所有jar包,所需jar包,见附件图片,每个jar包得用处如下: org.springframework.aop- 3.0.0.RELEASE----------------

oceansky123的专栏 564

Spring MVC 官网文档阅读笔记(一)

Spring MVC 官网文档阅读笔记(一)22.1 Introduction to Spring Web MVC framework22.1.1 Spring Web MVC的特点22.1.2其他MVC实现的可插拔性22.2 The DispatcherServlet22.2.1 WebApplicationContext中的特殊Bean类型22.2.2默认DispatcherServlet配置...

晨猫 1454
上一篇: Spring源码解析AOP(三)AOP代理的生成
下一篇: SpringMVC新版本(Spring 5.3.0)官网详解(二)源码探究
Smallc0de
博客等级 码龄15年 148粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值