這篇筆記主要記錄我在學習springmvc時遇到的一些問題和我覺得需要記錄的一些重要的知識點。如有錯誤,敬請指正。下面開始正文:
1、前端控制器dispatcherservlet和控制器controllers
在web.xml中對其進行配置,一般將其url-pattern設定為/,這樣dispatcherservlet會截獲所有請求,如圖:
>
>
dispatcherservlet-name
>
>
org.springframework.web.servlet.dispatcherservletservlet-class
>
>
1load-on-startup
>
servlet
>
>
>
dispatcherservlet-name
>
>
/url-pattern
>
>
<
context:component-scan
base-package
="controllers"
/>
這行**的作用是啟用spring內建的元件掃瞄功能,base-packege指定了被掃瞄的包名,所有在這個包下的類都會被掃瞄。接下來需要在controller類上增加注釋來使它被識別為控制器,**如下:
package controllers;
import..
.@controller()
public
class
homecontroller
}
a、@controller注釋表明這個類是乙個控制器,如果spring對contorllers包啟動了元件掃瞄,那麼homecontroller類會被spring掃瞄並註冊為乙個控制器元件。
b、2、視**析器viewresolver
前面說到,controller返回乙個string型別的值,由視**析器來處理這個返回值,那麼我們需要在dispathcer-servlet.xml檔案中手動來配置視**析器,乙個很經典的方案如下:
class
="org.springframework.web.servlet.view.internalresourceviewresolver"
id="viewresolver"
>
name
="prefix"
value
="/web-inf/views/"
>
property
>
name
="suffix"
value
=".jsp"
>
property
>
name
="viewclass"
value
="org.springframework.web.servlet.view.jstlview"
>
property
>
bean
>
我們可以看到上面的**註冊了乙個id為viewresolver的bean,類名為internalresourceviewresolver(內部資源視**析器)。當然你也可以更換其它類來充當視**析器,spring也提供了很多的內建視**析器類,但我在專案中使用的檢視大部分是jsp,因此我選擇了internalresourceviewresolver。
在我的專案中,我給它配置了三條屬性,其中prefix和suffix屬性分別指定了字首和字尾,其作用就是將controller返回的字串前後分別拼接上字首和字尾,從而形成乙個完整的資源名稱。比如homecontroller返回了"home",viewresolver給它加上字首"/web-inf/views/「和字尾」.jsp",得到了"/web-inf/views/home.jsp"。沒錯,這就是最終所得到的檢視的物理位置,viewresolver會按照這個位址去尋找名為hoem.jsp的檔案,解析這個檢視,並將結果渲染到response中,之後的事情就不用說了,瀏覽器接收到response,渲染出乙個html頁面。
你可能會問,那第三個屬性viewclass是幹嘛用的呢?這並不重要,但如果你需要在jsp中使用jstl標籤,那麼你就要在視**析器的配置裡加上一行,也就是配置viewclass屬性。上面的**將viewclass設定為jstlview,這意味著視**析器將會把視**析為jstlview,如果你不進行這行配置,並且在jsp中使用jstl標籤,那就很可能會產生jsp錯誤。
1、使用jstl標籤庫
我希望在jsp中使用一些能給我帶來方便的標籤,但它們都依賴於乙個第三方標籤庫,也就是jstl標籤庫。所以我需要將jstl標籤庫匯入我的專案中。具體步驟可以去菜鳥教程檢視,有乙個需要注意的小問題,就是匯入標籤庫之後,你還需要在web.xml中配置每乙個tld,將它們的物理位置和uri繫結。如果你要將所有的tld註冊,那麼web.xml檔案將會增加很長一段**,它會變得很難看。但實際上你並不需要這麼做,只要將你會用到的幾個標籤註冊到web.xml中就行了。
2、jsp可以外部引用css嗎?(靜態資源的放行)
答案是絕對可以,只不過springmvc配置有前端控制器,而我又將url-pattern設定為/,這意味著所有請求,包括對靜態資源的請求都會被dispatcherservlet攔截,那麼如果我在jsp檔案中引用了乙個css,如:
rel=
"stylesheet"
type
="text/css"
href
="/resources/css/css1.css"
>
<
mvc:annotation-driven
/>
<
mvc:resources
="/resources/**"
location
="/resources/"
/>
Spring MVC學習筆記 一
ref 1.spring mvc入門 2.理解dispatcherservlet 3.實現登陸註冊功能 4.spring web mvc介紹 5.了解hiberate 三 spring3.0 引入restful 架構風格支援 通過 pathvariable註解和一些其他特性支援 且又引入了 更多的註...
SpringMVC學習筆記一
表單 1.spring標籤庫form的使用需要後台控制器初始化dto物件,一般預設物件為command controller內對應初始化方法內,需要在模型內加入command物件 return new modelandview x command new student or return new ...
SpringMVC學習筆記 一
搭建最基本的spring mvc框架 1.匯入相應的包,附件案例中有相應的包 2.編寫spring servlet.xml配置檔案,這個檔案放在同web.xml同一目錄下即可 3.配置web.xml index.html index.htm index.jsp default.html defaul...