延續前篇內容。html
開始以前,咱們首先要準備如下12個jar文件:
spring-aop-4.3.3.RELEASE.jar
spring-beans-4.3.3.RELEASE.jar
spring-context-4.3.3.RELEASE.jar
spring-core-4.3.3.RELEASE.jar
spring-expression-4.3.3.RELEASE.jar
spring-web-4.3.3.RELEASE.jar
spring-webmvc-4.3.3.RELEASE.jar
thymeleaf-3.0.2.RELEASE.jar
thymeleaf-spring4-3.0.2.RELEASE.jar
attoparser-2.0.1.RELEASE.jar
slf4j-api-1.6.6.jar
commons-logging-1.2.jar
它們來自於spring-framework-4.3.3.RELEASE-dist.zip,thymeleaf-3.0.2.RELEASE-dist.zip,commons-logging-1.2-bin.tar.gz,請從官網下載
spring: http://repo.spring.io/release/org/springframework/spring/
thymeleaf: https://dl.bintray.com/thymeleaf/downloads/thymeleaf/
common log: http://commons.apache.org/proper/commons-logging/download_logging.cgi
1: 把12個jar文件拷貝到WEB-INF的lib目錄下(eclipse支持鼠標拖拽),並添加到build path下:java
查看項目所在硬盤路徑:鼠標右擊項目 zoo,下拉菜單->Properties,彈出對話框便可查看:web
2: 修改web.xml文件,添加spring的dispatcherServlet;指定spring的配置文件:classpath下的com/xmlconfig/spring-mvc.xml文件;過濾全部以.html結尾的請求。spring
load-on-startup參數設置爲1,表示web應用啓動的時候就會實例化這個servlet,數值必須是整數,若是是負整數或者沒有設置,那麼web容器本身會選擇它的初始化時機,若是是大於等於0的整數,那麼這個servlet會在web應用啓動的時候初始化,而且數字越小越先被初始化,對於值相等的servlet,web容器會選擇初始化順序。express
內容以下:apache
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 3 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 4 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 5 <display-name>zoo</display-name> 6 7 <servlet> 8 <servlet-name>springMVC</servlet-name> 9 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 10 <init-param> 11 <param-name>contextConfigLocation</param-name> 12 <param-value>classpath:com/xmlconfig/spring-mvc.xml</param-value> 13 </init-param> 14 <load-on-startup>1</load-on-startup> 15 </servlet> 16 17 <servlet-mapping> 18 <servlet-name>springMVC</servlet-name> 19 <url-pattern>*.html</url-pattern> 20 </servlet-mapping> 21 22 <welcome-file-list> 23 <welcome-file>index.html</welcome-file> 24 <welcome-file>index.htm</welcome-file> 25 <welcome-file>index.jsp</welcome-file> 26 <welcome-file>default.html</welcome-file> 27 <welcome-file>default.htm</welcome-file> 28 <welcome-file>default.jsp</welcome-file> 29 </welcome-file-list> 30 </web-app>
3: 在src目錄下新建package:com.xmlconfig(其實就是硬盤裏的文件夾src/com/config),並在這個package下面新建xml文件:
spring-mvc.xml,內容爲:api
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:mvc="http://www.springframework.org/schema/mvc" 5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 6 xmlns:context="http://www.springframework.org/schema/context" 7 xsi:schemaLocation="http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd 11 http://www.springframework.org/schema/mvc 12 http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 13 14 15 <!-- spring掃描com.zoo.web.controller下面全部帶註解的類 --> 16 17 <context:component-scan base-package="com.zoo.web.controller"/> 18 <!-- 這個標籤表示使用註解來驅動 --> 19 <mvc:annotation-driven/> 20 21 <!-- 使用thymeleaf解析 --> 22 <bean id="templateResolver" 23 class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver"> 24 <property name="prefix" value="/WEB-INF/pages/" /> 25 <property name="suffix" value=".html" /> 26 <property name="templateMode" value="HTML" /> 27 <property name="cacheable" value="false" /> 28 </bean> 29 30 <bean id="templateEngine" 31 class="org.thymeleaf.spring4.SpringTemplateEngine"> 32 <property name="templateResolver" ref="templateResolver" /> 33 </bean> 34 35 <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver"> 36 <property name="templateEngine" ref="templateEngine" /> 37 </bean> 38 39 </beans>
解釋:瀏覽器
prefix,用於指定template所在目錄;spring-mvc
suffix,過濾請求,這裏是處理全部以.html結尾的請求;緩存
templateMode,設置爲html;
cacheable,是否緩存頁面,開發時設置爲false,這樣就能夠在不重啓服務器的狀況下刷新頁面便可查看修改效果;
4: 在src目錄下添加package:com.zoo.web.controller,並新建類ZooController,其內容是:
package com.zoo.web.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class ZooController { @RequestMapping(path = "/list", method = RequestMethod.GET) public String showZooList(){ return "zoolist"; } }
類上面的註解@Controller表示這個類是一個Controller類型的組件,spring根據這個註解就能夠掃描到並將其註冊到容器中,在有http請求過來的時候spring會根據url找到匹配的controller並執行對應的方法。
@RequestMapping註解的是方法showZooList(),當瀏覽器訪問http://localhost:8080/zoo/list.html地址時就會調用此函數。函數返回的是個字符串,這個字符串對應的是/WEB-INF/pages/下的文件名,記住是不帶擴展名的,這個是在spring-mvc.xml中<property name="prefix" value="/WEB-INF/pages/" />配置的。其中method=RequestMethod.GET表示只響應get請求,若是一樣的url換成post請求就不會觸發這個方法。
5: 在WEB-INF下新建文件夾pages,並在pages裏新建文件zoolist.html,添加一些靜態數據,內容爲:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <title>zoo list</title> 6 </head> 7 <body> 8 <table border="1"> 9 <tr> 10 <th>序號</th> 11 <th>動物名稱</th> 12 <th>數量</th> 13 <th>備註</th> 14 </tr> 15 <tr> 16 <td>1</td> 17 <td>大馬猴</td> 18 <td>10</td> 19 <td>機靈古怪,俏皮活潑</td> 20 </tr> 21 <tr> 22 <td>2</td> 23 <td>大熊貓</td> 24 <td>80</td> 25 <td>體型笨重,喜歡吃竹子</td> 26 </tr> 27 <tr> 28 <td>3</td> 29 <td>澳洲羊駝</td> 30 <td>13</td> 31 <td>長相奇特,大國人俗稱其草泥馬</td> 32 </tr> 33 <tr> 34 <td>4</td> 35 <td>峨眉山猴</td> 36 <td>90</td> 37 <td>不怕人,有時候發賤搶遊客麪包吃</td> 38 </tr> 39 </table> 40 </body> 41 </html>
到此爲止所需的材料基本上就全都整好啦,如今咱們的項目結構大概是這個樣子
讓咱們啓動tomcat試一試吧!
啓動完成後看看你的Console是否是一切正常,若是有出錯信息,請自行排查。
打開瀏覽器輸入http://localhost:8080/zoo/list.html
哎呀!怎麼都是問號呀!?
別擔憂,小問題,咱們只需在spring-mvc.xml中添加一句話就ok啦拉拉,
把<property name="characterEncoding" value="UTF-8"/>加進去,放在哪裏呀?請使勁看:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:mvc="http://www.springframework.org/schema/mvc" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context.xsd 10 http://www.springframework.org/schema/mvc 11 http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 12 13 <context:component-scan base-package="com.zoo.web.controller"/> 14 <mvc:annotation-driven/> 15 16 <!-- 使用thymeleaf解析 --> 17 <bean id="templateResolver" 18 class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver"> 19 <property name="prefix" value="/WEB-INF/pages/" /> 20 <property name="suffix" value=".html" /> 21 <property name="templateMode" value="HTML" /> 22 <property name="cacheable" value="false" /> 23 </bean> 24 25 <bean id="templateEngine" 26 class="org.thymeleaf.spring4.SpringTemplateEngine"> 27 <property name="templateResolver" ref="templateResolver" /> 28 </bean> 29 30 <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver"> 31 <property name="templateEngine" ref="templateEngine" /> 32 <!--解決中文亂碼--> 33 <property name="characterEncoding" value="UTF-8"/> 34 </bean> 35 36 </beans>
完成後記得從新啓動tomcat,再用瀏覽器看一看:
哇,正常了,終於看到大馬猴和草泥馬啦拉拉!
等一等,咱們是否是忘記了什麼?對了,咱們再訪問一下首頁http://localhost:8080/zoo看看
咿呀呀,搞什麼飛機,怎麼出錯啦,仍是404,怎麼找不到頁面啦,讓阿拉想一想怎麼解決......
好,有了,一樣在spring-mvc.xml中添加一句話就ok,
把<mvc:default-servlet-handler />加進去就能解決。這句話怎麼這麼列害!爲何呢?
讓咱們想想整個流程,當http://localhost:8080/zoo這個請求來到tomcat server時,實際上請求的是http://localhost:8080/zoo/index.html或者http://localhost:8080/zoo/default.jsp,總之是wellcome-file-list中的某個頁面,可實際上在咱們的應用中沒有哪一個類的哪一個方法來響應/index.html或者default.jsp等,因此這句話的意思就是在這條路走不通的狀況下使用默認servlet來處理,這個標籤對應的是
org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 這個handler,它轉而調用當前web容器默認的servlet,讓當前默認servlet來處裏。
最後的內容以下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:mvc="http://www.springframework.org/schema/mvc" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context.xsd 10 http://www.springframework.org/schema/mvc 11 http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 12 13 <context:component-scan base-package="com.zoo.web.controller"/> 14 <mvc:annotation-driven/> 15 <!-- 默認servlet --> 16 <mvc:default-servlet-handler /> 17 18 <!-- 使用thymeleaf解析 --> 19 <bean id="templateResolver" 20 class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver"> 21 <property name="prefix" value="/WEB-INF/pages/" /> 22 <property name="suffix" value=".html" /> 23 <property name="templateMode" value="HTML" /> 24 <property name="cacheable" value="false" /> 25 </bean> 26 27 <bean id="templateEngine" 28 class="org.thymeleaf.spring4.SpringTemplateEngine"> 29 <property name="templateResolver" ref="templateResolver" /> 30 </bean> 31 32 <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver"> 33 <property name="templateEngine" ref="templateEngine" /> 34 <!--解決中文亂碼--> 35 <property name="characterEncoding" value="UTF-8"/> 36 </bean> 37 38 </beans>
重啓服務器再試試看,是否是好了呢。
本篇的內容到此也就結束了,下一篇介紹頁面參數獲取。
END.