猿问

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

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

我将SpringMVC调度器映射为全局前端控制器servlet/*.

<servlet>       
  <servlet-name>home</servlet-name>         
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>     </servlet>  <servlet-mapping>       
  <servlet-name>home</servlet-name>         
  <url-pattern>/*</url-pattern>     </servlet-mapping>

但是,此映射将停止对CSS、JS、图像等静态文件的访问,这些文件都位于/res/文件夹。

我怎么能访问他们呢?


慕村9548890
浏览 640回答 3
3回答

拉丁的传说

我也遇到过这个问题,但从来没有找到一个很好的解决方案。最后,我在URL层次结构中映射了一个级别的servlet:<servlet-mapping>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<servlet-name>home</servlet-name>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<url-pattern>/app/*</url-pattern>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</servlet-mapping>现在,基本上下文(和/res目录中的所有内容)都可以由容器提供。

白衣非少年

将控制器servlet映射到更具体的url-pattern喜欢/pages/*,将静态内容放在特定的文件夹中,如/static并创建一个Filter倾听/*它透明地继续对任何静态内容的链,并向控制器servlet发送其他内容的请求。简而言之:<filter> &nbsp;&nbsp;&nbsp;&nbsp;<filter-name>filter</filter-name> &nbsp;&nbsp;&nbsp;&nbsp;<filter-class>com.example.Filter</filter-class></filter><filter-mapping> &nbsp;&nbsp;&nbsp;&nbsp;<filter-name>filter</filter-name> &nbsp;&nbsp;&nbsp;&nbsp;<url-pattern>/*</url-pattern></filter-mapping><servlet> &nbsp;&nbsp;&nbsp;&nbsp;<servlet-name>controller</servlet-name> &nbsp;&nbsp;&nbsp;&nbsp;<servlet-class>com.example.Controller</servlet-class></servlet><servlet-mapping> &nbsp;&nbsp;&nbsp;&nbsp;<servlet-name>controller</servlet-name> &nbsp;&nbsp;&nbsp;&nbsp;<url-pattern>/pages/*</url-pattern></servlet-mapping>在过滤器中包含以下内容doFilter():HttpServletRequest&nbsp;req&nbsp;=&nbsp;(HttpServletRequest)&nbsp;request;String&nbsp;path&nbsp;=&nbsp;req.getRequestURI().substring(req.getContextPath().length());if&nbsp;(path.startsWith("/static"))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;chain.doFilter(request,&nbsp;response);&nbsp;//&nbsp;Goes&nbsp;to&nbsp;default&nbsp;servlet.}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;request.getRequestDispatcher("/pages"&nbsp;+&nbsp;path).forward(request,&nbsp;response);}不,这不会以/pages在浏览器地址栏中。完全透明。如果必要的话你可以"/static"和/或"/pages"阿init-param过滤器的。

慕慕森

带着春季3.0.4你可以用更高的<mvc:resources&nbsp;mapping="/resources/**"&nbsp;location="/public-resources/"/>如图所示弹簧参考.
随时随地看视频慕课网APP

相关分类

Java
我要回答