Home >Java >javaTutorial >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>
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() { } }
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>
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!