ResourceHandlerは静的コンテンツを処理しますか?
この文章の目的は?
Springでは、HTMLなどの静的なコンテンツをどのように処理しますか?
ResourceHandler?
このHandlerは、画像、JavaScript、CSS、HTMLなどの静的リソースを処理します.Tomcat、Nettyなどのサーブレットコンテナは、基本的に静的リソースを処理するためのDepartサーブレットを提供する.
Springは、デバッガがすべてのリクエストをブロックすると、直接作成したHandlerではなく、まず静的リソースが見つかるという問題で、デバッガに静的リソースを委任して処理します.したがって,ResourceHandlerの登録優先度は最も低い.
Spring Bootは、ResourceHandlerを「resource/static」フォルダまたは「resource/public」フォルダとして提供し、設定する必要はありません.スプリングではなくカスタムリソースHandlerを使用する場合は、WebConfiguratorインタフェースに追加できます.また、ResourceHandlerを登録する際には、効率を向上させるために複数のキャッシュポリシーを設定できます.@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/mobile/**")
.addResourceLocations("classpath:/mobile/")
.setCacheControl(CacheControl.maxAge(10, TimeUnit.MINUTES));
// // 캐시를 사용할지 말지를 결정. 운영중이라면 true, 개발중이라면 false가 적절
// .resourceChain(true)
// // 요청에 해당하는 리소스를 찾는 방법
// .addResolver()
// // 응답으로 내보낼 리소스를 변경하는 방법
// .addTransformer()
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class SimpleControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void helloStatic() throws Exception {
// 기본 ResourceHandler
// this.mockMvc.perform(get("/index.html"))
// .andDo(print())
// .andExpect(status().isOk())
// .andExpect(content().string(Matchers.containsString("index")));
// 직접 만든 ResourceHandler
this.mockMvc.perform(get("/mobile/index.html"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string(Matchers.containsString("mobile")))
.andExpect(header().exists(HttpHeaders.CACHE_CONTROL));
}
}
本文の参考
このHandlerは、画像、JavaScript、CSS、HTMLなどの静的リソースを処理します.Tomcat、Nettyなどのサーブレットコンテナは、基本的に静的リソースを処理するためのDepartサーブレットを提供する.
Springは、デバッガがすべてのリクエストをブロックすると、直接作成したHandlerではなく、まず静的リソースが見つかるという問題で、デバッガに静的リソースを委任して処理します.したがって,ResourceHandlerの登録優先度は最も低い.
Spring Bootは、ResourceHandlerを「resource/static」フォルダまたは「resource/public」フォルダとして提供し、設定する必要はありません.スプリングではなくカスタムリソースHandlerを使用する場合は、WebConfiguratorインタフェースに追加できます.また、ResourceHandlerを登録する際には、効率を向上させるために複数のキャッシュポリシーを設定できます.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/mobile/**")
.addResourceLocations("classpath:/mobile/")
.setCacheControl(CacheControl.maxAge(10, TimeUnit.MINUTES));
// // 캐시를 사용할지 말지를 결정. 운영중이라면 true, 개발중이라면 false가 적절
// .resourceChain(true)
// // 요청에 해당하는 리소스를 찾는 방법
// .addResolver()
// // 응답으로 내보낼 리소스를 변경하는 방법
// .addTransformer()
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class SimpleControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void helloStatic() throws Exception {
// 기본 ResourceHandler
// this.mockMvc.perform(get("/index.html"))
// .andDo(print())
// .andExpect(status().isOk())
// .andExpect(content().string(Matchers.containsString("index")));
// 직접 만든 ResourceHandler
this.mockMvc.perform(get("/mobile/index.html"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string(Matchers.containsString("mobile")))
.andExpect(header().exists(HttpHeaders.CACHE_CONTROL));
}
}
本文の参考
Reference
この問題について(ResourceHandlerは静的コンテンツを処理しますか?), 我々は、より多くの情報をここで見つけました https://velog.io/@maketheworldwise/정적-콘텐츠-처리하는-ResourceHandlerテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol