Spring Boot2.0之注解方式启动Springmvc

Spring Boot下Spring MVC框架的启动原理——SpringBoot应用的启动过程——万字长文 文章目录1:创建 SpringApplication1.1 创建 SpringApplication过程的源码调试1.2 创建 SpringApplication过程的源码解读1.2.1 推断是否是Web环境1.2.2 通过spring工厂设置应用组件1.2.3 推断main方法所在的启动类2:运行 SpringApplication2.1 应用环境的创建与准备2.2 应用上下文的创建(创建IOC容器)2.3 应用上下文的准备(准备IOC容器的基本信息)2.4 应用上下文的刷新(刷新IOC容器) Spr 阅读详情

Spring Boot2.0之注解方式启动Springmvc

回顾下springmvc原理图:

 

 

DispatcherServlet是Spring MVC的核心,每当应用接受一个HTTP请求,由DispatcherServlet负责将请求分发给应用的其他组件。

在旧版本中,DispatcherServlet之类的servlet一般在web.xml文件中配置,该文件一般会打包进最后的war包种;但是Spring 3引入了注解,我将要介绍,如何基于注解配置Spring MVC。

 

1、Spring mvc无配置文件夹,采用注解方式启动。

     把配置的内容 转换为 Java代码

步骤: 

1、加载Spring容器 加载dispatcherservlet

  tomcat只要读到这几个类,就可以帮助初始化了

配置文件代码和pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.toov5.springbootmvc</groupId>
  <artifactId>springbootmvc</artifactId>
  <version>0.0.1-SNAPSHOT</version>
 <dependencies>
		<!--Java语言操作tomcat -->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-core</artifactId>
			<version>8.5.16</version>
		</dependency>
		<!-- spring-web -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>5.0.4.RELEASE</version>
			<scope>compile</scope>
		</dependency>
		<!-- spring-mvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.0.4.RELEASE</version>
			<scope>compile</scope>
		</dependency>
		<!-- tomcat对jsp支持 -->
		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>tomcat-jasper</artifactId>
			<version>8.5.16</version>
		</dependency>
	</dependencies>
  
</project>

  

加载SpringMVC容器

正如可以通过多种方式配置DispatcherServlet一样,也可以通过多种方式启动Spring MVC特性。原来我们一般在xml文件中使用<mvc:annotation-driven>元素启动注解驱动的Spring MVC特性。

package com.toov5.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

/*
 * spring mvc的配置信息
 * 
 */
@Configuration   //表示配置
@EnableWebMvc   //开启springmvc功能 扫包 视图转换 拦截器
@ComponentScan("com.toov5.controller")  //扫controller包 类似与传统的配置中 开启扫包模式那段xml配置
public class WebConfig extends WebMvcConfigurerAdapter {
  
    //需要配置视图器
    // 创建SpringMVC视图解析器
        @Bean
        public ViewResolver viewResolver() {
            InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
            viewResolver.setPrefix("/WEB-INF/views/");
            viewResolver.setSuffix(".jsp");
                //可以在JSP页面中通过${}访问beans
            viewResolver.setExposeContextBeansAsAttributes(true);
            return viewResolver;
        }

    
    
}
package com.toov5.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/*
 * 加载非Springmvc 的配置
 * 
 */

@Configuration
@ComponentScan(basePackages = "com.toov5")  //扫整个项目的
public class RootConfig {
    
       
}

加载SpringMVCDispatcherServlet

AbstractAnnotationConfigDispatcherServletInitializer这个类负责配置DispatcherServlet、初始化Spring MVC容器和Spring容器。getRootConfigClasses()方法用于获取Spring应用容器的配置文件,这里我们给定预先定义的RootConfig.class;getServletConfigClasses负责获取Spring MVC应用容器,这里传入预先定义好的WebConfig.class;getServletMappings()方法负责指定需要由DispatcherServlet映射的路径,这里给定的是"/",意思是由DispatcherServlet处理所有向该应用发起的请求。

package com.toov5.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/*
 * 加载springmvc--dispatcherservlet
 * 下面的这个接口 初始化dispatcherservlet
 */
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    // 加载根容器 加载跟配置信息 spring核心 
    protected Class<?>[] getRootConfigClasses() {
        // TODO Auto-generated method stub
        return new Class[] { RootConfig.class };
    }

    // 加载SpringMVC容器 springmvc 加载配置信息
    protected Class<?>[] getServletConfigClasses() {

        return new Class[] { WebConfig.class };  //相当于一个数组里面放了一个Class
    }

    // SpringMVCDispatcherServlet 拦截的请求 /   拦截所有请求
    protected String[] getServletMappings() {

        return new String[] { "/" };
    }

}

 

controller层

package com.toov5.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController //Spring mvc 提供的哈
public class IndexController {
   
    @RequestMapping("/index")
    public String index(){
        return "successful";
    }
    
}
package com.toov5.controller;

import org.springframework.stereotype.Controller;
/*
 * 跳转页面
 * 
 */
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {

    @RequestMapping("/pageIndex")
    public String pageIndex(){
        return "pageIndex";
    }
    
}

tomcat:

package com.toov5;

import java.io.File;

import javax.servlet.ServletException;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;

public class AppTomcat {
    public static void main(String[] args) {
        //使用Java内置tomcat运行spring mvc框架 原理:tomcat加载到spring mvc注解启动方式,就会创建spring mvc容器
        try {
            start();
        } catch (ServletException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (LifecycleException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static void start() throws ServletException, LifecycleException {

        // 创建Tomcat容器
        Tomcat tomcatServer = new Tomcat();
        // 端口号设置
        tomcatServer.setPort(9090);
        // 读取项目路径    这样可以加载到静态资源
        StandardContext ctx = (StandardContext) tomcatServer.addWebapp("/", new File("src/main").getAbsolutePath());
        // 禁止重新载入
        ctx.setReloadable(false);
        // class文件读取地址    启动后 在target生成编译后的class文件
        File additionWebInfClasses = new File("target/classes");
        // 创建WebRoot
        WebResourceRoot resources = new StandardRoot(ctx);
        // tomcat内部读取Class执行
        resources.addPreResources(
                new DirResourceSet(resources, "/WEB-INF/classes", additionWebInfClasses.getAbsolutePath(), "/"));
        tomcatServer.start();
        // 异步等待请求执行
        tomcatServer.getServer().await();

    }
}

启动后:

右键点击项目刷新会出现:

   

这时候是虚拟创建一个tomcat目录,

 

 点进去里面没有class文件,它的class文件全部在内存里面(也可以写到硬盘上)

最后的目录结构:

 

 访问请求 

下面继续完善service层

package com.toov5.service;

import org.springframework.stereotype.Service;

@Service
public class UserService {
 
     public String index(){
         return "successful again";
         
     }    
    
}

controller的修改

package com.toov5.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.toov5.service.UserService;

@RestController //Spring mvc 提供的哈  
public class IndexController {
   @Autowired
   private UserService userService;
    
    
    
    @RequestMapping("/index")
    public String index(){
//        return "successful";
       return    userService.index();
    }
    
}

SpittrWebAppInitializer需要修改:

、

要不扫描不到service的!

启动访问:

 

 

 

 是不是很有趣呀~~~~

 

 

Spring SpringMVC SpringBoot 常用注解说明 Spring SpringMVC SpringBoot 常用注解说明Spring注解与xml配置的区别不使用注解的案例@Autowired@Qualifier@Resource@Service使用注解来构造IoC容器@Component@Controller@Service@ RepositorySpring常用注解汇总Spring MVC@Controller@RequestMapping使用 ... 阅读详情

相关推荐

2-2. SpringBoot API开发详解 --SpringMVC注解+封装结果+支持跨域+打包

通过上文,我们实战基于Maven的方式,完成了三层架构的搭建! 重点掌握的是如何规范的创建Maven项目、如何统一管理依赖版本。 本文,将基于上文搭建的三层架构,开始创建SpringBoot项目,并进行API开发,最终输出给前端两个API:分别基于GET和POST 请求。 从实现层面:会结合实战 解读SpringMVC常用注解的使用,并实现 API结果统一封装、 支持跨域请求,以及 多Jar如何打包。 从规范层面:会结合实战 把 三层架构 都串起来,包括各层的命名规范和对象职责。

天罡gg的专栏 5805

如何在Spring Boot中使用Spring MVC

一文聊明白在Spring Boot中如何使用Spring MVC的功能。

BugMan的博客 5601

Qt Installer Framework4.6.1的最基础使用1(win10+离线安装包 )

因工作需要,win程序发布后,打包成一可执行exe文件,且兼容win7系统笔者记录了一些关键要点,供有需要的小伙伴使用。

aggs1990的专栏 904

springboot中使用springmvc

1.导入mvc的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 2.启用springmvc,使用注解@EnableWebMvc 如果你想diy一些定制化功能,只要写这个组

richer__的博客 1272

R语言笔记十:独立性检验函数

1.独立性检验函数        独立性检验是根据频数信息判断两类因子彼此相关或相互独立的假设检验。所谓独立性就是指变量之间是独立的,没有关系。 独立性检验算法:卡方检验、Fisher检验、Cochran-Mantel-Haenszel检验 2.假设检验 假设检验(Hypothesis Testing)是数理统计学中根据一定假设条件由样本推断总体的一种方法。 原假设——没有发生 备择假设——发生了 具体做法:根据问题的需要对所研究的总体作

weixin_44384631的博客 4111

Western blot (WB) 灰度分析进阶指南:ImageJ 高效定量技巧与实战优化

本文详细介绍了使用ImageJ进行Western blot灰度分析的进阶技巧,包括批量处理、背景校正和疑难条带处理等实战优化方法。通过自动化宏脚本和动态背景校正,显著提升分析效率和准确性,特别适合科研人员处理复杂WB数据。

weixin_42557830的博客 901

Springboot整合MVC进阶篇

WebMvcConfigurer接口是Spring提供的一个用于自定义Spring MVC配置的接口,主要提供了WebMvcConfigurer接口是Spring提供的一个用于自定义Spring MVC配置的接口,主要提供了多个回调方法,包括添加或修改Spring MVC的配置,如添加拦截器,自定义消息转换器等。- configurePathMatch(S):此方法用于配置路由请求规则。- configureContentNegotiation(S):该方法用于内容协商配置。

qq_62377885的博客 3395

浅谈声发射振动复合传感器

浅谈声发射振动复合传感器 随着全球经济和自动化工业的迅速发展,人们对设备故障特别是轴承类的故障诊断也日益重视起来了。 为满足客户对旋转仪器轴承异常的精准诊断,单一的依靠振动信号或声信号分析,是很难兼顾轴承的多种异常情况的。 为此,市面上开始着手研发出了可同时分析机械设备的振动信号和声信号的复合型传感器。 初期的复合型传感器主要有 2 种类型,下面以 A、B 来举例说明。 A 型是在被测物表面不同的 2 个位置分别放置声发射(AE)传感器和加速度(ACC)传感器,它虽能一定程度...

pxtech的博客 1152

Spring Boot 中使用 Spring MVC基础

详细讲解了SpringMVC在SpringBoot中的基础知识

???? 2060

模糊控制 (Fuzzy Control) 算法详解及案例分析

模糊控制是一种基于模糊逻辑的控制策略,其核心思想是通过模糊规则和模糊推理实现对复杂系统的控制。模糊控制不依赖于精确的数学模型,而是通过模拟人类的决策过程来处理不确定性和非线性问题。

闲人编程的博客 3657

数据处理和分析之数据聚类:层次聚类(Hierarchical Clustering):单链接层次聚类方法

单链接层次聚类(Single-Linkage Hierarchical Clustering)是凝聚型层次聚类的一种,它基于数据点之间的最小距离来定义聚类间的相似性。在单链接层次聚类中,两个聚类之间的距离定义为这两个聚类中任意两个数据点之间的最短距离。这种聚类方法倾向于形成链状或线性的聚类,因为聚类的边界是由最远的数据点决定的,而不是聚类的平均或中心位置。单链接层次聚类通过计算簇间最近点的距离来决定簇的合并,这种方法简单直观,但可能导致簇的形状不规则,尤其是在数据点分布不均匀的情况下。

2401_87715305的博客 1443

新人一看就懂:Spring Boot+Spring mvc+Mybatis的基础框架demo

Spring Boot的设计目的是来简化新Spring应用的初始搭建以及开发过程,大大减少了代码量,通过这篇文章你可以清楚的看到。这是一个基于Spring Boot的简单demo,希望读者可以通过这篇文章大概能看懂这一个简单的框架搭建。后续我会陆续更新,微服务架构(Spring Boot、Spring Cloud)、分布式架构(Dobbo+Zookeeper)、大数据架构以及源码解析等相关的文章,感兴趣的话可以关注一下。

程序员云帆哥的博客 2万+

Spring-AI 第 17 章 - 飞书机器人接入详解

✅ Stream 长连接(官方 SDK)✅ AI 对话(支持工具调用)✅ 消息接收与回复✅ 天气查询✅ 数据库查询✅ 数学计算✅ 事件去重Stream 长连接模式:使用官方 SDK 建立 WebSocket 长连接,服务器主动连接飞书,无需公网 IP消息处理流程:接收消息 → 解析内容 → AI 处理 → 回复用户AI 工具调用:接入 FunctionTools,支持天气、计算、日期、数据库查询等多种工具。

AppBlog.CN全栈架构 211

SpringBoot框架之注解方式启动SpringMVC容器

纯手写SpringBoot框架之注解方式启动SpringMVC容器 上一篇,使用Java语言创建Tomcat容器,并且通过Tomcat执行Servlet,接下来,将会 使用Java语言创建创建SpringBoot内置Tomcat,使用注解方式启动SpringMVC容器。 代码实现。 1.pom.xml文件,需要依赖的jar包。 <dependencies> &l...

September的博客 1426

华为OD机试真题 新系统2026-04-15 C++ 实现【失灵的键盘】

有一个键盘有2个按键失灵了,按下这些键时会连续输出其他键对应的字符两次。具体如下: 1. 按下j键一次,屏幕上显示uu(两个连续的u);  按下b键一次,屏幕上显示t(两个连续的t) 2. u键和t键是好的,按下u键一次时,屏幕只会显示一次u(正常按键);按下t键一次时,屏幕只会显示一次t(正常按键) 3. 假定屏幕上连续显示两个t一定是按了一次b键,而不是两次t键;假定按键t之后不会紧接着按键b,即tttt转义为两个b,而不可能是tb

MISAYAONE的博客 211

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Spring boot的最全注解

在springboot实际开发中常用的注解总结

Java小白的博客 致力分享每一天学到的知识 928

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

spring boot2.0 集成SpringMVC

修改SpringMVC端口、地址 application.properties server.port=8099 server.servlet.context-path=/web01 设置配置项(前缀+类变量名)到application配置文件中 整合SpringMVC静态资源 http://localhost:8099/web01/js/jquery-2.2.3.min.js (1)static目录的作用是什么? 类型webapp,存放静态资源的,如css,js,image 该目录下的资源可以直接

lanshizizhong的博客 180

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring BOOT基本内容及SpringMVC

AOP (Aspect Orient Programming),直译过来就是 面向切面编程,AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向切面编程,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术。AOP可以拦截指定的方法并且对方法增强,而且无需侵入到业务代码中,使业务与非业务处理逻辑分离,比如Spring的事务,通过事务的注解配置,Spring会自动在业务方法中开启、提交事务,并且在事务处理失败时,执行相应的回滚策略。

m0_63236762的博客 1065

spring,springMVC,springBoot常用注解

spring常用注解 spring原始注解 **目的:**代替Spring的<Bean>的配置 声明bean的注解 说明 @Component 使用在类上用于实例化Bean @Repository 使用在Dao层类上用于实例化Bean @Service 使用在Service层类上用于实例化Bean @Controller 使用在Web层类上用于实例化Bean(SpringMVC中会讲到) @Autowired 使用在字段上用于根据类型依赖注入 @Quali

咖啡味的小认真 821

Spring Boot 中自定义 SpringMVC 配置,到底继承谁?

总的来说,面试是有套路的,一面基础,二面架构,三面个人。最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!频等。希望也能帮助想进大厂的朋友**[外链图片转存中…(img-RRe8QmpR-1713292309041)][外链图片转存中…(img-Br6GumEZ-1713292309041)]

2401_83329718的博客 816

Spring Boot2(Spring Boot 的Web开发 springMVC 请求处理 参数绑定 常用注解 数据传递 文件上传)

总结:只要静态资源放在类路径下:一启动服务器就能访问到静态资源文件springboot只需要将图片放在 static 下 就可以被访问到了总结:只要静态资源放在类路径下: called /static (or INF/resources访问:当前项目根路径/ + 静态资源名静态资源访问前缀enjoy模板引擎四个步骤:1.加坐标2.开启配置在configure包下新建配置类 官网可以复制3.将页面保存在templates目录下4.编写代码逻辑加坐标 写配置类。

Stringzhua的博客 1026

Spring + SpringBoot史上最全的注解说明

有了元注解,那么我就可以使用它来自定义我们需要的注解。结合自定义注解和AOP或者过滤器,是一种十分强大的武器。比如可以使用注解来实现权限的细粒度的控制——在类或者方法上使用权限注解,然后在AOP或者过滤器中进行拦截处理。

好技术,多分享 1211

Spring最常用的36个注解,哪些你还不知道?

随着技术的更新迭代,Java5.0开始支持注解。而作为java中的领军框架spring,自从更新了2.5版本之后也开始慢慢舍弃xml配置,更多使用注解来控制spring框架。 而spring的的注解那么多,可能做java很多年,都用不上。这里按照类型总结了这7种最常用的注解。 另外整理了一份java的资料。内容包含有:Spring,Dubbo,MyBatis, RPC,源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。 需要的朋友可以点击:这个!点这个,暗号:csdn。 一.

程序员Monkey的专栏 3716

专项攻克——spring、springMVC、springBoot、springCloud的启动流程

参考文献:https://blog.csdn.net/m0_47495420/article/details/114422268?

军威兄的博客 234
上一篇: Spring Boot2.0之 原理—创建内置Tomcat容器
下一篇: 多线程快速入门
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值