Spring MVC之視圖

InternalResourceViewResolver

對於視圖這一塊相信大家每天都在用,而且也都覺得用的很方便,而且用的最多的視圖解析器應該都是這傢伙:
org.springframework.web.servlet.view.InternalResourceViewResolver, 這一點我跟大家都是一樣的。以前也 從沒想着說去了解下其原理是什麼,今天沒事就看了下源碼,發現沒什麼好說的,還是隨便總結下吧,看源碼的過程就不貼了。

首先我們的方法無論返回的是String,ModelAndView還是View類型,在DispatcherServlet中都會給你轉換爲ModelAndView進行操作,這也是解析視圖的第一步,統一操作。然後將頁面帶過來的參數放在一個叫做mv的ModelAndView對象中通過一步步的解析(這些步驟其實就是各種解析可看可不看 ),最後到InternalResourceViewResolver中通過轉發到達目標頁面。總結得不好,說不出來意思,唉語文太差

JstlView

當然除了這個解析器外還有一些別的比如JstlView,這個解析器只需要我們將jstl的包導入上面所說的mv就會自動變成JstlView,也沒什麼好說的。

自定義視圖

有時候我們可能會用到自定義視圖,此時我們就需要
org.springframework.web.servlet.view.BeanNameViewResolver這個視圖解析器。通過源碼我們可以看到這個解析器是直接從MVC容器中通過視圖名來解析的,所以我們需要把自定義的視圖放到容器中去。而方法方法返回的就是自定義視圖在容器中的名字,得一一對應。在配置文件中BeanNameViewResolver配置如下

<!--自定義視圖的視圖解析器  -->
<!--order值越小視圖解析器的優先級越高  -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="100"></property>
        </bean>

這裏的order是用來決定視圖解析器的優先級的因爲通常我們都還配了InternalResourceViewResolver,而他的order是最大值所以只要配了這個屬性就行。
接下來是自定義視圖類我們需要實現VIew類

@Component
public class MyView implements View {

    @Override
    public String getContentType() {
        return "text/html";  //返回內容類型
    }

    @Override
    public void render(Map<String, ?> arg0, HttpServletRequest arg1,
            HttpServletResponse arg2) throws Exception {
            arg2.getWriter().print("now time:"+new Date());

    }

}

這裏在頁面上打印了當前時間,這樣自定義視圖就ok了

mvc:view-controller

至於這個標籤是讓我們直接訪問物理視圖文件即jsp文件而不經過方法,用法很簡單

<mvc:view-controller path="/success1" view-name="success"/>

這樣就ok了,當你輸入localhost:8080/SpringMvc/success1就會直接去訪問success.jsp

使用這個標籤時必須得加上

<mvc:annotation-driven></mvc:annotation-driven>

否則其他需要經過方法的訪問會出錯

以上有錯誤的歡迎指正,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章