首页 > 其他分享 >腾讯T3-3级资深架构师呕心整理:10万字节springboot教程全解!

腾讯T3-3级资深架构师呕心整理:10万字节springboot教程全解!

时间:2023-07-10 22:31:44浏览次数:47  
标签:10 SpringMVC Spring 配置 T3 JSON 添加 全解 class

前言:

可以毫不夸张地说,这篇文章介绍的 SpringBoot 教程基本已经涵盖你工作中遇到的大部分常用的场景。对于每一个springboot的用法,文中都会都会有详细的教程解释。

腾讯T3-3级资深架构师呕心整理:10万字节springboot教程全解!_spring


本文总共从29个章节,248页PDF,阐述springboot在各种环境下的各种用法,文中给大家列举出部分的springboot教程,需要这份10万字节springboot全教程PDF的朋友,可以点击获取获取教程文档。


腾讯T3-3级资深架构师呕心整理:10万字节springboot教程全解!_JSON_02


纯Java搭建SSM项目

在 Spring Boot 项目中,正常来说是不存在 XML 配置,这是因为 Spring Boot 不推荐使用 XML ,注意,并非不支持,Spring Boot 推荐开发者使用 Java 配置来搭建框架,Spring Boot 中,大量的自动化配置都是通过 Java 配置来实现的,这一套实现方案,我们也可以自己做,即自己也可以使用纯 Java 来搭建一个 SSM 环境,即在项目中,不存在任何 XML 配置,包括 web.xml 。

环境要求:

  • 使用纯 Java 来搭建 SSM 环境,要求 Tomcat 的版本必须在 7 以上。


快速体验

1 创建工程


创建一个普通的 Maven 工程(注意,这里可以不必创建 Web 工程),并添加 SpringMVC 的依赖,同时,这里环境的搭建需要用到 Servlet ,所以我们还需要引入 Servlet 的依赖(一定不能使用低版本的Servlet),最终的 pom.xml 文件如下:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.6.RELEASE</version></dependency><dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope></dependency>


2 添加 Spring 配置

工程创建成功之后,首先添加 Spring 的配置文件,如下:

@Configuration@ComponentScan(basePackages = "org.javaboy", useDefaultFilters = true,
excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes =
Controller.class)})
public class SpringConfig {
}


关于这个配置,我说如下几点:

  •  @Confifiguration 注解表示这是一个配置类,在我们这里,这个配置的作用类似于applicationContext.xml
  • @ComponentScan 注解表示配置包扫描,里边的属性和 xml 配置中的属性都是一一对应的,useDefaultFilters 表示使用默认的过滤器,然后又除去 Controller 注解,即在 Spring 容器中扫描除了 Controller 之外的其他所有 Bean 。


3 添加 SpringMVC 配置

接下来再来创建 springmvc 的配置文件:

@Configuration@ComponentScan(basePackages = "org.javaboy",useDefaultFilters =
false,includeFilters = {@ComponentScan.Filter(type =
FilterType.ANNOTATION,classes = Controller.class)})
public class SpringMVCConfig {
}


注意,如果不需要在 SpringMVC 中添加其他的额外配置,这样就可以了。即 视图解析器、JSON 解析、文件上传......等等,如果都不需要配置的话,这样就可以了。


4 配置 web.xml

此时,我们并没有 web.xml 文件,这时,我们可以使用 Java 代码去代替 web.xml 文件,这里会用到WebApplicationInitializer ,具体定义如下:

public class WebInit implements WebApplicationInitializer {
    public void onStartup(ServletContext servletContext) throws ServletException{
        //首先来加载 SpringMVC 的配置文件
        AnnotationConfigWebApplicationContext ctx = newAnnotationConfigWebApplicationContext();
        ctx.register(SpringMVCConfig.class);
        // 添加 DispatcherServlet
        ServletRegistration.Dynamic springmvc =
servletContext.addServlet("springmvc", new DispatcherServlet(ctx));
        // 给 DispatcherServlet 添加路径映射
        springmvc.addMapping("/");
        // 给 DispatcherServlet 添加启动时机
        springmvc.setLoadOnStartup(1);
   }
}


WebInit 的作用类似于 web.xml,这个类需要实现 WebApplicationInitializer 接口,并实现接口中的方法,当项目启动时,onStartup 方法会被自动执行,我们可以在这个方法中做一些项目初始化操作,例如加载 SpringMVC 容器,添加过滤器,添加 Listener、添加 Servlet 等。

注意:

由于我们在 WebInit 中只是添加了 SpringMVC 的配置,这样项目在启动时只会去加载 SpringMVC 容器,而不会去加载 Spring 容器,如果一定要加载 Spring 容器,需要我们修改 SpringMVC 的配置,在SpringMVC 配置的包扫描中也去扫描 @Confifiguration 注解,进而加载 Spring 容器,还有一种方案可以解决这个问题,就是直接在项目中舍弃 Spring 配置,直接将所有配置放到 SpringMVC 的配置中来完成,这个在 SSM 整合时是没有问题的,在实际开发中,较多采用第二种方案,第二种方案,

SpringMVC 的配置如下:

@Configuration@ComponentScan(basePackages = "org.javaboy")
public class SpringMVCConfig {
}

这种方案中,所有的注解都在 SpringMVC 中扫描,采用这种方案的话,则 Spring 的配置文件就可以删除了。

5 测试

最后,添加一个 HelloController ,然后启动项目进行测试:

@RestControllerpublic class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "hello";
   }
}

启动项目,访问接口,结果如下:

腾讯T3-3级资深架构师呕心整理:10万字节springboot教程全解!_JSON_03


6 其他配置

6.1 静态资源过滤

静态资源过滤在 SpringMVC 的 XML 中的配置如下:

<mvc:resources mapping="/**" locatinotallow="/"/>

在 Java 配置的 SSM 环境中,如果要配置静态资源过滤,需要让 SpringMVC 的配置继承
WebMvcConfifigurationSupport ,进而重写 WebMvcConfifigurationSupport 中的方法,如下:

@Configuration@ComponentScan(basePackages = "org.javaboy")
public class SpringMVCConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
      registry.addResourceHandler("/js/**").addResourceLocations("classpath:/");
   }
}


重写 addResourceHandlers 方法,在这个方法中配置静态资源过滤,这里我将静态资源放在resources 目录下,所以资源位置是 classpath:/ ,当然,资源也可以放在 webapp 目录下,此时只需要修改配置中的资源位置即可。如果采用 Java 来配置 SSM 环境,一般来说,可以不必使用 webapp目录,除非要使用 JSP 做页面模板,否则可以忽略 webapp 目录。

6.2 视图解析器

在 XML 文件中,通过如下方式配置视图解析器:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/></bean>

如果通过 Java 类,一样也可以实现类似功能。

首先为我们的项目添加 webapp 目录,webapp 目录中添加一个 jsp 目录,jsp 目录中添加 jsp 文件:


腾讯T3-3级资深架构师呕心整理:10万字节springboot教程全解!_JSON_04


然后引入 JSP 的依赖:

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.1</version></dependency>

然后,在配置类中,继续重写方法:

@Configuration@ComponentScan(basePackages = "org.javaboy")
public class SpringMVCConfig extends WebMvcConfigurationSupport {
    @Override
    protected void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/jsp/", ".jsp");
   }
}


接下来,在 Controller 中添加控制器即可访问 JSP 页面:

@Controllerpublic class HelloController2 {
    @GetMapping("/hello2")
    public String hello() {
        return "hello";
   }
}


6.3 路径映射

有的时候,我们的控制器的作用仅仅只是一个跳转,就像上面小节中的控制器,里边没有任何业务逻辑,像这种情况,可以不用定义方法,可以直接通过路径映射来实现页面访问。如果在 XML 中配置路径映射,如下:

<mvc:view-controller path="/hello" view-name="hello" status-code="200"/>


这行配置,表示如果用户访问 /hello 这个路径,则直接将名为 hello 的视图返回给用户,并且响应码为 200 ,这个配置就可以替代 Controller 中的方法。


相同的需求,如果在 Java 代码中,写法如下:

@Configuration@ComponentScan(basePackages = "org.javaboy")
public class SpringMVCConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/hello3").setViewName("hello");
   }


此时,用户访问 /hello3 接口,就能看到名为 hello 的视图文件。


6.4 JSON 配置


springMVC 可以接收JSON 参数,也可以返回 JSON 参数,这一切依赖于 HttpMessageConverter。HttpMessageConverter 可以将一个 JSON 字符串转为 对象,也可以将一个对象转为 JSON 字符串,实际上它的底层还是依赖于具体的 JSON 库。

所有的 JSON 库要在 SpringMVC 中自动返回或者接收 JSON,都必须提供和自己相关的HttpMessageConverter 。

SpringMVC 中,默认提供了 Jackson 和 gson 的 HttpMessageConverter ,分别是:
MappingJackson2HttpMessageConverter 和 GsonHttpMessageConverter 。

正因为如此,我们在 SpringMVC 中,如果要使用 JSON ,对于 jackson 和 gson 我们只需要添加依赖,加完依赖就可以直接使用了。具体的配置是在
AllEncompassingFormHttpMessageConverter 类中完成的。

如果开发者使用了 fastjson,那么默认情况下,SpringMVC 并没有提供 fastjson 的HttpMessageConverter ,这个需要我们自己提供,如果是在 XML 配置中,fastjson 除了加依赖,还要显式配置 HttpMessageConverter,如下:


<mvc:annotation-driven>
    <mvc:message-converters>
        <beanclass="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
        </bean>
    </mvc:message-converters></mvc:annotation-driven>


在 Java 配置的 SSM 中,我们一样也可以添加这样的配置:

@Configuration@ComponentScan(basePackages = "org.javaboy")public class SpringMVCConfig extends WebMvcConfigurationSupport {
    @Override
    protected void configureMessageConverters(List<HttpMessageConverter<?>>
converters) {
        FastJsonHttpMessageConverter converter = newFastJsonHttpMessageConverter();
        converter.setDefaultCharset(Charset.forName("UTF-8"));
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setCharset(Charset.forName("UTF-8"));
        converter.setFastJsonConfig(fastJsonConfig);
        converters.add(converter);
   }
}

然后,就可以在接口中直接返回 JSON 了,此时的 JSON 数据将通过 fastjson 生成。


上面就是对于springboot全教程一个章节的知识点整理,还有28个知识点由于文章的字数限制,就不给大家一一指出来了,如果大家有需要的话,可以点击获取获取教程文档。

腾讯T3-3级资深架构师呕心整理:10万字节springboot教程全解!_MVC_05


腾讯T3-3级资深架构师呕心整理:10万字节springboot教程全解!_spring_06



标签:10,SpringMVC,Spring,配置,T3,JSON,添加,全解,class
From: https://blog.51cto.com/u_16173760/6681605

相关文章

  • 7/10
    今天好累。今天给我弟开家长会。早上七点起来,八点把我弟送到学校,学校老师先给学生开会再给家长开。开到10点半接回来到家做饭。中午小睡一会,我弟有两点的补习班,我三点开家长会。家长会好无聊。初中老师竟然不认识我了。晚上3千米打卡。 ......
  • LOJ10010 糖果传递
    经典问题,环形均分纸牌设每个人的糖果数量为\(a[1]\)~\(a[n]\)设\(b[i]\)表示第\(i\)个人传递给第\(i+1\)个人的糖果数量(正负有意义),其中\(b[n]\)表示第\(n\)个人传递给第\(1\)个人的糖果数量根据题意不难列出\(n\)个方程,看似\(n\)个未知数,只有唯一解,但其实只有\(n-1\)个方程,因为......
  • 7.10
    今天学习for循环for(循环变量初始化;循环条件;循环变量迭代){循环操作;}最基础的格式是for(inti=1;i<=10;i++){System.out.println("………"+i);}循环条件是布尔类型的表达式最先执行初始化步骤。可以声明一种类型,可初始化循环控制变量,也可以是空......
  • 7月10日
    7月10日早上七点起床,然后继续赖床,赖床使我生活更美妙。呆了一会儿就开始起来看着我弟写作业,自己在旁边写pta的题,中午十点多带着我弟出去吃了顿饭,回来之后玩了会儿,在家呆了会儿,之后和我妈去了冀县的医院,我爷爷在那住院了,过去看了看我爷爷,在那呆了一下午,之后等我小姨下班之后就一块......
  • 810-Air724UG(4G全网通GPRS)开发 - 模组把拍摄的照片通过http POST上传到服务器,服务
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/LearnAir724UG"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明这节是模组控制摄像头采集到图......
  • 1002 A+B for Polynomials C++
    Thistime,youaresupposedtofind A+B where A and B aretwopolynomials.InputSpecification:Eachinputfilecontainsonetestcase.Eachcaseoccupies2lines,andeachlinecontainstheinformationofapolynomial:K N1​ aN1​​ N2​ aN2​​ ......
  • 泛微10.58
    POST/weaver/weaver.file.FileDownloadForOutDocHTTP/1.1Host:xxxxxContent-Length:49Accept-Language:zh-CN,zh;q=0.8Accept:/User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:99.0)Gecko/20100101Firefox/99.0Accept-Charset:GBK,utf-8;q=0.7,*;q......
  • 2023-07-10 量学基础 黄金阶梯(攻防节奏)
    1.攻的节奏,每一级上涨阶梯必须是有王牌柱构成。不必非得是黄金柱,也可以是将军柱(1)也就必须是有4根k线构成一个阶梯(2)理解合力和接力的关系2.防的节奏(1)单阴不算阴(2)双阴才断节奏,但是双阴和基柱如果只有3天,则后面再出阳线也算一波(3)打破最后一个攻的节奏就为撤 ......
  • 复习ES(6-11)语法之ES10
    目录Object.fromEntries()字符串扩展数组扩展JSON扩展Symbol.prototype.description()Object.fromEntries()Object.entries()返回一个给定对象自身可枚举属性的键值对数组。Object.fromEntries()方法是Object.entries()的逆操作,用于将一个键值对数组转为对象......
  • 7.10
    2、对象和类一个源文件中只能有一个public类一个源文件可以有多个非public类源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。如果一个类定义在某个包中,那么package语句应该在源文件的首行。如果......