使用全局前端控制器 Servlet 访问静态资源
将 Spring MVC 调度程序映射为 / 上的全局前端控制器 Servlet 时,它可能会导致访问 CSS、JS 和图像等静态资源时出现问题,这些资源通常存储在 /res 等文件夹中。这是因为 / 映射捕获所有请求并将它们路由到 servlet,从而阻止访问这些静态文件。
为了解决这个问题,可以为控制器 servlet 定义更具体的 url 模式,例如 /pages/。然后可以将静态内容放置在单独的文件夹中,例如/static。过滤器可以配置为侦听 / 并透明地将静态内容请求传递到默认 servlet,同时将其他请求分派到控制器 servlet。
以下是简化的代码示例:
<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> <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>
并且在Filter的doFilter()方法中:
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); }
这个配置确保静态可以在不中断处理剩余请求的控制器 Servlet 的功能的情况下访问 CSS 和 JS 等资源。此外,过滤器的使用确保静态文件访问从浏览器的角度来看是完全透明的。
以上是在 Spring MVC 中使用全局前端控制器 Servlet 时如何访问静态资源?的详细内容。更多信息请关注PHP中文网其他相关文章!