SpringMVC4+thymeleaf3的一個簡單實例(篇二:springMVC與thymeleaf的整合)

延續前篇內容。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.

相關文章
相關標籤/搜索