Home > Java > javaTutorial > How to Access Static Resources with a Global Front Controller Servlet Mapped to /*?

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

Patricia Arquette
Release: 2024-12-04 02:50:10
Original
766 people have browsed it

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

Accessing Static Resources when Mapping Global Front Controller Servlet on /*

Mapping a global front controller servlet on /* can prevent the access to static resources such as CSS, JS, and images. To resolve this, consider the following steps:

Map the Controller Servlet on a More Specific URL Pattern

Instead of mapping the servlet on /, use a more specific pattern like /pages/. This allows static content to be stored in a separate folder, such as /static.

Create a Filter for Handling Static Content

Create a filter that listens on /* and transparently handles requests for static content by forwarding them to the default servlet. For any other requests, the filter should dispatch to the controller servlet.

Here's an example of a filter configuration:

<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>
Copy after login

Filter Implementation:

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() {
    }
}
Copy after login

Controller Servlet Mapping:

<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>
Copy after login

This approach allows static content to be served transparently while directing other requests to the controller servlet.

The above is the detailed content of How to Access Static Resources with a Global Front Controller Servlet Mapped to /*?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template