我想抓住/WEB-INF/.../
在请求之外。我需要在服务器启动时加载的bean中。
我能找到的所有解决方案都要求使用ClassPathXmlApplicationContext
的XML文件或获取servlet上下文或使用当前执行类的请求。对我来说似乎很难看。
如何获得File("/WEB-INF/myDir/")
。必须有一种方法,不!!
答案 0 :(得分:43)
只要您的bean在Web应用程序上下文中声明,您就可以获得ServletContext
的实例(使用ServletContextAware
或自动装配)。
然后,您可以直接(getResourceAsStream()
,getRealPath()
)或使用ServletContextResource
访问webapp目录中的文件。
编辑momo:
@Autowired
ServletContext servletContext;
... myMethod() {
File rootDir = new File( servletContext.getRealPath("/WEB-INF/myDIR/") );
}
答案 1 :(得分:7)
我使用 Spring DefaultResourceLoader 和 Resource 来读取WEB-INF或* .jar文件中的任何资源。像魅力一样工作。祝你好运!
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
public static void myFunction() throws IOException {
final DefaultResourceLoader loader = new DefaultResourceLoader();
LOGGER.info(loader.getResource("classpath:META-INF/resources/img/copyright.png").exists());
Resource resource = loader.getResource("classpath:META-INF/resources/img/copyright.png");
BufferedImage watermarkImage = ImageIO.read(resource.getFile());
}
答案 2 :(得分:3)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="time"></div>
“files”文件夹应该是“main / resources”文件夹的子文件
答案 3 :(得分:2)
如果文件位于WEB_INF\classes
目录中,则可以使用classpath资源。使用普通的maven构建将src/main/resources
目录中的任何文件复制到哪个...
import org.springframework.core.io.Resource
...
final Resource yourfile = new ClassPathResource( "myfile.txt");
答案 4 :(得分:0)
如果您只想从服务(而不是通过ServletContext)访问它,可以这样做:
final DefaultResourceLoader loader = new DefaultResourceLoader();
Resource resource = loader.getResource("classpath:templates/mail/sample.png");
File myFile = resource.getFile();
请注意,最后一行可能会抛出IOException
,因此您需要捕获/重新抛出
注意,文件在这里:
src\main\resources\templates\mail\sample.png
答案 5 :(得分:-1)
与您的问题不完全相关,但......
这里有一些通用的例子,我用来从Web应用程序中的任何地方加载属性,比如Spring(支持WEB-INF / ...,classpath:...,file:...)。是基于使用ServletContextResourcePatternResolver
。您需要ServletContext
。
private static Properties loadPropsTheSpringWay(ServletContext ctx, String propsPath) throws IOException {
PropertiesFactoryBean springProps = new PropertiesFactoryBean();
ResourcePatternResolver resolver = new ServletContextResourcePatternResolver(ctx);
springProps.setLocation(resolver.getResource(propsPath));
springProps.afterPropertiesSet();
return springProps.getObject();
}
我在自定义servlet上下文侦听器中使用了上述方法,而conext尚未加载。
答案 6 :(得分:-1)
request.getSession().getServletContext().getResourceAsStream("yourfile.pdf");