처음 두 장에서는 RESTFUL에 대한 Spring Boot의 지원을 공유했지만 RESTFul 인터페이스는 일반적으로 데이터 만 반환합니다. 웹 개발을 할 때 종종 HTML, 사진, CSS 등과 같은 정적 리소스가 많이 있습니다. 그러면 정적 리소스를 어떻게 프론트 엔드로 반환합니까? 전에 웹 개발을 한 학생들은 이전에 작성한 웹 프로젝트 아래에 WebApp 디렉토리가있을 것이라는 것을 알아야 하며이 디렉토리에 정적 리소스를 배치하여 직접 액세스 할 수 있습니다. 그러나 Spring Boot 기반 프로젝트에는이 디렉토리가 없으므로 어떻게 처리해야합니까?
1. 가장 어리석은 방법
먼저 바보 같은 길을 공유합시다.이 방법은 스트림을 통해 정적 자원을 프론트 엔드로 직접 반환하는 것입니다. Maven Project의 리소스의 루트 디렉토리에 HTML 디렉토리를 작성한 다음 HTML 파일을이 디렉토리에 배치하고 / static /로 시작하는 모든 액세스 경로가 디렉토리의 정적 리소스에 액세스하도록 지정합니다. 구현은 다음과 같습니다.
@ControllerPublic 클래스 staticResourceController {@requestmapping ( "/static/**") public void gethtml (httpservletrequest request, httpservletResponse 응답) {string uri = request.getRequesturi (); 문자열 [] arr = uri.split ( "static/"); 문자열 resourcename = "index.html"; if (arr.length> 1) {resourcename = arr [1]; } string url = staticResourceController.class.getResource ( "/"). getPath () + "html/" + resourcename; try {filereader reader = new Filereader (새 파일 (URL)); bufferedReader br = new bufferedReader (Reader); StringBuilder sb = new StringBuilder (); 문자열 line = br.readline (); while (line! = null) {sb.append (line); line = br.readline (); } response.getOutputStream (). 쓰기 (sb.toString (). getBytes ()); 응답 .FlushBuffer (); } catch (ioexception e) {e.printstacktrace (); }}}구현 프로세스는 매우 간단합니다. 이는 먼저 리소스 URI를 경로에서 분리 한 다음 정적 디렉토리에서 파일을 읽고 프론트 엔드로 출력하는 것입니다. 간단한 데모 일 뿐이므로 여기에서 텍스트 유형 파일 만 처리되며 이미지 파일도 비슷하게 처리 할 수 있습니다. 물론, 우리는 실제로 이것을하지 않을 것이며, Spring Boot는 확실히 더 나은 솔루션을 가질 것입니다. 그러나이 방법은 약간 바보이지만 실제로는 가장 필수적인 것입니다. 프레임 워크가 얼마나 편리하게 이런 종류의 문제를 처리하는 데 도움이 되더라도 프레임 워크를 제외하고는 여전히 웹 프로젝트를 능숙하게 작성할 수 있어야합니다. 구현 원칙을 아는 것만으로 만 문제가 발생할 때 문제를 처리 할 수 있습니다. 이제 Spring Boot의 정적 리소스 지원을 살펴 보겠습니다.
2. 스프링 부팅 기본 정적 자원 액세스 방법
Spring Boot는 기본적으로 4 개의 디렉토리로 파일에 직접 액세스 할 수 있습니다.
ClassPath :/public/
ClassPath :/Resources/
classpath :/static/
ClassPath :/meta-info/resouces/
이제 리소스 파일 리소스 디렉토리에서 다음 4 개의 디렉토리를 만듭니다.
Blue Bar의 리소스 폴더 리소스는 ClassPath의 폴더 ClassPath :/Resources와 다릅니다. 파란색 막대 아래의 리소스는 디렉토리의 파일이 리소스 파일임을 나타냅니다. 포장시 디렉토리의 모든 파일이 포장됩니다. 이 이름은 변경 될 수 있습니다. pom.xml에서 리소스 디렉토리를 지정할 수 있습니다.
<Resources> <Resource> <directory> src/main/resources </directory> </resource> </rought>
ClassPath의 리소스는 Spring Boot의 기본 정적 자원 폴더 중 하나이며 기능은 공개, 정적 및 Meat-Info/Resources와 동일합니다. 이제 우리는 스프링 부팅을 다시 시작할 수 있고 우리는 통과 할 수 있습니다.
http : // localhost : 8080/1.html
http : // localhost : 8080/2.html
http : // localhost : 8080/3.html
http : // localhost : 8080/4.html
4 개의 URL은 4 개의 디렉토리에서 정적 리소스에 액세스합니다.
3. 정적 리소스 디렉토리를 사용자 정의하십시오
두 번째 섹션을 통해 Spring Boot가 기본적으로 액세스 할 수있는 정적 리소스 디렉토리를 이미 알고 있지만 모든 사람은 분명히이 디렉토리가 고정되어 있습니까? 정적 리소스 디렉토리를 스스로 정의 할 수 있습니까? 대답은 예입니다. 이제 정적 리소스 디렉토리를 사용자 정의합니다. 이미지를 저장하기위한 이미지 디렉토리를 정의합니다. All /Image /** 경로는 이미지 디렉토리의 리소스에 액세스합니다.
@ConfigurationPublic Class imageEmvcconfig 확장 webmvcconfigureradapter {@override public void addresourceHandlers (resourceHandlerRegistry registry) {registry.addresourceHandler ( "/image/**") .addresourcelocations ( "classpath :/image/"); }}이 코드는 비교적 간단해야합니다. @Configuration은 이전 기사에서 여러 번 언급 된 구성 클래스를 식별합니다. Webmvcconfigureradapter는 Spring에서 제공하는 MVC를 구성하기위한 어댑터입니다. 많은 구성 방법이 있습니다. AddResourceHandlers는 정적 리소스를 처리하는 방법입니다. 나중에 다른 방법에 대해 이야기 할 것입니다. 이제 위의 구성이 유효한지 확인하고 있습니다. 이미지 디렉토리 아래에 spring.jpg 이미지를 넣었습니다. 이제 http : // localhost : 8080/image/spring.jpg를 통해 이미지에 액세스합니다.
실제로, 위의 방법 외에도 Application.yml에서 직접 구성하는 또 다른 간단한 방법이 있습니다.
스프링 : MVC : 정적-패스 패터 른 :/image/** 리소스 : 정적 문화 : classpath :/images/
static-path-pattern : 액세스 모드, 기본값은 /**, 배수는 쉼표로 분리 할 수 있습니다.
정적 문화 : 자원 디렉토리, Comma로 여러 디렉토리별로 구분 된 기본 리소스 디렉토리는 ClassPath :/Meta-Inf/Resources/, ClassPath :/Resources/, ClassPath :/static/, classPath :/public/입니다.
이 구성은 Spring Boot의 기본 정적 자원 디렉토리를 덮어 씁니다. 예를 들어, 예제에서 구성된 경우 정적, 공개, 리소스 등의 리소스에 더 이상 리소스에 액세스 할 수 없습니다.
4. 요약
이 기사는 주로 Spring Boot가 정적 리소스를 처리하는 방법과 공유합니다. Spring Boot는 ClassPath :/Meta-Inf/Resources/, ClassPath :/Resources/, ClassPath :/static/, classPath :/public/의 네 가지 디렉토리에 따라 정적 리소스에 액세스 할 수 있습니다. 우리는 또한 우리의 요구에 따라 구성을 개인화 할 수 있습니다. 마지막으로,이 네 가지 디렉토리에 동일한 이름을 가진 리소스가있는 경우, 어떤 디렉토리가 어떤 디렉토리를 먼저 반환 할 리소스를 제공합니까? 기본 정적 순서 순서를 통해 추측 할 수 있어야합니다. 기본적으로 Spring Boot는 먼저 /Meta-Inf /Resources에서 리소스를 반환합니다. 물론, 정적 위치의 값을 사용자 정의 할 수 있기 때문에이 우선 순위도 조정할 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.