中小型企業(yè)網(wǎng)站的設(shè)計(jì)與開發(fā)百度搜索競價(jià)
目錄
視圖
默認(rèn)視圖
視圖機(jī)制原理?
自定義視圖
請求轉(zhuǎn)發(fā)與重定向
靜態(tài)資源處理
視圖
每個視圖解析器都實(shí)現(xiàn)了 Ordered 接口并開放出一個 order 屬性
可以通過 order 屬性指定解析器的優(yōu)先順序,order 越小優(yōu)先級越高
默認(rèn)是最低優(yōu)先級,Integer.MAX_VALUE
Controller -> 視圖解析器(mvc提供) -> 視圖 -> 結(jié)果頁面
默認(rèn)視圖
默認(rèn)視圖交給InternalResourceViewResolver視圖解析器來處理
默認(rèn)視圖解析器一旦執(zhí)行,就不會執(zhí)行自定義視圖解析器?
需要手動配置一下
最后返回的路徑直接拼接:"prefix"+name+"suffix"
視圖機(jī)制原理?
設(shè)我們SpringMVC中使用了JSP作為視圖。
第一步:瀏覽器發(fā)送請求給web服務(wù)器
第二步:Spring MVC中的DispatcherServlet接收到請求
第三步:DispatcherServlet根據(jù)請求路徑分發(fā)到對應(yīng)的Controller 第四步:DispatcherServlet調(diào)用Controller的方法
第五步:Controller的方法處理業(yè)務(wù)并返回一個
邏輯視圖名
給DispatcherServlet第六步:DispatcherServlet調(diào)用
InternalResourceViewResolver
的resolveViewName
方法,將邏輯視圖名
轉(zhuǎn)換為物理視圖名
,并創(chuàng)建InternalResourceView
對象返回給DispatcherServlet第七步:DispatcherServlet再調(diào)用
InternalResourceView
的render
方法,render方法將模板語言轉(zhuǎn)換為HTML代碼,響應(yīng)給瀏覽器,完成最終的渲染。
自定義視圖
1、BeanNameViewResolver可以去解析自定義的視圖
? ? ? 配置優(yōu)先級,比默認(rèn)解析器優(yōu)先級高
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0"></bean>
2、繼承
????????MyView繼承了AbstractView, 就可以作為一個視圖使用
????????@Component(value = "myView"),該視圖會注入到容器中, 名字是myView
return "myView"的底層實(shí)現(xiàn):
1、在容器找id=myView
2、是否是View.class類型
3、return getBean("id",View.class),以接口形式返回
4、視圖渲染,執(zhí)行自定義視圖的方法,跳轉(zhuǎn)到結(jié)果頁面
請求轉(zhuǎn)發(fā)與重定向
請求轉(zhuǎn)發(fā)forward,重定向redirect
如果都不寫,默認(rèn)請求轉(zhuǎn)發(fā),由默認(rèn)或自定義視圖來處理
訪問WEB-INF下面的資源必須請求轉(zhuǎn)發(fā)(內(nèi)部跳轉(zhuǎn)到WEB-INF)
forward或redirect:/路徑,會在服務(wù)器解析,自動拼接上工程路徑(比如/mvc)
比如:工程路徑:/mvc
return "forward:/WEB-INF/pages/login_ok.jsp"
在服務(wù)器解析成?/mvc/login_ok.jsp 給瀏覽器
第一個?/?又會在瀏覽器解析成 http://localhost:8080變成http://localhost:8080/mvc/login_ok.jsp
forward底層會創(chuàng)建 InternalResourceView視圖對象
redirect底層會創(chuàng)建 RedirectView視圖對象
靜態(tài)資源處理
未在web.xml中配置映射,如果在springmvc配置文件中設(shè)置<url-pattern>/</url-pattern>,會替代tomcat中的default導(dǎo)致所有的靜態(tài)資源都給中央控制器來處理,而不是tomcat,前端控制器沒有訪問靜態(tài)資源的能力,所以所有靜態(tài)資源都是404
方法一
在springmvc配置文件加入
mvc:resources和@RequestMapping有一定的沖突
<mvc:annotation-driven/> <mvc:default-servlet-handler/>
????????開啟默認(rèn)Servlet處理之后,mvc會在容器創(chuàng)建DefaultServletHttpRequestHandler處理器對象,對進(jìn)入DispatcherServlet的URL進(jìn)行篩查,如果是靜態(tài)資源的請求,交給Tomcat的default來處理
方法二?
將images、html、js文件夾放入webapp/static目錄下
<mvc:annotation-driven/> <mvc:resources mapping="/static/**" location="/static/" />