-
Spring Boot 静态资源处理
2016-01-12 09:23:50Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性。建议大家使用Spring Boot的默认配置方式,如果需要特殊处理的再通过配置进行修改。如果想要自己完全控制WebMVC,就需要...Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性。
建议大家使用Spring Boot的默认配置方式,如果需要特殊处理的再通过配置进行修改。
如果想要自己完全控制WebMVC,就需要在@Configuration注解的配置类上增加@EnableWebMvc(@SpringBootApplication 注解的程序入口类已经包含@Configuration),增加该注解以后WebMvcAutoConfiguration中配置就不会生效,你需要自己来配置需要的每一项。这种情况下的配置还是要多看一下WebMvcAutoConfiguration类。
我们既然是快速使用Spring Boot,并不想过多的自己再重新配置。本文还是主要针对Spring Boot的默认处理方式,部分配置在application 配置文件中(.properties 或 .yml)
默认资源映射
我们在启动应用的时候,可以在控制台中看到如下信息:
2016-01-08 09:29:30.362 INFO 24932 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2016-01-08 09:29:30.362 INFO 24932 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2016-01-08 09:29:30.437 INFO 24932 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
其中默认配置的 /** 映射到 /static (或/public、/resources、/META-INF/resources)
其中默认配置的 /webjars/** 映射到 classpath:/META-INF/resources/webjars/
PS:上面的 static、public、resources 等目录都在 classpath: 下面(如 src/main/resources/static)。如果我按如下结构存放相同名称的图片,那么Spring Boot 读取图片的优先级是怎样的呢?
如下图:当我们访问地址 http://localhost:8080/fengjing.jpg 的时候,显示哪张图片?这里博主可以直接告诉大家,优先级顺序为:META-INF/resources > resources > static > public
如果我们想访问pic2.jpg,请求地址 http://localhost:8080/img/pic2.jpg自定义资源映射
上面我们介绍了Spring Boot 的默认资源映射,一般够用了,那我们如何自定义目录?
这些资源都是打包在jar包中的,然后实际应用中,我们还有很多资源是在管理系统中动态维护的,并不可能在程序包中,对于这种随意指定目录的资源,如何访问?自定义目录
以增加 /myres/** 映射到 classpath:/myres/** 为例的代码处理为:
实现类继承 WebMvcConfigurerAdapter 并重写方法 addResourceHandlers (对于 WebMvcConfigurerAdapter 上篇介绍拦截器的文章中已经有提到)package org.springboot.sample.config; import org.springboot.sample.interceptor.MyInterceptor1; import org.springboot.sample.interceptor.MyInterceptor2; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration public class MyWebAppConfigurer extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/myres/**").addResourceLocations("classpath:/myres/"); super.addResourceHandlers(registry); } }
访问myres 文件夹中的fengjing.jpg 图片的地址为 http://localhost:8080/myres/fengjing.jpg
这样使用代码的方式自定义目录映射,并不影响Spring Boot的默认映射,可以同时使用。如果我们将/myres/** 修改为 /** 与默认的相同时,则会覆盖系统的配置,可以多次使用 addResourceLocations 添加目录,优先级先添加的高于后添加的。
// 访问myres根目录下的fengjing.jpg 的URL为 http://localhost:8080/fengjing.jpg (/** 会覆盖系统默认的配置) // registry.addResourceHandler("/**").addResourceLocations("classpath:/myres/").addResourceLocations("classpath:/static/");
其中 addResourceLocations 的参数是动参,可以这样写 addResourceLocations(“classpath:/img1/”, “classpath:/img2/”, “classpath:/img3/”);
使用外部目录
如果我们要指定一个绝对路径的文件夹(如 H:/myimgs/ ),则只需要使用 addResourceLocations 指定即可。
// 可以直接使用addResourceLocations 指定磁盘绝对路径,同样可以配置多个位置,注意路径写法需要加上file: registry.addResourceHandler("/myimgs/**").addResourceLocations("file:H:/myimgs/");
通过配置文件配置
上面是使用代码来定义静态资源的映射,其实Spring Boot也为我们提供了可以直接在 application.properties(或.yml)中配置的方法。
配置方法如下:# 默认值为 /** spring.mvc.static-path-pattern= # 默认值为 classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ spring.resources.static-locations=这里设置要指向的路径,多个使用英文逗号隔开,
使用 spring.mvc.static-path-pattern 可以重新定义pattern,如修改为 /myres/** ,则访问static 等目录下的fengjing.jpg文件应该为 http://localhost:8080/myres/fengjing.jpg ,修改之前为 http://localhost:8080/fengjing.jpg
使用 spring.resources.static-locations 可以重新定义 pattern 所指向的路径,支持 classpath: 和 file: (上面已经做过说明)
注意 spring.mvc.static-path-pattern 只可以定义一个,目前不支持多个逗号分割的方式。页面中使用
上面几个例子中也已经说明了怎么访问静态资源,其实在页面中使用不管是jsp还是freemarker,并没有什么特殊之处,也我们平时开发web项目一样即可。
下面是我的index.jsp:<body> <img alt="读取默认配置中的图片" src="${pageContext.request.contextPath }/pic.jpg"> <br/> <img alt="读取自定义配置myres中的图片" src="${pageContext.request.contextPath }/myres/fengjing.jpg"> </body>
使用webjars
先说一下什么是webjars?我们在Web开发中,前端页面中用了越来越多的JS或CSS,如jQuery等等,平时我们是将这些Web资源拷贝到Java的目录下,这种通过人工方式拷贝可能会产生版本误差,拷贝版本错误,前端页面就无法正确展示。
WebJars 就是为了解决这种问题衍生的,将这些Web前端资源打包成Java的Jar包,然后借助Maven这些依赖库的管理,保证这些Web资源版本唯一性。WebJars 就是将js, css 等资源文件放到 classpath:/META-INF/resources/webjars/ 中,然后打包成jar 发布到maven仓库中。
简单应用
以jQuery为例,文件存放结构为:
META-INF/resources/webjars/jquery/2.1.4/jquery.js META-INF/resources/webjars/jquery/2.1.4/jquery.min.js META-INF/resources/webjars/jquery/2.1.4/jquery.min.map META-INF/resources/webjars/jquery/2.1.4/webjars-requirejs.js
Spring Boot 默认将 /webjars/** 映射到 classpath:/META-INF/resources/webjars/ ,结合我们上面讲到的访问资源的规则,便可以得知我们在JSP页面中引入jquery.js的方法为:
<script type="text/javascript" src="${pageContext.request.contextPath }/webjars/jquery/2.1.4/jquery.js"></script>
想实现这样,我们只需要在pom.xml 文件中添加jquery的webjars 依赖即可,如下:
<dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>2.1.4</version> </dependency>
版本号统一管理
但是我们实际开发中,可能会遇到升级版本号的情况,如果我们有100多个页面,几乎每个页面上都有按上面引入jquery.js 那么我们要把版本号更换为3.0.0,一个一个替换显然不是最好的办法。
如何来解决?按如下方法处理即可。首先在pom.xml 中添加依赖:
<dependency> <groupId>org.webjars</groupId> <artifactId>webjars-locator</artifactId> </dependency>
然后增加一个WebJarsController:
package org.springboot.sample.controller; import javax.servlet.http.HttpServletRequest; import org.springframework.core.io.ClassPathResource; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.HandlerMapping; import org.webjars.WebJarAssetLocator; /** * 处理WebJars,自动读取版本号 * * @author 单红宇(365384722) * @myblog http://blog.csdn.net/catoop/ * @create 2016年1月8日 */ @Controller public class WebJarsController { private final WebJarAssetLocator assetLocator = new WebJarAssetLocator(); @ResponseBody @RequestMapping("/webjarslocator/{webjar}/**") public ResponseEntity<Object> locateWebjarAsset(@PathVariable String webjar, HttpServletRequest request) { try { String mvcPrefix = "/webjarslocator/" + webjar + "/"; // This prefix must match the mapping path! String mvcPath = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); String fullPath = assetLocator.getFullPath(webjar, mvcPath.substring(mvcPrefix.length())); return new ResponseEntity<>(new ClassPathResource(fullPath), HttpStatus.OK); } catch (Exception e) { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } }
最后在页面中使用的方式:
<script type="text/javascript" src="${pageContext.request.contextPath }/webjarslocator/jquery/jquery.js"></script>
静态资源版本管理
Spring 默认提供了静态资源版本映射的支持。
当我们的资源内容发生改变时,由于浏览器缓存,用户本地的资源还是旧资源,为了防止这种情况发生导致的问题。我们可能会选择在资源文件后面加上参数“版本号”或其他方式。使用版本号参数,如:
<script type="text/javascript" src="${pageContext.request.contextPath }/js/common.js?v=1.0.1"></script>
使用这种方式,当我们文件修改后,手工修改版本号来达到URL文件不被浏览器缓存的目的。同样也存在很多文件都需要修改的问题。或者有的人会增加时间戳的方式,这样我认为是最不可取的,每次浏览器都要请求为服务器增加了不必要的压力。
然而Spring在解决这种问题方面,提供了2种解决方式。
** 资源名称md5方式 **- 修改 application.properties 配置文件(或.yml)
spring.resources.chain.strategy.content.enabled=true spring.resources.chain.strategy.content.paths=/**
所有 /** 请求的静态资源都会被处理。
- 创建 ResourceUrlProviderController 文件
package org.springboot.sample.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.servlet.resource.ResourceUrlProvider; /** * 处理静态资源URL * * @author 单红宇(365384722) * @myblog http://blog.csdn.net/catoop/ * @create 2016年1月8日 */ @ControllerAdvice public class ResourceUrlProviderController { @Autowired private ResourceUrlProvider resourceUrlProvider; @ModelAttribute("urls") public ResourceUrlProvider urls() { return this.resourceUrlProvider; } }
- 在页面中使用的写法
<script type="text/javascript" src="${pageContext.request.contextPath }${urls.getForLookupPath('/js/common.js') }"></script>
当我们访问页面后,HTML中实际生成的代码为:
<script type="text/javascript" src="/myspringboot/js/common-c6b7da8fffc9be141b48c073e39c7340.js"></script>
其中 /myspringboot 为我这个项目的 contextPath
** 资源版本号方式 **
该方式本人觉得并无多大意义,也不做详细说明,这是对所有资源的统一版本控制,不像上面一个md5是针对文件的。
除了在 application.properties(或.yml)中的配置有所区别,页面使用和md5的一样。spring.resources.chain.strategy.fixed.enabled=true spring.resources.chain.strategy.fixed.paths=/js/**,/v1.0.0/** spring.resources.chain.strategy.fixed.version=v1.0.0
这样配置后,以上面 common.js 为例,实际页面中生成的HTML代码为:
<script type="text/javascript" src="/myspringboot/v1.0.0/js/common.js"></script>
** md5与版本号方式的处理原理 **
页面中首先会调用urls.getForLookupPath方法,返回一个/v1.0.0/js/common.js或/css/common-c6b7da8fffc9be141b48c073e39c7340.js
然后浏览器发起请求。
当请求的地址为md5方式时,会尝试url中的文件名中是否包含-,如果包含会去掉后面这部分,然后去映射的目录(如/static/)查找/js/common.js文件,如果能找到就返回。当请求的地址为版本号方式时,会在url中判断是否存在/v1.0.0 ,如果存在,则先从URL中把 /v1.0.0 去掉,然后再去映射目录查找对应文件,找到就返回。
总结
有这么多方式来管理我们的资源文件,然而在实际应用中虽然也都有可能用到(存在就有存在的道理嘛),但是凭借个人经验来说。
- 我们使用第三方的库时,建议使用webjars的方式,通过动态版本号(webjars-locator 的方式)来使用(因为第三方库在项目开发中变动频率很小,即便是变动也是版本号的修改)。
- 我们使用自己存放在静态资源映射目录中的资源的时候,建议使用md5 资源文件名的方式来使用(项目开发中一些css、js文件会经常修改)。
- 项目素材文件建议放到 classpath:/static (或其他)目录中,打包在项目中,通过CMS维护的一些图片和资源,我们使用配置引用到具体的磁盘绝对路径来使用。
- 注意使用md5文件名方式的时候,Spring 是有缓存机制的,也就是说,在服务不重启的情况下,你去变动修改这些资源文件,其文件名的md5值并不会改变,只有重启服务再次访问才会生效。如果需要每次都获取实际文件的md5值,需要重写相关类来实现,我们不建议这样做,因为一直去计算文件md5值是需要性能代价的。
-
nginx学习:搭建静态资源服务器
2018-06-12 16:03:221.搭建静态资源服务器我电脑上的work文件夹下面有很多图片,我想通过nginx搭建静态资源服务器,通过在地址栏输入ip+port的方式完成目录的映射找到nginx安装目录,打开/conf/nginx.conf配置文件,添加一个虚拟主机 ...以windows为例,linux其实一样;
1.搭建静态资源服务器
我电脑上的work文件夹下面有很多图片,我想通过nginx搭建静态资源服务器,通过在地址栏输入ip+port的方式完成目录的映射
找到nginx安装目录,打开/conf/nginx.conf配置文件,添加一个虚拟主机
添加监听端口、访问域名
重点是添加location,
映射-URL:/work/;
注意:如果当前server模块中已有一个location且URL为“/”,那么新建的location的url应为匹配路径,不得再为“/”,此时,映射路径可不是随便写的,首先是你的root目录下面必须有这个URL目录,否则会报404(这一规则当时可是害惨我了);
如果没有,URL可以写成“/”,如下图:
添加root目录(就是你想要展示静态资源的根目录,层级之间使用正斜杠“/”):D:/pic_resource/;
开启浏览目录权限:autoinedx on,默认是off;
然后保存,启动nginx;
windows下的nginx命令:首先是cmd命令模式进入nginx目录,
启动:start nginx.exe;
加载最新配置:./nginx.exe -s reload;
停止:./nginx.exe -s quit;
如果检查是否已启动,可查看nginx目录下的logs文件下是否有nginx.pid文件,有则表示成功启动。
若没有可以查看logs目录下的error.log错位日志,会提醒你出错的地方。
在地址栏输入:127.0.0.1:8008/work/,即可看到下图,表示配置成功。
-
玩转springboot:默认静态资源和自定义静态资源实战
2018-07-25 16:29:53在web开发中,静态资源的访问是必不可少的,如:图片、js、css 等资源的访问。 spring Boot 对静态资源访问提供了很好的支持,基本使用默认配置就能满足开发需求 一、默认静态资源映射 Spring Boot 对静态资源...点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了3个月总结的一线大厂Java面试总结,本人已拿腾讯等大厂offer。
另外,原创文章首发在我的个人博客:blog.ouyangsihai.cn,欢迎访问
原文链接:blog.ouyangsihai.cn >> 玩转springboot:默认静态资源和自定义静态资源实战在web开发中,静态资源的访问是必不可少的,如:图片、js、css 等资源的访问。
spring Boot 对静态资源访问提供了很好的支持,基本使用默认配置就能满足开发需求一、默认静态资源映射
Spring Boot 对静态资源映射提供了默认配置
Spring Boot 默认将 /** 所有访问映射到以下目录:
classpath:/static
classpath:/public
classpath:/resources
classpath:/META-INF/resources如:在resources目录下新建 public、resources、static 三个目录,并分别放入 a.jpg b.jpg c.jpg 图片
浏览器分别访问:
http://localhost:8080/a.jpg
http://localhost:8080/b.jpg
http://localhost:8080/c.jpg均能正常访问相应的图片资源。那么说明,Spring Boot 默认会挨个从 public resources static 里面找是否存在相应的资源,如果有则直接返回。
二、自定义静态资源访问
静态资源路径是指系统可以直接访问的路径,且路径下的所有文件均可被用户直接读取。
在Springboot中默认的静态资源路径有:
classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
,从这里可以看出这里的静态资源路径都是在classpath中(也就是在项目路径下指定的这几个文件夹)试想这样一种情况:一个网站有文件上传文件的功能,如果被上传的文件放在上述的那些文件夹中会有怎样的后果?
- 网站数据与程序代码不能有效分离;
- 当项目被打包成一个.jar文件部署时,再将上传的文件放到这个.jar文件中是有多么低的效率;
- 网站数据的备份将会很痛苦。
此时可能最佳的解决办法是将静态资源路径设置到磁盘的基本个目录。
第一种方式
1、配置类
** * @author 欧阳思海 * @date 2018/7/25 15:42 */ @Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //将所有C:/Users/gzpost05/Desktop/springboot博客/ 访问都映射到/myTest/** 路径下 registry.addResourceHandler("/myTest/**").addResourceLocations("file:C:/Users/gzpost05/Desktop/springboot博客/"); } }
上面的意思就是://将所有C:/Users/gzpost05/Desktop/springboot博客/ 访问都映射到**/myTest/**** 路径下
2、重启项目
例如,在**C:/Users/gzpost05/Desktop/springboot博客/**中有一张1.png图片
在浏览器输入:http://localhost:8080/myTest/1.png 即可访问。
第二种方式
首先,我们配置
application.properties
application.properties配置文件
web.upload-path=C:/Users/gzpost05/Desktop/test/ spring.mvc.static-path-pattern=/** spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,\ classpath:/static/,classpath:/public/,file:${web.upload-path}
注意:
web.upload-path
:这个属于自定义的属性,指定了一个路径,注意要以/结尾;spring.mvc.static-path-pattern=/**
:表示所有的访问都经过静态资源路径;spring.resources.static-locations
:在这里配置静态资源路径,前面说了这里的配置是覆盖默认配置,所以需要将默认的也加上否则static、public等这些路径将不能被当作静态资源路径,在这个最末尾的file:${web.upload-path}之所有要加file:是因为指定的是一个具体的硬盘路径,其他的使用classpath指的是系统环境变量编写测试类上传文件
/** * @author 欧阳思海 * @date 2018/7/25 16:17 */ @SpringBootTest @RunWith(SpringRunner.class) public class FileUploadTest { @Value("${web.upload-path}") private String path; /** 文件上传测试 */ @Test public void uploadTest() throws Exception { File f = new File("C:/Users/gzpost05/Desktop/springboot博客/1.png"); FileCopyUtils.copy(f, new File(path+"/aaa.png")); } @Test public void listFilesTest() { File file = new File(path); for(File f : file.listFiles()) { System.out.println("fileName : "+f.getName()); } } }
注意:这里将C:/Users/gzpost05/Desktop/springboot博客/1.png上传到配置的静态资源路径下。
可以到得结果:
说明文件已上传成功,静态资源路径也配置成功。
参考:
https://blog.csdn.net/zsl129/article/details/52906762最后,再分享我历时三个月总结的 Java 面试 + Java 后端技术学习指南,这是本人这几年及春招的总结,已经拿到了大厂offer,整理成了一本电子书,拿去不谢,目录如下:
现在免费分享大家,在下面我的公众号 程序员的技术圈子 回复 面试 即可获取。
有收获?希望老铁们来个三连击,给更多的人看到这篇文章
1、老铁们,关注我的原创微信公众号「程序员的技术圈子」,专注于Java、数据结构和算法、微服务、中间件等技术分享,保证你看完有所收获。
2、给俺点个赞呗,可以让更多的人看到这篇文章,顺便激励下我继续写作,嘻嘻。
3、另外,原创文章首发在我的个人博客:blog.ouyangsihai.cn,欢迎访问。
点赞是对我最大的鼓励
↓↓↓↓↓↓ -
nginx配置访问本地静态资源
2019-04-11 18:07:39nginx作为一款高性能的服务器,用途很多,除了可以做后端服务器的代理,负载均衡之外你,还有一个用途就是做静态资源的缓存服务器,比如在前后端分离的项目中,为了加速前端页面的响应速度,我们可以将前端的相关...nginx作为一款高性能的服务器,用途很多,除了可以做后端服务器的代理,负载均衡之外你,还有一个用途就是做静态资源的缓存服务器,比如在前后端分离的项目中,为了加速前端页面的响应速度,我们可以将前端的相关资源,例如html,js,css或者图片等放到nginx指定的目录下,访问的时候只需要通过IP加路径就可以实现高效快速的访问,
下面说说如何在windows下使用nginx作为静态资源服务器,
1、修改config目录下,这个配置文件,基本上所有的配置都在这里面做,
2、主要的配置参数如下,一些无关的参数我直接去掉了,注意,里面的location可以配置多个,这样可以根据业务的需要指定相关的路径方便后续的运维和管理,
server { listen 80; #nginx监听的端口 server_name localhost; #拦截的用户访问路径 #charset koi8-r; #access_log logs/host.access.log main; # 访问本地绝对路径下的静态html location / { #root html; root D:/tools/nginx/2/html1; index index.html index.htm; } #访问路径拼接 upload 访问本地绝对路径下的某图片 location /upload/ { alias D:/tools/nginx/2/image1/; autoindex on; } #访问路径拼接 /pages 访问本地绝绝对路径下的静态html location /pages/ { alias D:/tools/nginx/2/html1/; autoindex on; } # 精细化 配置相关静态资源参数,优化访问静态资源文件 location ~ .*\.(gif|jpg|jpeg|png)$ { expires 24h; root D:/tools/nginx/2/image1/;#指定图片存放路径 proxy_store on; proxy_temp_path D:/tools/nginx/2/image1/;#图片访问路径 proxy_redirect off; proxy_set_header Host 127.0.0.1; client_max_body_size 10m; client_body_buffer_size 1280k; proxy_connect_timeout 900; proxy_send_timeout 900; proxy_read_timeout 900; proxy_buffer_size 40k; proxy_buffers 40 320k; proxy_busy_buffers_size 640k; proxy_temp_file_write_size 640k; if ( !-e $request_filename) { proxy_pass http://127.0.0.1;#默认80端口 } } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
3、正常情况下,双击exe启动文件后,访问localhost:80,nginx默认回去找到nginx的html下面的index.html,
第一种配置,使用本地绝对路径,将静态的html放到你的这个目录下,我这里的路径是:D:/tools/nginx/2/html1;
所以配置如下:# 访问本地绝对路径下的静态html location / { #root html; root D:/tools/nginx/2/html1; index index.html index.htm; }
然后,在黑窗口:nginx -s reload 一下:可以看到访问的是自己目录下的页面,
4、当然,为了保证一定的安全性,也可以在访问的地址后拼接上一个字符串,比如我这里加了page,总体的配置如下,
#访问路径拼接 /pages 访问本地绝绝对路径下的静态html location /pages/ { alias D:/tools/nginx/2/html1/; autoindex on; }
再次访问,仍然可以访问到该目录下的html,
5、图片的访问,这里我使用了两种方式,第一种和配置访问静态html相似,使用绝对路径进行访问,
#访问路径拼接 upload 访问本地绝对路径下的某图片 location /upload/ { alias D:/tools/nginx/2/image1/; autoindex on; }
浏览器访问一下,可以看到,能够成功访问到图片,
再看第二种方式,通常为了优化nginx的静态资源访问,我们需要做一下参数调优配置,例如对图片进行压缩,缓存,添加用户名和密码的安全校验等,都可以直接进行配置,如下,这个里面还可以继续添加其他的参数,大家可查阅相关资料进行学习研究,
# 精细化 配置相关静态资源参数,优化访问静态资源文件 location ~ .*\.(gif|jpg|jpeg|png)$ { expires 24h; root D:/tools/nginx/2/image1/;#指定图片存放路径 proxy_store on; proxy_temp_path D:/tools/nginx/2/image1/;#图片访问路径 proxy_redirect off; proxy_set_header Host 127.0.0.1; client_max_body_size 10m; client_body_buffer_size 1280k; proxy_connect_timeout 900; proxy_send_timeout 900; proxy_read_timeout 900; proxy_buffer_size 40k; proxy_buffers 40 320k; proxy_busy_buffers_size 640k; proxy_temp_file_write_size 640k; if ( !-e $request_filename) { proxy_pass http://127.0.0.1;#默认80端口 } }
然后我们访问一下试试,可以看到,通过这个方式仍然可以成功访问到图片,因为我们在配置参数里面做了路径代理的配置,
总结:这里说一个应用场景,在一些大型的电商网站中,有一些商品详情页面上,需要的聚合多种不同维度的数据,比如像下面一张图,
大家试一下,初次进入某个商品详情页面,如果网速不是太好的话你会发现加载的速度是比较慢的,据说,为了解决这样的问题,后来许多架构师在这个问题上开始偏向于使用维度化数据聚合+缓存+页面静态化综合解决这个问题,其中静态化模板技术在这里得到了很好的应用,至于里面的详细内容大家可以找找资料学习一下,其主要的思想就是将包含了大量待渲染的数据根据相关的业务参数进行页面提前渲染成静态模板,通过nginx访问时可以大大提升访问的速度,当然,为了改善总体的页面渲染速度,页面静态化技术只是其中的一方面,背后的架构思想是很值得我们学习和探究的!
-
Nginx发布静态资源
2021-01-14 10:45:17Nginx发布静态资源 -
SpringBoot页面没加载静态资源,页面没有样式图片等静态资源以及加载自定义静态资源
2018-10-28 22:08:37在SpringBoot中,对静态资源的访问路径作了约定,SpringBoot的默认静态资源路径包括classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ 因此,在引用静态资源的... -
Nginx 作为静态资源服务器,配置静态资源下载
2020-05-30 08:52:33为了减轻服务端下载的压力,我们可以把一些静态资源放置在服务器中,通过配置nginx进行资源下载。 通过访问下面地址直接下载静态资源picture.png和BiJieClient.apk: http://example.com/wallpaper/picture.png ... -
利用Nginx做动静态资源分离,分别处理静态资源和动态资源
2018-06-11 18:39:24Nginx服务器的强大功能可以有很多用途,例如不仅可以做静态资源的web服务器,还可以以集群方式处理动态资源的请求,本文就大致建立这些功能;一,利用Nginx做动静态资源分离,处理静态资源和动态资源目的是利用nginx... -
SpringBoot静态资源处理以及自定义静态资源映射
2019-05-13 23:02:08了解SpringBoot自动配置的都应该知道在...SpringBoot对静态资源处理也一样,直接看源码 WebMvcAutoConfiguration类中定义了一个静态内部类WebMvcAutoConfigurationAdapter,该类有一个addResourceHandlers方法,该方... -
SpringBoot静态资源访问
2021-01-11 01:05:35静态资源目录二.静态资源访问原理三.静态资源访问前缀四.改变静态资源路径五.WebJars1.WebJars简单介绍2.访问WebJars下的静态资源 一.静态资源目录 当前项目的类路径下只要有/static (or /public or /resources or /... -
SpringBoot访问html和js等静态资源配置
2018-06-14 10:07:43把静态资源放到resources/static下,这是springboot静态资源默认访问路径。 在浏览器直接ip:端口/静态资源 就可以了 下面的废话是好久之前写的,不用看了。。。 SpringBoo推荐使用thymeleaf模板作用前端页面... -
IDEA+SpringBoot项目下静态资源访问路径陷阱:静态资源访问404
2020-01-13 23:45:40IDEA+SpringBoot项目下静态资源访问路径陷阱:静态资源访问404今天使用SpringBoot项目的时候遇到静态资源访问不到的问题——404。接下来就是这篇博客所说的问题了——>静态资源访问不到,404。 今天使用... -
Nginx实现静态资源服务器
2017-05-31 21:33:16我们在上一篇文章中已经分析了实现静态资源服务器的多种思路。本篇文章记录 使用Nginx实现静态资源服务器的步骤。首先需要安装Nginx和了解Nginx的配置文件。CentOS系统可参考如下帖子:Nginx-------Nginx的安装和多... -
静态资源CDN
2017-07-28 09:03:17静态资源(static resources) : js , css , img 等非服务器动态运行生成的文件 在一般的网站中,静态资源使用频率高,流量占用大。对于有追求(访问量稍大)的网站,都会把静态资源放置到CDN服务器,不占用业务... -
IDEA中javaWeb项目静态资源无法访问/静态资源没有部署到Tomcat
2020-03-23 23:31:46关于IDEA没有将项目静态资源拷贝到tomcat的问题 因为没有将放置静态资源的目录设置为资源目录,所以没有被拷贝至tomcat下 解决方法 File -> Project Structure… -> Modules 选择静态资源目录(一般叫Web... -
springboot 静态资源无法访问以及添加静态资源无法立即访问
2019-12-26 10:26:53springboot 静态资源无法访问 在一个项目中WebMvcConfigurationSupport只能存在一个,多个的时候,只有一个会生效。(按名称排序后第一个的) 1.SpringBoot 的 @EnableAutoConfiguration 会启用自动配置类 2.... -
SpringBoot之静态资源访问
2018-05-04 13:51:20SpringBoot之静态资源访问 1.springboot访问静态资源的几种方式 (1)在src/main/resources/目录下创建 static文件夹 (2)在src/main/resources/目录下创建 resources文件夹 (3)在src/main/resources/目录下... -
SpringMVC访问静态资源的三种方式
2017-10-11 22:55:58如果你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了。 问题原因:罪魁祸首是web.xml下对... -
静态资源重定向
2018-04-09 00:24:46空余时间模仿springmvc配置静态资源访问功能,但是测试时却报重定向次数过多的错误查看springmvc源码和资料发现,静态资源的重定向要通过ServletContext对象的getNamedDispatcher方法进行重写定向... -
springboot中添加静态资源的方式,默认的静态资源文件夹有哪些
2020-04-28 10:49:13通过webjar的方式引入静态资源 访问popular webjar网站,里面有大量的最常用的静态资源webjar,以jar包的形式导入静态资源。类如jquery、vue、bootstrap等,都可以找到各种版本的依赖。 以jquery3.5.0为例:在pom... -
SpringMVC指定静态资源路径
2019-04-17 20:35:20指定静态资源路径 当SpringMVC的DispatcherServlet配置的映射路径是/时,所有的请求都将被SpringMVC拦截,如果我们想访问某个路径下的静态资源其实是不能直接访问的。基于这种情况,SpringMVC提供了<mvc:... -
静态资源和动态资源区别
2019-04-28 22:16:15静态资源:可以理解为前端的固定页面,这里面包含HTML、CSS、JS、图片等等,不需要查数据库也不需要程序处理,直接就能够显示的页面,如果想修改内容则必须修改页面,但是访问效率相当高。 动态资源:需要程序处理... -
静态资源&动态资源
2018-02-08 15:32:27静态资源和动态资源的概念 静态资源: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 浏览器可以看得懂,它可以有变量。一般客户端发送请求到web服务器,web服务器从内存在取到相应的... -
SSM框架下释放静态资源与引入静态资源
2018-02-12 13:24:11今天打开eclipse 运行之前基于Spring+SpringMvc+Mybatis的一个测试练习项目,跑起来之后在页面访问所有的引入资源都没有...但是依然不起作用,突然想到了自己搭建的是ssmx项目是不是把静态资源给拦截了啊!!! 在... -
SpringBoot【静态资源】
2019-05-11 17:50:57SpringBoot中的静态资源的存放路径和我们前面的web项目还是有些区别的,本文我们来介绍下SpringBoot中的静态资源。 springboot访问静态资源,默认有两个默认目录, 一个是 classpath/static 目录 (src/mian... -
Spring Boot 2.x 集成 Thymeleaf 快速入门、静态资源映射规则
2018-07-15 15:52:101、本文承接《Spring Boot Web开发简介及webajrs 和 静态资源映射规则》,以里面的“dog”项目进行本次学习 2、以前开发 web 项目时,只需将静态的 "html” 页面后缀名修改为“jsp”,... -
Nginx 搭建静态资源服务
2020-07-26 19:57:17利用 Nginx 搭建静态资源服务 -
何为静态资源,何为动态资源
2019-03-20 11:06:311.静态资源和动态资源的概念 简单来说: 静态资源:一般客户端发送请求到web服务器,web服务器从内存在取到相应的文件,返回给客户端,客户端解析并渲染显示出来。 动态资源:一般客户端请求的动态资源,先将请求交...
-
社会影响力投资与可持续发展会议于1月29日在香港全直播
-
微信支付2021系列之付款码支付一学就会java版
-
DBA知道这17条Linux命令
-
iqoptionapi:IQ选项API-源码
-
基于Android智能快递信息处理客户端设计与实现
-
sqlite-vtfunc:使用Python实现SQLite表值函数-源码
-
Java_JDK12
-
出一错误
-
Python专题精讲 企业级应用日志管理
-
Demo.unitypackage
-
allegro17.4转pads.doc
-
Spring Boot2.X仿朋友圈PC版系统实战_架构1.0
-
nvidia-docker-2.0.2.zip
-
沐风老师Scratch3.0快速入门视频教程
-
WEB安全渗透测试1-Msql基础
-
Vue项目:pdf.js在线显示pdf文件
-
InfoPower XE5 Full Complete(成功安装).rar
-
数据结构——图——迪杰斯特拉(Dijkstra )算法
-
一类通用的装甲装备自动测试系统体系结构
-
JAVAEE主流框架之MyBatis框架实战开发教程(源码+讲义)