SpringMVC静态资源访问
一,SpringMVC静态资源拦截问题
SpringMVC的工作机制是:来自浏览器的所有访问都会被前端控制器(DispatcherServlet)捕获,然后前端控制器把请求转交给处理器映射(HandlerMapping),HandlerMapping为请求分配对应的控制器(Controller)进行请求处理。
<servlet> <servlet-name>springMVCservlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class> <load-on-startup>1load-on-startup> servlet> <servlet-mapping> <servlet-name>springMVCservlet-name> <url-pattern>/url-pattern> servlet-mapping>
通过上面的配置,DispatcherServlet将捕获Web容器所有请求,包括静态资源请求。
通过学习HTTP协议我们知道,浏览器访问服务器的一个页面,实际上是包含了很多次请求的。除了请求页面本身,页面上的图片,js等静态资源也是通过请求资源在服务器上的相对地址实现的。但是SpringMVC的环境下,对静态资源的请求也会被前端控制器捕获,并转交给处理器映射。由于我们的代码中不会有对应的控制器处理请求,因此请求无法被相应,导致网页无法加载静态资源。
如上图:当跳转到页面之后,页面会请求静态资源。。。
二,解决静态资源拦截问题
方法一:采用
<mvc:default-servlet-handler default-servlet-name="default"/>*(涉及spring-mvc.xml和web.xml)
在Springmvc-servlet.xml中配置
一般Web应用服务器默认的servlet名称是“default”,因此DefaultServletHttpRequestHandler可以找到它。如果你的Web应用服务器的默认servlet名称不是default,则需要通过default-servlet-name属性显式指定,在spring-mvc.xml中配置启用默认Servlet:
<mvc:default-servlet-handler default-servlet-name="Web服务器使用的Servlet名称" />
在web.xml中增加对静态资源的处理,比如:
<servlet-mapping> <servlet-name>defaultservlet-name> <url-pattern>*.jsurl-pattern> <url-pattern>*.cssurl-pattern> <url-pattern>/assets/*"url-pattern> <url-pattern>/images/*url-pattern> servlet-mapping>
注意:如果使用这种方法,在页面中静态资源的地址需要使用项目的绝对路径。。。 在jsp页面中使用el表达式 ${pageContext.request.contextPath}
方法二:采用 (涉及spring-mvc.xml)
首先,
location:本地静态资源所在的目录 ,mappping:将静态资源映射到制定的路径下
<body background="img/timg.jpg" style=" background-repeat:no-repeat ;>
注意:所有img/XXX 的静态资源的请求 都会到location下去找对应的资源。。。。
方法三
| Arabic | Hebrew | Polish |
| Bulgarian | Hindi | Portuguese |
| Catalan | Hmong Daw | Romanian |
| Chinese Simplified | Hungarian | Russian |
| Chinese Traditional | Indonesian | Slovak |
| Czech | Italian | Slovenian |
| Danish | Japanese | Spanish |
| Dutch | Klingon | Swedish |
| English | Korean | Thai |
| Estonian | Latvian | Turkish |
| Finnish | Lithuanian | Ukrainian |
| French | Malay | Urdu |
| German | Maltese | Vietnamese |
| Greek | Norwegian | Welsh |
| Haitian Creole | Persian |