您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java在/ *上映射全局前端控制器servlet时如何访问静态资源

Java在/ *上映射全局前端控制器servlet时如何访问静态资源

我也遇到了这个问题,却从未找到一个好的解决方案。我最终将我的servlet映射到URL层次中的更高一级:

<servlet-mapping>       
  <servlet-name>home</servlet-name>             
  <url-pattern>/app/*</url-pattern>     
</servlet-mapping>

现在,基本上下文(和/ res目录中)的所有内容都可以由容器提供。

地图控制器servlet在一个更具体的url-pattern喜欢/pages/,放像一个特定的文件夹的静态内容/static和创建Filter上收听/透明地继续链中的任何静态内容和调度请求到控制器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>

在过滤器中包含以下内容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);
}

不,最终不会出现/pages在浏览器地址栏中。它是完全透明的。您可以根据需要制造"/static"和/或"/pages"使用init-param过滤器。

java 2022/1/1 18:19:04 有434人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶