Heim >Java >javaLernprogramm >Wie greife ich mit einem Global Front Controller Servlet, das /* zugeordnet ist, auf statische Ressourcen zu?

Wie greife ich mit einem Global Front Controller Servlet, das /* zugeordnet ist, auf statische Ressourcen zu?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-04 02:50:10541Durchsuche

How to Access Static Resources with a Global Front Controller Servlet Mapped to /*?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn