一、Springboot

1、webjars方式

我们之前使用Maven构建一个Web项目时,在main目录下会存在一个webapp的目录,我们以前都是将所有的页面或静态资源导在这个目录下,但现在使用SpringBoot项目我们应该将静态资源文件放在哪里呢?

SpringBoot对于静态资源放置的位置,是有静态资源映射规则,在SpringBoot中,SpringMVC的web配置都在 org.springframework.boot.autoconfigure.web.servlet 包下的 WebMvcAutoConfiguration 这个配置里面,我们找到addResourceHandlers这个方法,该方法用于处理webjars方式的静态资源映射。

  @Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
ServletContext servletContext = getServletContext();
addResourceHandler(registry, "/webjars/**","classpath:/META-INF/resources/webjars/");
addResourceHandler(registry,this.mvcProperties.getStaticPathPattern(),registration -> {
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (servletContext != null) {
registration.addResourceLocations(new ServletContextResource(servletContext, SERVLET_LOCATION));
}
});
}

阅读源码得知,所有的 /webjars/**,都需要去 classpath:/META-INF/resources/webjars/ 找对应的资源,那什么是webjars呢?

webjars本质就是以jar包的方式引入我们的静态资源,我们以前要导入一个静态资源文件,直接导入即可。

使用SpringBoot可以使用webjars,只需导入相应pom依赖即可使用:

2、继承WebMvcConfigurationSupport类

自定义一个WebMvcConfig继承WebMvcConfigurationSupport

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
/**
* 添加静态资源映射
* @param registry
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
// 表示通过 ip:port/profile/** 能访问服务器D://upload目录下的所有文件
registry.addResourceHandler("/profile/**").addResourceLocations("file:D://upload");
// 表示通过 ip:port/backend/** 能访问根目录/backend目录下的所有文件
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
// 重写父类方法默认映射关系,如果不需要可以不写
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}

3、在application.properties中配置

# 自定义静态资源访问路径,可以指定多个,之间用逗号隔开
spring.resources.static-locations=classpath:/myabc/,classpath:/myhhh

特别注意:自定义静态资源后,SpringBoot默认的静态资源路径将不再起作用!

二、Nginx

1、配置alias目录

alias指定的目录是完整的路径

location /static/ {
alias /var/www/static/;
autoindex on;
}

注意:alias指定的目录后面必须要加上"/"

2、配置root目录

root指定的目录是location匹配访问的path目录的上一级目录

location /static/ {
root /var/www/;
autoindex on;
}

注意:location中指定的/static/必须是在root指定的/var/www/目录中真实存在

3、部署VUE项目

location / {
root D:/WorkSpace/Test/dist/;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}

三、Tomcat

1、首先找到Tomcat中的server.xml文件

2、打开server.xml文件,在Host节点中增加如下配置

<Context path="/api" docBase="D:\upload\" reloadable="true" debug="0" crossContext="true"/>

静态资源存放目录:D:\upload\20230501.png

静态资源访问地址:http://localhost:8080/api/20230501.png

<Context>元素的属性:

  • path: 指定访问该Web应用的URL入口。

  • docBase: 指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于的appBase属性的相对路径,如果Web应用采用开放目录结构,则指定Web应用的根目录,如果Web应用是个war文件,则指定war文件的路径。

  • reloadable: 如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用。

需要注意可能的风险:

1、在开发阶段将reloadable属性设为true,有助于调试servlet和其它的class文件,但这样用加重服务器运行负荷,建议在Web应用的发存阶段将reloadable设为false。

2、由于动态替代class,引发自动部署;如果部署失败,可能导致出现了2个相同的部署包。再次重启,然后2个缓存包都正常启动。 其本质原因是Tomcat在卸载应用的过程中,如果出现异常,则无法继续删除缓存;在重新加载的时候,无法清空已有的缓存,这个才是问题的根源。

Java项目静态资源映射的几种方式的更多相关文章

  1. Java项目main方法启动的两种方式

    1.打包时指定了主类,可以直接用java -jar xxx.jar. <!--main方法打包jar包插件--> <plugin> <artifactId>mave ...

  2. spring boot入门笔记(四) - 多环境配置、加载顺序、静态资源映射

    1.多环境配置 先描述下以前的开发流程:从SVN把项目下载到本地,各种修改配置文件,启动成功:完成功能后上传到公司的测试服务器,修改各种配置文件,启动成功:最后到上线的日子里,把新功能中涉及到的文件打 ...

  3. SpringBoot:静态资源映射、定制404、配置icon

    目录 静态资源映射规则 定制首页 定制错误页面 配置 icon 静态资源映射规则.定制首页.定制404页面.配置网站的图标 静态资源映射规则 SpringBoot中对于静态资源(css,js,img. ...

  4. 零基础学习java------39---------json格式交互,Restful(不懂),静态资源映射,SSM整合(ssm整合思想,application.xml文件详解(声明式事务管理),)

    一. json格式交互(知道) 1 . 回顾ajax基本语法 $.ajax({ url:"", // 请求的后台路径 data:{"":"" ...

  5. SpringBoot 配置静态资源映射

    SpringBoot 配置静态资源映射 (嵌入式servlet容器)先决知识 request.getSession().getServletContext().getRealPath("/& ...

  6. Springboot学习02-webjars和静态资源映射规则

    Springboot学习01-webjars和静态资源映射规则 前言 1-以前我们在IDEA中创建一个项目,添加web依赖包,我们现在是一个web应用,应该在man目录下面有一个webapp文件夹,将 ...

  7. Spring Boot 静态资源映射与上传文件路由配置

    默认静态资源映射目录 默认映射路径 在平常的 web 开发中,避免不了需要访问静态资源,如常规的样式,JS,图片,上传文件等;Spring Boot 默认配置对静态资源映射提供了如下路径的映射 /st ...

  8. tomcat配置外部静态资源映射路径

    一.背景 1.有一个录音软件每天生成很多新的录音文件. 2.现在想通过一个WEB项目页面下载这些录音文件. 3.很显然这些录音文件放在WEB项目下不是很合适(WEB项目更新是个大麻烦,海量的录音文件要 ...

  9. Java加载资源文件的两种方法

    处理配置文件对于Java程序员来说再常见不过了,不管是Servlet,Spring,抑或是Structs,都需要与配置文件打交道.Java将配置文件当作一种资源(resource)来处理,并且提供了两 ...

  10. spring-boot配置静态资源映射的坑:properties文件不能添加注释

    如此博文所述,Spring Boot 对静态资源映射提供了默认配置 默认将 /** 所有访问映射到以下目录:classpath:/staticclasspath:/publicclasspath:/r ...

随机推荐

  1. Golang 爬虫02

    验证邮箱 目标站点: https://movie.douban.com/top250

  2. avue组件自定义按钮/标题/内容/搜索栏

    话不多说 笔记直接分享!! 一.自定义crud搜索栏组件 <template slot-scope="scope" slot="provinceCodeSearch ...

  3. Three加载3D模型贴图

    Three加载3D模型贴图 准备阶段 3D模型 three 库文件 纹理图片 相关资料 官方开发文档: https://threejs.org/docs 官网编辑3D模型:https://threej ...

  4. linux下使用chattr创建一个连root都无法删除的文件

    一.关于chattr,lsattr 1.chattr 的作用:改变一个Linux文件系统上的文件属性. 2.chattr用来改变文件.目录的属性,lsattr用来查看文件.目录的属性. 3.chatt ...

  5. FFmpeg Batch AV Converter 2.2.2 官方版

    基本简介 FFmpeg Batch AV Converter官方版是一款Windows FFmpeg用户的前端程序,FFmpeg Batch AV Converter最新版允许使用FFmpeg命令行的 ...

  6. C#笔记 关于采集卡

    周更!节日快乐! 1. 参数 1.1 CAM file CAM file是文件扩展名为.cam的可读ASCII文件,包含了参数列表,比如:AcquisitionMode,TrigMode等.通过McS ...

  7. mobile select 移动端下拉框

    官方链接 原生 js 移动端选择控件,不依赖任何库 可传入普通数组或者 json 数组 可根据传入的参数长度,自动渲染出对应的列数,支持单项到多项选择 自动识别是否级联 选择成功后,提供自定义回调函数 ...

  8. pandas rank()函数简介

    本文简单的说一下自己对pandas的rank()函数的简单讲解. 函数原型:rank(axis=0, method: str = 'average', numeric_only: Union[bool ...

  9. 算法金 | 读者问了个关于深度学习卷积神经网络(CNN)核心概念的问题

    ​大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣] 读者问了个关于卷积神经网络核心概念的问题,如下, [问]神经元.权重.激活函数.参数 ...

  10. 红米K70E支付宝无指纹支付选项的解决方法

    红米K70E这台手机,支付宝里无指纹支付选项,百度了一下,也没结果.自己摸索了下,终于折腾出了指纹支付. 解决方法: 在手机-设置-指纹.面部与密码-指纹解锁-指纹支付-支付宝-更新证书. 杀掉支付宝 ...