Spring MVC框架:第五章:靜態(tài)資源訪問(wèn)與mvc:view-controller

靜態(tài)資源訪問(wèn)
1.提出靜態(tài)資源問(wèn)題

Web項(xiàng)目的開(kāi)發(fā)不可避免的要使用靜態(tài)資源。在我們的項(xiàng)目中圖片文件、音視頻文件、CSS文件、JavaScript文件、HTML文件等等凡是瀏覽器直接可以使用且不需要Tomcat解析的資源都是靜態(tài)資源。

那么靜態(tài)資源在SpringMVC中有什么問(wèn)題呢?

如果在web.xml中我們配置ulr-pattern為“/”,那么訪問(wèn)靜態(tài)資源時(shí)會(huì)返回404。

在這里插入圖片描述















原因是參照/這個(gè)配置SpringMVC對(duì)所有“/”下的資源都進(jìn)行匹配,而a.jpg我們又沒(méi)有任何一個(gè)@RequestMapping和它對(duì)應(yīng),所以SpringMVC認(rèn)為并不存在這個(gè)資源。
在這里插入圖片描述























2.解決辦法
①解決辦法1
url-pattern映射*.擴(kuò)展名
在ulr-pattern配置擴(kuò)展名,例如:*.mvc

<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
    <servlet-name>springDispatcherServlet</servlet-name>
    <url-pattern>*.mvc</url-pattern>
</servlet-mapping>

這樣配置之后會(huì)有一個(gè)重要的、嚴(yán)格的限制:所有希望由SpringMVC來(lái)處理的請(qǐng)求,末尾都必須加上指定的擴(kuò)展名,比如我們這個(gè)例子中的*.mvc。反之沒(méi)有以*.mvc結(jié)尾的請(qǐng)求都和SpringMVC無(wú)關(guān),還是由Tomcat處理。
②解決辦法2

還是保持/的配置,然后在Spring配置文件中加入如下配置:

<mvc:default-servlet-handler/>
<mvc:annotation-driven/>

單獨(dú)使用mvc:default-servlet-handler是不行的,必須配合mvc:annotation-driven。原因我們?cè)赟pringMVC原理中介紹。

小結(jié):
?前提web.xml中url-pattern還是映射“/”
?SpringMVC配置文件中配置:mvc:default-servlet-handler/保證靜態(tài)資源可以訪問(wèn)
?SpringMVC配置文件中配置:mvc:annotation-driven/ 常規(guī)請(qǐng)求可以訪問(wèn)
?介紹mvc:default-servlet-handler/作用
SpringMVC處理請(qǐng)求的步驟概括來(lái)說(shuō)就是SpringMVC能處理就處理,處理不了交給Tomcat。
?介紹mvc:annotation-driven/作用
SpringMVC的標(biāo)配,在實(shí)際開(kāi)發(fā)時(shí)建議每次都把這個(gè)配置加上。因?yàn)榧由线@個(gè)配置后,SpringMVC會(huì)在IOC容器中加入很多用得到的bean。例如:@ResponseBody、文件上傳、類(lèi)型轉(zhuǎn)換等等功能都需要用到。

在這里插入圖片描述

















第八節(jié) mvc:view-controller

假設(shè)有下面這樣一個(gè)handler方法:

@RequestMapping("/direct")
public String direct() {
    return "result";
}

這個(gè)方法內(nèi)部沒(méi)有做任何處理,僅僅是把一個(gè)URL地址"/direct"映射到視圖"result"。那么有沒(méi)有辦法簡(jiǎn)化一下呢?使用mvc:view-controller配置即可。

<mvc:view-controller path="/direct" view-name="result"/>
<mvc:annotation-driven/>

mvc:view-controller也必須搭配mvc:annotation-driven。

<a href="${pageContext.request.contextPath }/direct">測(cè)試ViewController</a>

解決多個(gè)Web工程contextPath名重復(fù)問(wèn)題,我們復(fù)制之前的項(xiàng)目Context root沒(méi)有改
在這里插入圖片描述


















解決導(dǎo)入工程后目標(biāo)運(yùn)行時(shí)環(huán)境錯(cuò)誤


在這里插入圖片描述