Servir du contenu statique avec un servlet personnalisé
Afin de servir du contenu statique (par exemple, des images, CSS) pour une application Web déployée sur plusieurs conteneurs, un servlet personnalisé peut être utilisé pour garantir une gestion cohérente des URL.
Exigences pour le Servlet
Solution
Bien qu'une solution alternative ait été suggérée, il est possible de créer une servlet personnalisée qui répond aux exigences énoncées. Voici une implémentation potentielle :
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); } } }
Utilisation
<servlet-mapping> <servlet-name>StaticContentServlet</servlet-name> <url-pattern>/static/*</url-pattern> </servlet-mapping>
Avantages
Cette servlet personnalisée fournit un service de contenu statique fiable et personnalisable, répondant aux exigences spécifiées . Il gère les requêtes If-Modified-Since, permettant la mise en cache conditionnelle, et il peut être configuré pour prendre en charge d'autres fonctionnalités (par exemple, l'encodage gzip) via les paramètres d'initialisation de la servlet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!