springboot-为内置tomcat设置虚拟目录

需求

项目使用springboot开发,以jar包方式部署。项目中文件上传均保存到D判断下的upload目录下。

在浏览器中输入http://localhost:8080/upload/logo_1.jpg能访问到D盘upload目录下的logo_1.png图片

解决方法

由于使用jar包方式,无法使用为tomcat配置虚拟目录的方式,需为springboot内置tomcat设置虚拟目录。

实现

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/upload/**").addResourceLocations("file:D:/upload/");
    }

}

启动项目,在浏览器中输入http://localhost:8080/upload/logo_1.jpg,即可正常访问图片了。

上面的例子中拦截器拦截的请求和文件上传目录均是写死的,可将其放置application.properties配置文件 中, 便于修改。修改后代码如下所示:

application.properties

server.port=8080

#静态资源对外暴露的访问路径
file.staticAccessPath=/upload/**
#文件上传目录
file.uploadFolder=D:\\upload

FileUploadProperteis.java

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 文件上传相关属性
 * @create 2018-04-22 13:58
 **/
@Component
@ConfigurationProperties(prefix = "file")
public class FileUploadProperteis {

    //静态资源对外暴露的访问路径
    private String staticAccessPath;

    //文件上传目录
    private String uploadFolder ;

    public String getStaticAccessPath() {
        return staticAccessPath;
    }

    public void setStaticAccessPath(String staticAccessPath) {
        this.staticAccessPath = staticAccessPath;
    }

    public String getUploadFolder() {
        return uploadFolder;
    }

    public void setUploadFolder(String uploadFolder) {
        this.uploadFolder = uploadFolder;
    }
}

WebMvcConfig.java

import com.lnjecit.springboothelloworld.properties.FileUploadProperteis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Autowired
    private FileUploadProperteis fileUploadProperteis;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(fileUploadProperteis.getStaticAccessPath()).addResourceLocations("file:" + fileUploadProperteis.getUploadFolder() + "/");
    }

}

demo下载地址:https://github.com/linj6/springboot-learn/tree/master/springboot-helloworld

参考资料

1、https://liuyanzhao.com/7599.html

原文地址:https://www.cnblogs.com/zuidongfeng/p/8859235.html

时间: 2024-08-06 16:19:55

springboot-为内置tomcat设置虚拟目录的相关文章

模拟Springboot二:内置tomcat

既然要将tomcat内置到项目中,并且能够成功的启动项目就要知道 tomcat  做了哪些事情 ,那么就必须先搞明白 一个 普通的web项目是如何被我们本地配置的tomcat启动并运行的 (1). 先告诉tomcat 要运行哪些项目 (也就是在使用eclipse.idea启动项目前对tomcat的配置工作.或linux上将编译后的war包拷贝到webapp下)    从而在 后面在启动tomcat时,tomcat就会加载编译后的.class项目 (2). tomcat在加载编译后的项目时也会加载

Tomcat设置虚拟目录的方法, 不修改server.xm

所在小组使用的就是这样的形式开发,这样切换开发环境,测试环境,正式环境就只需要修改project.xml文件就行了.project.xml命名是随意的,访问的时候就使用这个名字来访问. 在tomcat文件夹的 conf\catalina\localhost增加project .xml文件 文件内容: <Context path="/project" reloadable="true" docBase="E:\javastudio\oob"

SpringBoot 取消内置Tomcat启动,改用外接Tomcat

1,修改pom.xml 1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-web</artifactId> 4 <!-- 去除内嵌tomcat --> 5 <exclusions> 6 <exclusion> 7 <groupId>org.springframe

Tomcat设置虚拟目录

需求 在做B/S的应用时,经常会遇到一个问题,网站上传的一些图片不是保存在应用服务器下面,而是保存在别的目录,但是页面中又需要能访问到这些图片.这时,应用服务器的"虚拟目录"就派上了用场. [转载使用,请注明出处:http://blog.csdn.net/mahoking] 解决方案 本文[以apache-tomcat-5.5为例]打开tomcat的配置文件,路径是:apache-tomcat-5.5/conf/server.xml.找到HOST标签,在<HOST><

springboot内置tomcat配置虚拟路径

在Springboot中默认的静态资源路径有:classpath:/METAINF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,从这里可以看出这里的静态资源路径都是在classpath中(也就是在项目路径下指定的这几个文件夹) 试想这样一种情况:一个网站有文件上传文件的功能,如果被上传的文件放在上述的那些文件夹中会有怎样的后果? 网站数据与程序代码不能有效分离: 当项目被打包成一个.jar文件部署时

如何优雅的使用springboot项目内置tomcat

问题:以前,我们在使用SSM框架的时候,都是通过外置的tomcat进行部署,如果想访问文件,直接拖到项目的根目录下面即可.假如我们需要放一个apk文件,然后让别人下载,只需将apk放到项目根目录下面,浏览器通过http://ip:port/projectName/xx.apk即可下载.现在使用spring boot进行项目开发,由于springboot 内嵌了tomcat,为了方便部署,因此我们大多数情况下只需将项目打成jar包运行.这样就存在一个问题,我们该如何将这个apk放到服务器上,别人通

Spring Boot2.0之 原理—创建内置Tomcat容器

前面所述的https://www.cnblogs.com/toov5/p/9823728.html 中的第一条先不赘述了,就是玩了maven 重点介绍后两条 首先内置Tomcat: SpringBoot中内置tomcat服务器 Java操作创建tomcat 我们点击pom中的 持续点击到 继续点击会发现: 这个依赖 为我所需~ 注意:Springboot2.0之后 Tomcat8.0以上版本 引入到自己的pom中(类似的还有其他的依赖包): <project xmlns="http://m

Spring Boot 添加jersey-mvc-freemarker依赖后内置tomcat启动不了解决方案

我在我的Spring Boot 项目的pom.xml中添加了jersey-mvc-freemarker依赖后,内置tomcat启动不了. 报错信息如下: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletCon

SpringBoot 常用配置 静态资源访问配置/内置tomcat虚拟文件映射路径

Springboot 再模板引擎中引入Js等文件,出现服务器拒绝访问的错误,需要配置过滤器 静态资源访问配置 @Configuration @EnableWebMvc public class StaticResourceConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHand