Rumah >Java >javaTutorial >Bagaimanakah Servlet Tersuai Boleh Menyajikan Kandungan Web Statik dengan Cekap Merentas Berbilang Bekas?
Menyajikan Kandungan Statik dengan Servlet Tersuai
Untuk menyampaikan kandungan statik (cth., imej, CSS) untuk aplikasi web yang digunakan pada berbilang bekas, servlet tersuai boleh digunakan untuk memastikan URL yang konsisten pengendalian.
Keperluan untuk Servlet
Penyelesaian
Walaupun penyelesaian alternatif dicadangkan, adalah mungkin untuk mencipta servlet tersuai yang memenuhi keperluan yang dinyatakan. Berikut ialah pelaksanaan yang berpotensi:
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); } } }
Penggunaan
<servlet-mapping> <servlet-name>StaticContentServlet</servlet-name> <url-pattern>/static/*</url-pattern> </servlet-mapping>
Faedah
Servlet tersuai ini menyediakan siaran kandungan statik yang boleh dipercayai dan boleh disesuaikan, memenuhi keperluan yang ditetapkan . Ia mengendalikan permintaan If-Modified-Since, membenarkan caching bersyarat, dan ia boleh dikonfigurasikan untuk menyokong ciri lain (cth., pengekodan gzip) melalui parameter init servlet.
Atas ialah kandungan terperinci Bagaimanakah Servlet Tersuai Boleh Menyajikan Kandungan Web Statik dengan Cekap Merentas Berbilang Bekas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!