教大家看官方技術文件(一)- Spring MVC
每當學習一門新技術時候,大部分人直接就是百度Bing搜尋,借鑑別人的部落格例子等。我也是一樣,但是我經常想,這些牛人的例子如何寫出來的,如何深入擴充套件其它功能等等。所以,我會做多一步,就是挖掘官方文件。
本文例子的軟體環境:
IntelliJ IDEA 15 CE (社群版)
Maven3.0 (IDE捆綁)
JDK1.8(IDE捆綁)
本文目標:
本文不是解決什麼高深問題,而是教大家查閱官方文件,以Spring MVC 基本頁面跳轉,整合第三方開源框架為例子。
適讀人群:
理解Servelt執行原理,會用Maven,對Spring和mybatis框架有大致瞭解
相信大部分人構建應用的時候,是直接從別人寫好的程式碼專案開始的,或者直接用付費的IDE生成通用的應用模版。但是,試想一下,假如讓你從”零”開始構建一個web應用,IDE功能只能幫你生成最簡單的web folder結構,你手上只有Spring的官方文件。那你如何配置servlet / servelet-mapping / Spring DispatcherServlet 等web.xml裡最基本的標籤? 如何配置Spring ApplicationContex.xml等等?
例如,IDE生成簡單的Web.xml如下:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
如果你是有Spring使用經驗的話,會記得要用servlet標籤等,可是你記不起完整程式碼,這時候試試開啟“http://java.sun.com/dtd/web-app_2_3.dtd“就會發現:
<!--
The servlet-class element contains the fully qualified class name
of the servlet.
Used in: servlet
-->
<!ELEMENT servlet-class (#PCDATA)>
<!--
The servlet-mapping element defines a mapping between a servlet
and a url pattern
Used in: web-app
-->
<!ELEMENT servlet-mapping (servlet-name, url-pattern)>
扯遠了,迴歸Spring MVC如何配置來。
第一步:利用IntelliJ 生成Maven的Web專案
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
</dependencies>
<web-app>
<servlet>
<servlet-name>example</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>/example/*</url-pattern>
</servlet-mapping>
</web-app>
至此,假如執行上面配置,會出現如下錯誤:
問題一:
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
原因:
未配置相應的Artifacts,那麼如何找到相應的Maven Artefacts呢
解決:
其實Table 2.1. Spring Framework Artefacts有相應說明
http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#overview-web
憑經驗嘗試加入spring-webmvc,問題解決 。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
繼續執行,會出現:
問題二:
BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/example-servlet.xml];
原因:
文件中21.2的章節有說明如下
Upon initialization of a DispatcherServlet, Spring MVC looks for a file named [servlet-name]-servlet.xml in the WEB-INF directory of your web application and creates the beans defined there, overriding the definitions of any beans defined with the same name in the global scope.
解決:
參考文件Figure 21.3圖下面的配置說明–>This can be configured by setting an empty contextConfigLocation servlet init parameter, as shown below:
嘗試在前面的< servlet >基礎上增加 < init-param > 配置contextConfigLocation
...
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>...</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
...
</servlet>
問題解決。伺服器啟動成功。
下篇文章會接著教如何設定Spring MVC的controller