springmvc 静态资源处理 古城微笑少年丶 2022-07-28 09:47 173阅读 0赞 springmvc 通过dispatcherServlet来拦截路径,将请求放到springmvc进行处理,我们可以在web.xml配置dispatcherServlet,并配置它拦截哪里路径 <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:META-INF/dispatcher-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> 这里拦截的是”/”即拦截所有的路径,但是我项目中有图片,配置文件等静态资源,我们是不希望springmvc进行拦截并做处理的,我们该怎么处理呢? springmvc 可以通过配置`<mvc:default-servlet-handler>` 和配置`<mvc:resources>`来处理静态资源 使用将静态资源处理交给web应用服务器自己处理 将`<mvc:default-servlet-handler />`配置到配置文件中,springmvc会注入一个DefaultServeletHttpRequestHandler来对进入DispatcherServlet的url进行筛选,发现是静态资源则通过,不做任何处理,一般的web应用服务器默认的servlet的名称都是default,DefaultServeletHttpRequestHandler可以通过这个名称找到他,如果你所使用的web应用服务器默认的serlvet名称不是default,你可以向下面一样自己配置 <mvc:default-servlet-handler default-servlet-name = "customerDefaultServletName" /> 使用`<mvc:resource />`配置静态文件 `<mvc:resource />`由springmvc自己处理静态资源,并添加一些有用的附加值功能,下面将`<mvc:resource />`配置到配置文件中 <!-- 过滤掉静态资源的拦截 设置缓存为一年最大限度利用缓存 --> <mvc:resources location="/content/" cache-period="31556926" mapping="/content/**" /> location属性是spring Resource类型,可以读取任意位置的静态资源,报错jar中的静态资源,使用”classpath:”的静态资源,还有WEB-INF目录下的静态资源等等。 cache-period属性可以指定静态资源在浏览器端的缓存时间,这里设置是一年,springmvc在输出响应流时,会设置好响应头部的Expries还有Cache-Control的值 由于location可以指定任意资源位置的静态文件,如果把location映射到WEB-INF下的目录,在网页上就可以通过/content/直接读取WEB-INF下的资源了,这是很危险的,要特别注意 一般情况下,我们设置cache-period缓存一年的静态资源,浏览器客户端读取静态资源的时候,就会通过缓存去取,但是如果我们要发布新项目,然后静态资源这时候已经有修改了,例如修改了js的代码,我们该怎么做呢,这里有个解决方案,可以在发布静态的资源的时候,加上版本号。 首先我们新建一个静态资源版本号管理类继承于ServeletContextAware /** * 资源版本控制器 * @author liuxg * @date 2016年4月14日 上午10:21:25 */ public class ResVersionExposer implements ServletContextAware { private ServletContext servletContext ; private String resPath ; @Override public void setServletContext(ServletContext servletContext) { this.servletContext = servletContext; } public void init(){ String version = "1.2.1" ; //可以把版本号配置在application.properties resPath = "content/" + version + "/"; servletContext.setAttribute("resPath", resPath); } public String getResPath() { return resPath; } } 然后我们在配置文件中配置静态文件的路径 <bean id = "rve" init-method = "init" class = "com.liuxg.util.resource.ResVersionExposer" /> <mvc:resources location="/content/" cache-period="31556926" mapping="${rve.resPath}" /> 然后我们在jsp页面就这样子请求静态资源文件 <link rel="stylesheet" type="text/css" href="${resPath}/css/catalog/catalogEdit.css" />
还没有评论,来说两句吧...