zoukankan      html  css  js  c++  java
  • Spring Boot 之基础 web 功能开发

    1.1 实验内容
    我们将在这一节学习 Spring Boot 中如何进行 web 相关功能的开发,主要包括常用的接口开发和 Spring Boot 对于静态资源文件的处理。

    1.2 实验知识点
    Spring Boot 接口开发
    Spring Boot 如何处理静态 web 资源
    如何使用实验楼 web ide 开发 Spring Boot web 功能
    1.3 实验环境
    JDK 1.8 或者更高版本
    Spring Boot 2.1.0-RELEASE
    Maven 3+
    1.4 代码获取
    在学习前,一定要获取源码,因为篇幅原因,只会截取部分关键代码。

    wget https://labfile.oss.aliyuncs.com/courses/1244/lou-springboot-05.zip
    unzip lou-springboot-05.zip
    cd lou-springboot
    

    接口开发

    接下来,进行接口开发,请大家务必跟随文档完成相关代码。

    注意:项目统一创建在/home/project/lou-springboot 目录下。

    hello shiyanlou

    在前一个实验中,我们构建并启动了 Spring Boot 项目,但是由于没有任何资源可供访问,启动后访问到的一直是 404 错误页面,因此我们需要自行实现一个 Controller 来测试一下 Spring Boot 如何处理 web 请求,接下来使用 Spring Boot 做一个简单的接口实现。

    在根目录下新建 com.lou.springboot.controller包,之后在包里新建一个 HelloController 类,编码如下:

    package com.lou.springboot.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class HelloController {
    
        @GetMapping("/hello")
        @ResponseBody
        public String hello() {
            return "hello,shiyanlou";
        }
    }
    

    这段代码大家应该很熟悉,在 Spring Boot 项目中,大部分功能实现的写法与 Spring 项目开发的写法是相同的,这段代码的含义就是处理请求路径为 /hello 的 get 请求,之后返回一段字符串,编码完成后重新启动项目,点击 WEB 服务按钮,并在浏览器中输入地址,比如https://5f3389aa9c62.simplelab.cn/hello,可以看到已经没有错误页面,而是 Controller 中的正确返回,咱们的第一个 Spring Boot 项目实例就完成了!

    配置项

    我们创建了第一个 Spring Boot 项目,在初始化时我们选择了 web 模块(即在 pom 文件中引入了 spring-boot-starter-web 依赖),该模块中包含了 SpringMVC 相关依赖,之后我们开发了第一个 web 功能,仅仅是在控制器类中实现了一个简单的字符串返回方法,并对该方法进行了请求地址映射设置,之后没有做其他配置操作,但是项目启动后就能够进行正常的 web 请求并正常返回数据。 咱们来回想一下在未使用 Spring Boot 开发 web 应用的场景,在平时的 Spring web 项目中,使用 SpringMVC 模块时需要在容器中配置 SpringMVC 相关的 bean,并且在 web.xml 中配置 DispatcherServlet 以及它的 进行请求地址的映射,配置文件如下:

        <!--Start spring mvc Servlet-->
        <Servlet>
            <Servlet-name>Spring</Servlet-name>
            <Servlet-class>org.springframework.web.Servlet.DispatcherServlet</Servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring-mvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </Servlet>
        <!--End spring mvc Servlet-->
        <!--Start Servlet-mapping -->
        <Servlet-mapping>
            <Servlet-name>Spring</Servlet-name>
            <url-pattern>/</url-pattern>
        </Servlet-mapping>
        <!--End Servlet-mapping -->
    

    最后启动 Tomcat 服务器装载 DispatcherServlet,接着就可以进行基于 SpringMVC 框架的 web 项目开发和使用,但是 Spring Boot 开发 web 项目时,开发者只需导入 spring-boot-starter-web 场景启动器即可,根本无需再进行任何配置就能够使得 DispatherServlet 正常加载并使用,这是因为 Spring Boot 在项目启动时已经将 DispatherServlet 自动配置到项目中了,因此我们无需做多余的配置即可完成接口的开发。

    不过呢,使用 Spring Boot 开发 web 应用时,有两个需要注意的配置项:

    • server.port 表示启动后的端口号,默认是 8080
    • server.servlet.context-path 项目路径,是构成 url 地址的一部分

    如果想要修改这两个参数值,可以在 application.properties 配置文件中修改,示例如下:

    server.port=8082
    server.servlet.context-path=/shiyanlou/
    

    这样的话,启动后的端口号就不再是 8080 而是 8082 了,在浏览器访问时也需要加上设置的项目路径,比如前面的 hello 请求,路径就变成了 http://localhost:8082/shiyanlou/hello ,这一点大家需要注意,如果想要对端口和项目访问路径做修改的话,修改这两个参数就可以了。(不过实验楼并不支持除 8080 以外的端口访问,所以同学们在线上开发时还是需要使用默认端口,即 8080)

    静态资源处理

    简单来说,在 B/S 架构中,静态资源一般指 Web 服务器对应目录中的资源文件,客户端发送请求到 Web 服务器后,Web 服务器(比如 Tomcat)直接从文件目录中获取文件并返回给客户端,客户端解析并渲染显示出来,比如 HTML、CSS、JavaScript、图片等文件,这些文件原样返回给客户端,并不会在 Web 服务器端有所改变,在进行 web 项目开发时,对于这些资源的处理也是十分重要的,这一小节我们将会讲解 Spring Boot 是如何处理这些文件的。

    通过查看源码我们可以看到,Spring Boot 默认存放静态资源文件的目录有四个,这些目录都在类路径下,它们分别是:

    • /META-INF/resources/
    • /resources/
    • /static/
    • /public/

    也就是说,在进行 web 功能开发时,如果项目中存在静态资源文件,如 HTML、CSS、JavaScript、图片等文件,只要将这些文件放到以上四个文件目录即可正常访问到。接下来,我们新建四个目录并进行测试,类路径对应到项目路径中就是 src/main/resources ,新的目录结构如下:


    为了验证,我们在分别在每个目录中新增一个静态资源文件,分别是 /META-INF/resources/test.html 、/resources/shiyanlou.png 、/static/test.css 、/public/test.js :

    对应的资源已经打包在了上面提供的源代码中,同学们可以下载源代码获取。或者自己随便编写,都是可以的。

    接下来启动项目,并分别访问四个资源,看一下服务器返回的结果,访问路径为:

    • https://****.simplelab.cn/test.html
    • https://****.simplelab.cn/test.css
    • https://****.simplelab.cn/test.js
    • https://****.simplelab.cn/shiyanlou.png

    比如 test.html

    比如shiyanlou.png

    结果都是正确的,文件虽然在不同的路径中,但是四个路径都是默认的静态资源目录,因此都能够被访问到。当然,有的同学可能会说了,我就想要访问 shiyanlou 目录下的静态资源文件,这种情况该怎么办呢?其实,前面四个静态资源目录是 Spring Boot 默认设置的,如果想要更改,可以修改配置文件中的 spring.resources.static-locations 参数。比如,我们想要访问 shiyanlou 目录下的静态资源文件,首先需要新建 shiyanlou 目录,将静态资源复制到该目录中:

    如上图所示,我们复制了三个静态资源文件,test.js 依然放在 static 目录中,之后修改配置文件,添加如下设置:

    spring.resources.static-locations=classpath:/shiyanlou/
    

    重启后,在浏览器中再次分别访问这些静态资源,同样可以访问到静态资源。

    shiyanlou 目录下的三个文件都能够正常访问,但是 test.js 访问时会报错 404 ,因为配置文件中静态资源路径并没有包含 static 目录,shiyanlou 目录下也没有 test.js。如果想要正常访问到该文件,有两个办法,一是将 test.js 文件放到 shiyanlou 目录下,二是修改配置文件为 :

    spring.resources.static-locations=classpath:/shiyanlou/,classpath:/static/
    

    spring.resources.static-locations 的参数值可以设置为一个数组。这样修改后,重启后又能够访问所有的静态资源文件了。

  • 相关阅读:
    ES6
    django创建超级用户
    小程序-网络请求api
    小程序-数据双向绑定
    POJ2406 Power Strings
    POJ2758 Checking the Text
    LightOJ1197
    51Nod
    CF55D
    Kattis
  • 原文地址:https://www.cnblogs.com/sakura579/p/14008442.html
Copyright © 2011-2022 走看看