2016-07-14 4 views
0

작은 webapp를 만들었으며 색인 페이지 하단에 크레딧 메모를 추가하고 싶습니다. WAR 파일의 html 페이지에서 노트를 쉽게 제거 할 수 있습니다. 그래서 나는이 방법으로 자원 'index.html을'을 수정할 수 있다고 생각 :스프링 부트에서 정적 리소스 index.html을 수정하는 방법은 무엇입니까?

public class MainPageTransformer implements ResourceTransformer { 
    @Override 
    public Resource transform(HttpServletRequest request, Resource resource, ResourceTransformerChain transformerChain) throws IOException { 
     String html = IOUtils.toString(resource.getInputStream(), UTF_8); 
     html = html.replace("</body>", "<div style=\"position: absolute; bottom: 5px;\">Autor</div>\n</body>"); 
     return new ByteArrayResource(html.getBytes()); 
    } 
} 

을 ... 그리고 다음 MainPageTransformer.transform 방법을 실행

@Configuration 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 
    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/client/index.html") 
       .addResourceLocations("classpath:/static/client") 
       .resourceChain(false) 
       .addTransformer(new MainPageTransformer()); 
    } 
} 

후에는 발생 예외 :

java.io.FileNotFoundException: Byte array resource [resource loaded from byte array] cannot be resolved to absolute file path 
at org.springframework.core.io.AbstractResource.getFile(AbstractResource.java:114) 
at org.springframework.core.io.AbstractResource.getFileForLastModifiedCheck(AbstractResource.java:169) 
at org.springframework.core.io.AbstractResource.lastModified(AbstractResource.java:153) 
at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:240) 
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:859) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) 

내가 뭘 잘못 했니? 내 목표를 달성하기위한 더 좋은 방법이 있습니까? 고마워요!

답변

1

오늘이 문제가 발생했습니다. org.springframework.web.servlet.resource.TransformedResource을 사용해보세요.

public class MainPageTransformer implements ResourceTransformer { 
@Override 
public Resource transform(HttpServletRequest request, Resource resource, ResourceTransformerChain transformerChain) throws IOException { 
    String html = IOUtils.toString(resource.getInputStream(), UTF_8); 
    html = html.replace("</body>", "<div style=\"position: absolute; bottom: 5px;\">Autor</div>\n</body>"); 
    return new TransformedResource(resource, html.getBytes()); 
    } 
} 
+0

하하를 찾는 것이 얼마나 놀랍습니까? 나는 그것이 일반적으로 사용되는 경우가 아니라고 생각한다. 공유 해줘서 고마워! – misaka

관련 문제