Spring MVC入門教程(一)

一任天然發表於2016-10-11

我們先來看下Spring Web MVC的DispatcherServlet處理請求的工作流,有個整體的印象。
這裡寫圖片描述

DispatcherServlet繼承自HttpServlet,就像它的名字一樣,是一個“排程員”。一個HTTP請求到來時,DispatcherServlet根據URL分配到註冊的handlers處理。

配置DispatcherServlet

web.xml

<web-app>
    <servlet>
        <servlet-name>golfing</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>golfing</servlet-name>
        <url-pattern>/golfing/*</url-pattern>
    </servlet-mapping>
</web-app>

所有URL以/golfing開頭的請求都會被名字為golfing的DispatcherServlet處理。

配置其他Bean

有兩種方式,繼承context方式和根context方法。

繼承context方法

每個DispatcherServlet有自己的上下文物件WebApplicationContext(繼承了根WebApplicationContext物件中定義的所有bean)。繼承的bean可以在具體的Servlet例項中被過載。
這裡寫圖片描述
Spring MVC會查詢WEB-INF目錄下查詢一個名為[servlet-name]-servlet.xml的配置檔案。
看一個例子。

<web-app>
    <servlet>
        <servlet-name>golfing</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>golfing</servlet-name>
        <url-pattern>/golfing/*</url-pattern>
    </servlet-mapping>
</web-app>

需要在/WEB-INF/路徑下建立一個golfing-servlet.xml檔案,如果需要多個Servlet,可以配置多個。

根context方法

只有一個WebApplicationContext物件,包含了所以的元件(components)。
這裡寫圖片描述
通過在servlet初始化引數中配置一個空的contextConfigLocation來實現,看一個例子。

<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/root-context.xml</param-value>
    </context-param>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

其中/WEB-INF/root-context.xml可以自定義名字和路徑。

WebApplicationContext中特殊型別bean

這裡寫圖片描述

DispatcherServlet配置

DispatcherServlet包含有預設配,預設配置在org.springframework.web.servlet下的DispatcherServlet.properties檔案中。

# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.

org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver

org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
    org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
    org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
    org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager

使用者也可以自己配置,覆蓋預設配置。
看一個例子。

    <!-- 定義跳轉的檔案的前字尾 ,檢視模式配置-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 這裡的配置我的理解是自動給後面action的方法return的字串加上字首和字尾,變成一個 可用的url地址 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

相關文章