사용자 정의 서블릿으로 정적 콘텐츠 제공
다음에 배포된 웹 애플리케이션에 대한 정적 콘텐츠(예: 이미지, CSS)를 제공하려면 여러 컨테이너가 있는 경우 사용자 정의 서블릿을 활용하여 일관된 URL을 보장할 수 있습니다. 처리.
서블릿 요구 사항
해결 방법
대체 솔루션이 제안되었지만 명시된 요구 사항을 충족하는 사용자 정의 서블릿입니다. 잠재적인 구현은 다음과 같습니다.
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class StaticContentServlet extends HttpServlet { private Path filePath; @Override public void init() throws ServletException { super.init(); String filePathString = getServletConfig().getInitParameter("filePath"); if (filePathString == null) { throw new ServletException("Missing filePath init parameter"); } filePath = Paths.get(filePathString); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { String path = request.getRequestURI().substring(request.getContextPath().length()); File file = filePath.resolve(path).toFile(); if (file.exists()) { response.setStatus(HttpServletResponse.SC_OK); response.setContentType(Files.probeContentType(file.toPath())); if (request.getDateHeader("If-Modified-Since") <= file.lastModified()) { response.setDateHeader("Last-Modified", file.lastModified()); } else { response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); return; } Files.copy(file.toPath(), response.getOutputStream()); } else { response.sendError(HttpServletResponse.SC_NOT_FOUND); } } }
사용
<servlet-mapping> <servlet-name>StaticContentServlet</servlet-name> <url-pattern>/static/*</url-pattern> </servlet-mapping>
이점
이 사용자 정의 서블릿은 지정된 요구 사항을 충족하면서 안정적이고 사용자 정의 가능한 정적 콘텐츠 제공을 제공합니다. . If-Modified-Since 요청을 처리하여 조건부 캐싱을 허용하고 서블릿의 init 매개변수를 통해 다른 기능(예: gzip 인코딩)을 지원하도록 구성할 수 있습니다.
위 내용은 사용자 정의 서블릿이 어떻게 여러 컨테이너에 걸쳐 정적 웹 콘텐츠를 효율적으로 제공할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!