問題的產生:
<!--springMVC前端控制器加載--> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--contextConfigLocation配置SpringMVC加載的配置文件(配置處理器,映射器等等) 如果不配置contextConfigLocation,默認加載的是:/WEB-INF/servlet名稱-servlet.xml(springmvc-servlet.xml) --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
在使用springmvc的DispatcherServlet去攔截所有的URL的時候,會將http://localhost:8080/blog/css/bootstrap.min.css這樣的靜態資源請求發送到controller層的方法里面處理,通過@RequestMapping注釋的篩選后,因為沒能匹配通過,所有頁面加載不了。
這是別的文章看到的,如果你的DispatcherServlet攔截 *.do或者*.action這樣的URL,就不存在訪問不到靜態資源的問題。如果你的DispatcherServlet攔截“/”,攔截了所有的請求,同時對*.js,*.jpg的訪問也就被攔截了。
其中解決方法在網上一般都能查到,修改或添加配置就可以,一般是三種解決方法,下面的倆個地址已經寫得非常清楚了:
https://blog.csdn.net/u013126379/article/details/52087308
https://blog.csdn.net/qq_30546099/article/details/71404574
但是我在用了上面的三個方法之后仍然得不到問題的解決,於是想到可能在JSP頁面上引入靜態資源的相對路徑寫錯了,於是用了絕對路徑,最終順利解決問題。步驟如下:
一開始是圖中紅色圈中的格式,用CRTL+左鍵,會有引用,我以為沒有錯,后來在POM添加了,
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
在相對路徑前面加了${pageContext.request.contextPath},問題得到解決。