Heim >Java >javaLernprogramm >Wie greife ich mit einem Global Front Controller Servlet, das /* zugeordnet ist, auf statische Ressourcen zu?
Zugriff auf statische Ressourcen beim Zuordnen eines globalen Front-Controller-Servlets auf /*
Das Zuordnen eines globalen Front-Controller-Servlets auf /* kann den Zugriff auf verhindern statische Ressourcen wie CSS, JS und Bilder. Um dieses Problem zu beheben, ziehen Sie die folgenden Schritte in Betracht:
Ordnen Sie das Controller-Servlet einem spezifischeren URL-Muster zu.
Anstatt das Servlet auf / zuzuordnen, verwenden Sie a spezifischeres Muster wie /pages/. Dadurch können statische Inhalte in einem separaten Ordner gespeichert werden, z. B. /static.
Erstellen Sie einen Filter für den Umgang mit statischen Inhalten
Erstellen Sie einen Filter, der auf /* lauscht und verarbeitet Anfragen nach statischen Inhalten transparent, indem es sie an das Standard-Servlet weiterleitet. Für alle anderen Anforderungen sollte der Filter an das Controller-Servlet gesendet werden.
Hier ist ein Beispiel einer Filterkonfiguration:
<filter> <filter-name>filter</filter-name> <filter-class>com.example.Filter</filter-class> </filter> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Filterimplementierung:
import javax.servlet.*; import javax.servlet.http.HttpServletRequest; public class Filter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { HttpServletRequest req = (HttpServletRequest) request; String path = req.getRequestURI().substring(req.getContextPath().length()); if (path.startsWith("/static")) { chain.doFilter(request, response); // Goes to default servlet. } else { request.getRequestDispatcher("/pages" + path).forward(request, response); } } @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void destroy() { } }
Controller-Servlet Zuordnung:
<servlet> <servlet-name>controller</servlet-name> <servlet-class>com.example.Controller</servlet-class> </servlet> <servlet-mapping> <servlet-name>controller</servlet-name> <url-pattern>/pages/*</url-pattern> </servlet-mapping>
Dieser Ansatz ermöglicht die transparente Bereitstellung statischer Inhalte, während andere Anfragen an das Controller-Servlet weitergeleitet werden.
Das obige ist der detaillierte Inhalt vonWie greife ich mit einem Global Front Controller Servlet, das /* zugeordnet ist, auf statische Ressourcen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!