Spring Boot访问静态资源css/js,你真的懂了吗

下面是完整攻略:

Spring Boot访问静态资源

什么是静态资源

静态资源(Static Resources),通常指不需要动态生成的文件,比如HTML、CSS、JS、图片等。静态资源一般存放在Web应用的WebRoot目录下。

Spring Boot静态资源访问配置

Spring Boot使用默认的静态资源路径,如下:

classpath:/META-INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public/

这些默认的静态资源路径依次对应的是:

  1. Spring Boot内置的JAR包中的META-INF/resources目录;
  2. 项目根路径下的resources目录;
  3. 项目根路径下的static目录;
  4. 项目根路径下的public目录。

如果项目中需要访问自定义的静态资源,可以在application.properties文件中进行配置,如下:

# 添加自定义的静态资源路径
spring.resources.static-locations=classpath:/static/,file:/opt/static/

上述配置表示访问静态资源时,会先访问项目根路径下的static目录,如果没有找到,则会访问/opt/static/目录。

访问静态资源

在Spring Boot中访问静态资源很简单,只需要在HTML页面中添加相应的链接即可。

以访问CSS文件为例,可以在HTML页面中添加以下代码:

<link rel="stylesheet" type="text/css" href="/css/style.css">

假设项目根路径下有一个名为style.css的文件夹,上面代码中href属性的值为/css/style.css,其中前面的"/"表示项目根路径,后面的"/css/style.css"表示相对于项目根路径下的css文件夹。如果没有在application.properties文件中进行配置,则默认访问项目根路径下的static目录。

除了在HTML页面中添加URL链接,还可以在Spring MVC的控制器方法上加上@RequestMapping注解,来访问静态资源:

@RequestMapping(value = "/static/img/{imgName}", method = RequestMethod.GET)
public void showImage(@PathVariable("imgName") String imgName, HttpServletResponse response) {
    // 读取图片文件
    byte[] data = readFile("/static/img/" + imgName);
    try {
        // 写入响应流中
        response.getOutputStream.write(data);
        response.getOutputStream.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

上述代码中,@RequestMapping指定了请求的路径为/static/img/{imgName},其中{imgName}为参数,用于匹配URL中的文件名。在方法体中,首先通过readFile方法,读取了项目根路径下的static/img目录下的imgName文件的二进制内容,并写入响应流中。这样,用户在访问时就会得到相应的图片。

示例

下面是两个示例:

示例一:访问HTML静态文件

  1. 在项目根路径下创建一个名为static的目录;
  2. 在static目录下创建一个名为index.html的文件;
  3. 在index.html文件中添加以下内容:

```



Home Page

Home Page


```

  1. 启动Spring Boot应用,访问http://localhost:8080/index.html,即可看到页面上显示“Home Page”。

示例二:访问图片资源

  1. 在项目根路径下创建一个名为static的目录;
  2. 在static目录下创建一个名为images的目录;
  3. 在images目录下添加一张名为logo.png的图片;
  4. 在控制器中添加以下代码:

@RequestMapping(value = "/logo", method = RequestMethod.GET)
public void showImage(HttpServletResponse response) {
// 读取图片文件
byte[] data = readFile("/static/images/logo.png");
try {
// 设置响应类型为图片
response.setContentType("image/png");
// 写入响应流中
response.getOutputStream.write(data);
response.getOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}

  1. 启动Spring Boot应用,访问http://localhost:8080/logo,即可看到页面上显示名为“logo”的图片。

这两个示例展示了如何访问不同类型的静态资源,建立了基本的静态资源访问机制。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot访问静态资源css/js,你真的懂了吗 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 鸿蒙系统开发者模式如何进入?鸿蒙系统进入开发者模式的方法

    进入鸿蒙系统的开发者模式,需要经过以下步骤: 打开鸿蒙系统的设置应用:在主屏幕或应用列表中找到“设置”应用,点击进入。 找到“系统”选项:在设置应用中,向下滑动屏幕直到找到“系统”选项,点击进入。 进入“关于手机”页面:在“系统”页面中,向下滑动到最底部,点击“关于手机”进入详细信息页面。 找到“版本号”选项:在“关于手机”页面中,找到“版本号”选项,连续点…

    other 2023年6月26日
    00
  • 在mybatis中去除多余的前缀或者后缀操作

    在MyBatis中,可以使用<trim>元素来去除多余的前缀或后缀操作。<trim>元素可以用于动态地处理SQL语句的前缀和后缀,以便根据条件添加或删除它们。 以下是使用<trim>元素去除多余前缀或后缀的完整攻略: 去除前缀示例: <select id=\"getUserList\" resul…

    other 2023年8月5日
    00
  • taskset命令详解

    taskset命令详解 在Linux操作系统中,taskset命令可以帮助我们将进程绑定到特定的CPU核心上。本文将详细介绍taskset命令的用法和相关注意事项。 命令语法 taskset [options] [mask] pid 其中,options代表命令选项,mask代表进程的CPU掩码,pid代表需要进行操作的进程ID。 CPU掩码 CPU掩码是一…

    其他 2023年3月28日
    00
  • 如何解决Office报错提示“不是有效的win32应用程序”问题

    针对“不是有效的win32应用程序”问题,我们可以通过以下方法进行解决: 1. 检查文件是否受损并重新安装 这种问题通常是由于安装文件或安装过程中出现问题导致的。你可以尝试以下步骤来解决该问题: 检查你下载或安装的文件是否受损,如果是,请重新下载或申请正常的安装媒介。 确保你有管理员权限,在安装过程中不要关闭相关程序或服务。 在重新安装过程中,可以使用清理工…

    other 2023年6月25日
    00
  • python单向循环链表实例详解

    Python 单向循环链表实例详解 单向循环链表是一种常用的链表结构,它和单向链表的最大区别在于其尾节点指向头节点。这种循环的结构使得我们可以轻松地在链表中进行循环操作。下面我们来详细讲解如何使用 Python 实现单向循环链表。 实现思路 实现节点类:首先我们需要定义一个节点类,用来储存我们链表中的每个节点,并且需要定义一些方法来访问和更新节点的值、指针等…

    other 2023年6月27日
    00
  • Python爬虫实现selenium处理iframe作用域问题

    Python爬虫实现selenium处理iframe作用域问题攻略 在使用Python编写爬虫时,有时候需要处理网页中的iframe(内嵌框架)元素。使用selenium库可以方便地实现对iframe的操作。本攻略将详细介绍如何使用Python爬虫和selenium库来处理iframe作用域问题,并提供两个示例说明。 1. 安装selenium库 首先,确保…

    other 2023年8月20日
    00
  • C语言中单链表的基本操作(创建、销毁、增删查改等)

    下面我将为你详细讲解C语言中单链表的基本操作,包括创建、销毁、增删查改等。 单链表的基本结构 单链表是一种常见的数据结构,它由多个节点组成,每个节点都包含两个部分:数据域和指针域。数据域用于存储数据,指针域用于指向下一个节点。 在C语言中,我们可以通过定义一个结构体来表示一个节点,结构体中包含数据域和指针域两个成员变量,如下所示: typedef struc…

    other 2023年6月27日
    00
  • Android中实现自动生成布局View的初始化代码方法

    这里是一份关于Android中实现自动生成布局View的初始化代码的完整攻略: 什么是自动生成布局View的初始化代码 在Android开发中,经常需要通过Java代码来访问布局文件中声明的各种View对象。对于一个大型工程项目,如果每次都手动编写初始化操作代码,不仅费时费力,而且容易产生错误。因此,我们可以采用自动生成布局View的初始化代码来填补这个空白…

    other 2023年6月20日
    00
合作推广
合作推广
分享本页
返回顶部