Springboot内置tomcat配置虚拟路径过程解析
在Springboot中默认的静态资源路径有:classpath:/METAINF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,从这里可以看出这里的静态资源路径都是在classpath中(也就是在项目路径下指定的这几个文件夹)
试想这样一种情况:一个网站有文件上传文件的功能,如果被上传的文件放在上述的那些文件夹中会有怎样的后果?
- 网站数据与程序代码不能有效分离;
- 当项目被打包成一个.jar文件部署时,再将上传的文件放到这个.jar文件中是有多么低的效率;
- 网站数据的备份将会很痛苦。
此时可能最佳的解决办法是将静态资源路径设置到磁盘的基本个目录。在Springboot中可以直接在配置文件中覆盖默认的静态资源路径的配置信息:application.properties配置文件如下:
spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:这里写自己的上传文件路径(注意要以/结尾)
spring.mvc.static-path-pattern=/**表示所有的访问都经过静态资源路径;
spring.resources.static-locations在这里配置静态资源路径,前面说了这里的配置是覆盖默认配置,所以需要将默认的也加上否则static、public等这些路径将不能被当作静态资源路径,在这个最末尾的file:${web.upload-path}之所有要加file:是因为指定的是一个具体的硬盘路径,其他的使用classpath指的是系统环境变量。
由于前面已经在静态资源路径中上传了一个名为1.jpg的图片,也使用server.port=1122设置了端口号为1122,所以可以通过浏览器打开:http://localhost:1122/1.jpg访问到刚刚上传的图片。但是要注意,如果你在springboot的配置文件中加了属性server.context-path,即项目名,那么访问的时候一定要加上这个配置的属性值,不然404.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
SpringBoot项目打包发布到外部tomcat(出现各种异常的解决)
先说遇到问题的情景: 初次尝试使用spring boot框架写了个小web项目,在Intellij IDEA中能正常启动运行.使用maven 运行install,生成war包,发布到本机的tomcat下,出现异常,主要的异常信息是 .......LifeCycleException.经各种搜索,找到答案. spring boot因为内嵌tomcat容器,所以可以通过打包为jar包的方法将项目发布,但是如何将spring boot项目打包成可发布到tomcat中的war包项目呢? 1. 既然需要
-
SpringBoot打成war包在tomcat或wildfly下运行的方法
springboot默认的打包方式为jar包,jar包的有优点是不需要更改的配置,并且内嵌了tomcat,如果打成jar包直接可以丢到docker中运行测试.但是考虑到前端代码只能打成war包,因此干脆也将后端代码打成war包和前端的代码一起放在tomcat容器中的webapps中运行就好了. SpringBoot打包形式 默认情况下,创建的SpringBoot项目是按照jar包形式来进行打包的.同时,内置了tomcat的容器. 那么,此时如果想让springboot打包成war包,并部署到wi
-
SpringBoot2.1.3修改tomcat参数支持请求特殊符号问题
最近遇到一个问题,比如GET请求中,key,value中带有特殊符号,请求会报错,见如下URL: http://xxx.xxx.xxx:8081/aaa?key1=val1&a.[].id=123&b=a[1] 现在,我们进入boot启动类,添加如下代码即可: public class DemoApp { public static void main(String[] args) { SpringApplication.run(DemoApp.class, args); } @Bean
-
SpringBoot中如何启动Tomcat流程
前面在一篇文章中介绍了 Spring 中的一些重要的 context.有一些在此文中提到的 context,可以参看上篇文章. SpringBoot 项目之所以部署简单,其很大一部分原因就是因为不用自己折腾 Tomcat 相关配置,因为其本身内置了各种 Servlet 容器.一直好奇: SpringBoot 是怎么通过简单运行一个 main 函数,就能将容器启动起来,并将自身部署到其上 .此文想梳理清楚这个问题. 我们从SpringBoot的启动入口中分析: Context 创建 // Crea
-
Java项目开启远程调试的方法步骤(tomcat、springboot)
当我们运行一个项目的时候,一般都是在本地进行debug.但是如果是一个分布式的微服务,这时候我们选择远程debug是我们开发的利器. 环境 apache-tomcat-8.5.16 Linux 如何启用远程调试 tomcat开启远程调试 方法 切换到你的tomcat的bin目录/apache-tomcat-8.5.16/bin 下,执行: ./catalina.sh jpda start 执行上面的命令就可以开启远程debug了,如果想配置一些信息,比如端口号什么的,请参考下面的说明. 参数说明
-
spring boot项目打包成war在tomcat运行的全步骤
前言 使用maven创建的springboot项目,默认是jar包,springboot还有自己带的tomcat.现在需要将项目打包,并部署到服务器tomcat下面. 下面就让我们来一起把spring-boot项目按照平常的web项目一样发布到tomcat容器下,下面话不多说了,来一起看看详细的介绍吧 一.修改打包形式 在pom.xml里设置 <packaging>war</packaging> 二.移除嵌入式tomcat插件 在pom.xml里找到spring-boot-star
-
spring-boot-starter-web更换默认Tomcat容器的方法
Spring Boot支持容器的自动配置,默认是Tomcat,当然我们也是可以进行修改的. 我们知道Spring Boot支持容器的自动配置,默认是Tomcat,当然我们也是可以进行修改的: 1.首先我们排除spring-boot-starter-web依赖中的Tomcat:在pom文件中排除tomcat的starter <dependency> <groupId>org.springframework.boot</groupId> <artifactId>
-
Springboot内置tomcat配置虚拟路径过程解析
在Springboot中默认的静态资源路径有:classpath:/METAINF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,从这里可以看出这里的静态资源路径都是在classpath中(也就是在项目路径下指定的这几个文件夹) 试想这样一种情况:一个网站有文件上传文件的功能,如果被上传的文件放在上述的那些文件夹中会有怎样的后果? 网站数据与程序代码不能有效分离: 当项目被打包成一个.jar文件部署时
-
浅谈springboot内置tomcat和外部独立部署tomcat的区别
前两天,我去面了个试,面试官问了我个问题,独立部署的tomcat跟springboot内置的tomcat有什么区别,为什么存在要禁掉springboot的tomcat然后将项目部署到独立的tomcat当中? 我就想,不都一个样?独立部署的tomcat可以配置优化?禁AJP,开多线程,开nio?而且springboot内置的tomcat多方便,部署上服务器写个java脚本运行即可.现在考虑下有什么条件能优于内置tomcat的. 1.tomcat的优化配置多线程?内置的也可以配置多线程 server
-
SpringBoot内置tomcat启动原理详解
前言 不得不说SpringBoot的开发者是在为大众程序猿谋福利,把大家都惯成了懒汉,xml不配置了,连tomcat也懒的配置了,典型的一键启动系统,那么tomcat在springboot是怎么启动的呢? 内置tomcat 开发阶段对我们来说使用内置的tomcat是非常够用了,当然也可以使用jetty. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo
-
SpringBoot内置tomcat调优测试优化
问题 怎么配置springBoot 内置tomcat,才能使得自己的服务效率更高呢? 基础配置 Spring Boot 能支持的最大并发量主要看其对Tomcat的设置,可以在配置文件中对其进行更改.我们可以看到默认设置中,Tomcat的最大线程数是200,最大连接数是10000. 这个不同SpringBoot 版本可能有所细微差别.本文测试基于Springboot 2.0.7.RELEASE 默认配置 /** * Maximum amount of worker threads. */ priv
-
springboot内置tomcat调优并发线程数解析
目录 前言 参数 线程池核心线程数 线程池最大线程数 请求最大连接数 accept-count tomcat线程池处理机制 总结 前言 本文解析springboot内置tomcat调优并发线程数的一些参数,并结合源码进行分析 参数 线程池核心线程数 server.tomcat.min-spare-threads:该参数为tomcat处理业务的核心线程数大小,默认值为10 线程池最大线程数 server.tomcat.max-threads:该参数为tomcat处理业务的最大线程数大小,默认值为2
-
springboot内置tomcat之NIO处理流程一览
目录 前言 tomcat组件 Acceptor组件 Poller 总结 大致流程为 相较于BIO模型的tomcat,NIO的优势分析 前言 springboot内置的tomcat目前默认是基于NIO来实现的,本文介绍下tomcat接受请求的一些组件及组件之间的关联 tomcat组件 本文只介绍NIO中tomcat的组件 我们直接看NIO的核心类NioEndpoint的startInternal方法 Acceptor组件 public void startInternal() throws Exc
-
SpringBoot应用启动内置Tomcat的过程源码分析
Connector启动过程 Connector是Tomcat提供的类. // 通过此 Connector 开始处理请求 @Override protected void startInternal() throws LifecycleException { // Validate settings before starting if (getPortWithOffset() < 0) { throw new LifecycleException(sm.getString( "coyote
-
Springboot 使用内置tomcat禁止不安全HTTP的方法
Springboot 内置tomcat禁止不安全HTTP方法 1.在tomcat的web.xml中可以配置如下内容 让tomcat禁止不安全的HTTP方法 <security-constraint> <web-resource-collection> <url-pattern>/*</url-pattern> <http-method>PUT</http-method> <http-method>DELETE</ht
-
解决SpringBoot内嵌Tomcat并发容量的问题
一.SpringBoot内嵌Tomcat默认配置与优化 在做一个关于秒杀系统的模块,进行Jmeter压测性能的时候发现tomcat并发上不去,深入原因找到可供优化的地方,力求最大性能. 发现并发容器问题 对单接口进行6000线程压测,每个线程请求5次,线程在5秒内创建完毕,当进行一半的时候,已经出现了请求响应时间过大及其错误率达到了43%.这个并发容量对于配置比较好点的服务器相对来说有点弱. 深入SpringBoot底层了解原因 在SpringBoot官方文档中提到了关于元数据的配置 可以看到,
-
传统tomcat启动服务与springboot启动内置tomcat服务的区别(推荐)
spring整合springmvc spring整合springmvc中web.xml配置如下,tomcat在启动过程中会加载web.xml中的内容,ContextLoaderListener实现了tomcat里面的ServletContextListener接口,所以在tomcat容器启动过程通过ContextLoaderListener来进行spring容器的初始化操作,并将classpath:spring/applicationContext-*.xml指定下的spring配置文件加载,该
随机推荐
- VB简单实现防止文件被改写
- 开通局域网共享(访问本机无需验证即可进入的bat和注册表文件
- 详解Oracle中的隐含参数_disable_logging
- 一个关于jqGrid使用的小例子(行按钮)
- Java中四种遍历List的方法总结(推荐)
- JS实现距离上次刷新已过多少秒示例
- 漂亮实用的页面loading(加载)封装代码
- jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
- Bootstrap进度条实现代码解析
- JSP 中使用cache取值出错解决办法
- mysql sql语句隐藏手机号码中间四位的方法
- mysql 5.7版本修改密码的简单方法
- Android 背景透明度设置总结
- node.js集成百度UE编辑器
- Shell脚本自动更新hosts实现免翻墙访问google
- 如何使用JSP+MySQL创建留言本(一)
- 利用jsonp与代理服务器方案解决跨域问题
- 让回调函数 showResponse 也带上参数的代码
- VBS教程:方法-Delete 方法
- C#实现保存文件时重名自动生成新文件的方法