[SPRING] Spring MVC 요청없이 WEB-INF하에 파일 가져 오기
SPRINGSpring MVC 요청없이 WEB-INF하에 파일 가져 오기
/WEB-INF/.../에서 파일 (또는 디렉토리)을 확보하려고합니다.
요청을 벗어났습니다. 서버를 시작할 때로드 된 bean에서 필요합니다.
내가 찾을 수있는 모든 솔루션은 ClassPathXmlApplicationContext를 사용하는 XML 파일이나 서블릿 컨텍스트를 얻거나 현재 실행중인 클래스를 사용하기위한 요청을 원합니다. 못생긴 것 같아.
어떻게 파일 ( "/ WEB-INF / myDir /")을 얻을 수 있습니까? 방법이 있어야합니다, 안돼!?
해결법
-
==============================
1.빈이 웹 애플리케이션 컨텍스트에서 선언되는 한 ServletContext의 인스턴스를 얻을 수있다 (ServletContextAware를 사용하거나 자동 와이어 링으로).
빈이 웹 애플리케이션 컨텍스트에서 선언되는 한 ServletContext의 인스턴스를 얻을 수있다 (ServletContextAware를 사용하거나 자동 와이어 링으로).
그런 다음 webapp 디렉토리의 파일에 직접 액세스 (getResourceAsStream (), getRealPath ())하거나 ServletContextResource를 사용하여 액세스 할 수 있습니다.
모모 편집 :
@Autowired ServletContext servletContext; ... myMethod() { File rootDir = new File( servletContext.getRealPath("/WEB-INF/myDIR/") ); }
-
==============================
2.Spring DefaultResourceLoader와 Resource를 사용하여 WEB-INF 또는 * .jar 파일의 모든 리소스를 읽습니다. 매력처럼 작동하십시오. 행운을 빕니다!
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()); }
-
==============================
3.
ClassLoader classLoader = getClass().getClassLoader(); File file = new File(classLoader.getResource("files/test.xml").getFile());
"files"폴더는 "main / resources"폴더의 하위 폴더 여야합니다.
-
==============================
4.파일이 WEB_INF \ classes 디렉토리에 있으면 클래스 경로 자원을 사용할 수 있습니다. src / main / resources 디렉토리에있는 파일들이 일반적인 maven 빌드를 사용하여 복사되는 곳은 ...
파일이 WEB_INF \ classes 디렉토리에 있으면 클래스 경로 자원을 사용할 수 있습니다. src / main / resources 디렉토리에있는 파일들이 일반적인 maven 빌드를 사용하여 복사되는 곳은 ...
import org.springframework.core.io.Resource ... final Resource yourfile = new ClassPathResource( "myfile.txt");
-
==============================
5.ServletContext가 아닌 Service에서 액세스하려는 경우 다음과 같이 할 수 있습니다.
ServletContext가 아닌 Service에서 액세스하려는 경우 다음과 같이 할 수 있습니다.
final DefaultResourceLoader loader = new DefaultResourceLoader(); Resource resource = loader.getResource("classpath:templates/mail/sample.png"); File myFile = resource.getFile();
마지막 행은 IOException을 throw하여 catch / rethrow 할 필요가 있습니다.
파일의 위치는 다음과 같습니다. src \ main \ resources \ templates \ mail \ sample.png
-
==============================
6.완전히 당신의 질문과 관련이 없지만 ... Spring과 같은 웹 애플리케이션의 어느 곳에서나 속성을로드하는 데 사용되는 보편적 인 해결책이있다 (WEB-INF / ..., classpath : ..., file : ... 지원). Is는 ServletContextResourcePatternResolver를 사용하는 것을 기반으로합니다. ServletContext가 필요합니다.
완전히 당신의 질문과 관련이 없지만 ... Spring과 같은 웹 애플리케이션의 어느 곳에서나 속성을로드하는 데 사용되는 보편적 인 해결책이있다 (WEB-INF / ..., classpath : ..., file : ... 지원). Is는 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(); }
conext가 아직로드되지 않은 동안 위의 메소드를 내 사용자 정의 서블릿 컨텍스트 리스너에서 사용했습니다.
-
==============================
7.
request.getSession().getServletContext().getResourceAsStream("yourfile.pdf");
from https://stackoverflow.com/questions/11210465/spring-mvc-get-file-under-web-inf-without-a-request by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] HTTPS / HTTP 포트를 실행하기 위해 Spring Boot를 설정하는 방법 (0) | 2019.03.05 |
---|---|
[SPRING] 스프링 데이터 JPA에서 LazyInitializationException을 해결하는 방법? (0) | 2019.03.05 |
[SPRING] Spring 애플리케이션을위한 jboss-deployment-structure.xml이 필요한 이유는 무엇입니까? (0) | 2019.03.05 |
[SPRING] Spring은이 종속성에 대한 autowire 후보가 될 수있는 적어도 하나의 bean을 예상했다. (0) | 2019.03.05 |
[SPRING] 봄 보안 LDAP 및 기억하기 (0) | 2019.03.05 |