我有一个带有嵌入式 Tomcat 的 spring boot 应用程序。 我想通过 tomcat 目录列表从不同的位置公开一些图像文件和文件夹。所以我在名为
的配置文件中添加了以下内容public class AppConfig extends WebMvcConfigurerAdapter
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/images/**").addResourceLocations("file:///xxx/yyy/images/");
}
}
如果我知道名称,我现在可以访问单个图像。
示例:localhost:8080/images/file.jpg。
但由于目录列表默认为 false,我无法通过“localhost:8080/images/”访问图像列表以了解所有可用图像。
我也尝试了以下选项来添加列表,但没有用。
public class MyApplication implements ServletContextInitializer{
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("listings", "true");
}
}
最佳答案
针对 Spring 2.1 进行了更新
import org.apache.catalina.Context;
import org.apache.catalina.Wrapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;
@Component
public class MyTomcatWebServerCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Value("${tomcat.file.base}") // C:\\some\\parent\\child
String tomcatBaseDir;
@Override
public void customize(TomcatServletWebServerFactory factory) {
// customize the factory here
TomcatContextCustomizer tomcatContextCustomizer = new TomcatContextCustomizer() {
@Override
public void customize(Context context) {
String parentFolder = tomcatBaseDir.substring(0,tomcatBaseDir.lastIndexOf("\\"));
String childFolder = tomcatBaseDir.substring(tomcatBaseDir.lastIndexOf("\\") + 1);
context.setDocBase(parentFolder);
Wrapper defServlet = (Wrapper) context.findChild("default");
defServlet.addInitParameter("listings", "true");
defServlet.addInitParameter("readOnly", "false");
defServlet.addMapping("/"+ childFolder + "/*");
}
};
factory.addContextCustomizers(tomcatContextCustomizer);
}
}
关于java - 用于 spring-boot 应用程序的嵌入式 Tomcat 目录列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35004870/