1. 程式人生 > 其它 >SpringMVC知識盤點及總結1

SpringMVC知識盤點及總結1

學習目標:SpringMVC
1.建立一個java專案,刪除src目錄(目的:當一個父資料夾使用,方便統一管理每個學習模組)

2.選中父目錄SpringMVC右鍵-> new ->Module建立一個子模組

3.給子模組起一個名字,點選finish,建立成功

4.在pom檔案中,分別新增spring-webmvc、logback-classic、javax.servlet-api、thymeleaf-spring5
依賴。作用分別為:springMVC、日誌管理、編譯需要(伺服器自帶)、spring5和thymeleaf整合。
<?xml version="1.0" encoding="UTF-8"
?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.st.mvc</groupId
> <artifactId>springMVC-demo01</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!--新增MVC依賴--> <dependency> <groupId>org.springframework</groupId> <
artifactId>spring-webmvc</artifactId> <version>5.3.1</version> </dependency> <!--新增日誌依賴--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <!--新增ServletAPI,設定作用域scope為provided(已被伺服器提供) 因為編譯需要,(執行時不需要),tomcat自帶servlet-api 專案打成war包後,不會存在於lib下--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <!--新增spring5和Thymeleaf的整合包--> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId> <version>3.0.12.RELEASE</version> </dependency> </dependencies> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> </project>

5.選中main資料夾,右鍵新建名為webapp的資料夾。(也可以右鍵子模組直接使其變為web專案)

6.點選File選擇Project Structure(專案結構),點選Module,選擇web,在最上面一欄點選+號
新增一個web.xml,然後把路徑修改。(讓web.xml檔案處於webapp\WEB-INF下就可以了。)
*(也可以在最初建立子模組時,選擇webapp模板,省事)

7.在web.xml檔案中配置SpringMVC的前端控制器:

<!--配置SpringMVC的前端控制器,對瀏覽器傳送的請求進行統一處理-->
<servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>


8.配置servlet-mapping:

 <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

(1)需要注意名字與上面的servlet名字一致

(2)
<url-pattern>此處只加一個/(此處路徑不能寫死,否則只對此處的一個進行處理)</url-pattern>


(3)設定springMVC核心控制器所能處理請求的請求路徑,
/所匹配的請求可以是/login或.html或.js或.css方式的請求路徑,
但是/不能匹配.jsp請求路徑的請求。

web.xml完整程式碼:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--配置SpringMVC的前端控制器,對瀏覽器傳送的請求進行統一處理-->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!--配置springMVC配置檔案的位置和名稱-->
        <init-param>
            <!--上下文配置路徑-->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springMVC.xml</param-value>
        </init-param>
        <!--將前端控制器DispatcherServlet的初始化時間提前到伺服器啟動時-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--設定springMVC核心控制器所能處理請求的請求路徑
      /所匹配的請求可以是/login或.html或.js或.css方式的請求路徑
      但是/不能匹配.jsp請求路徑的請求-->
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>



9.以上是springMVC的預設配置方式,最優的配置方式是擴充套件配置方式。

10.在第七步的配置中增加:init-param (配置springMVC配置檔案的位置和名稱)

<init-param>
        <!--上下文配置路徑-->
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springMVC.xml</param-value>
    </init-param>


11.此行會報紅:
<param-value>classpath:springMVC.xml</param-value>

因為沒有此檔案。所以我們需要建立springMVC.xml

點選resources右鍵new xml檔案,當建立之後就不會報紅了。

12. 在第七步的配置中增加:<load-on-startup>1</load-on-startup>
目的:將前端控制器DispatcherServlet的初始化時間提前到伺服器啟動時
      <load-on-startup>1</load-on-startup>

13.開始配置springMVC.xml檔案

(1).建立HelloController類,加@Controller註解

(2).在springMVC中配置元件掃描:

 <context:component-scan base-package="com.st.springmvc.controller"></context:component-scan>


當配置元件掃描後,當前加了@controller註解的類的物件就交給了IOC容器來管理了

(3).配置Thymeleaf的檢視解析器(servlet只需配置字首和字尾)
  (4)此處放上完整的springMVC.xml程式碼:
      
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <!--配置元件掃描-->
    <context:component-scan base-package="com.st.springmvc.controller"></context:component-scan>
    <!--配置Thymeleaf檢視解析器-->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!--檢視字首-->
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <!--檢視字尾-->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

</beans>


14.在WEB-INF下建立一個資料夾templates用來存放html網頁檔案。

(1).新建一個index.html檔案,裡面加入Thymeleaf的名稱空間
xmlns:th="www.thymeleaf.org"

在body裡寫一個簡單的h1標籤,例:<h1>Hello SpringMVC<h1>
完整html頁面:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首頁</title>

</head>
<body>
<h1> Hello SpringMVC</h1>
</body>
</html>

(2).在HelloController中寫一個方法,用來返回檢視。名字隨意,我這裡起名index

(3).在方法上面加@RequestMapping建立對映關係,給一個value值,即value = "/"。
解釋一下"/",因為當前只有一個返回檢視,所以只需寫一個/
package com.st.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @Author: 尚廷
 * @Date: 2021/12/21/ 12:17
 * @Description:
 */
@Controller

public class HelloController {
    //"/"-->/WEB-INF/templates/index.html

    //建立對映關係
    @RequestMapping(value = "/")
    public  String index(){
        //返回檢視名稱: index
        return "index";
    }

}


15.接下來新增Tomcat伺服器(我是用的是9.0.54版本):

1.點選IDEA右上角Add configuration,出現的頁面

2.點選+號來配置Tomcat,找到Tomcat選擇local起個名字,如:Tomcat9

3.找到Application server 點選右面的Configure,選擇TomcatHome 選擇你自己的Tomcat路徑,然後確定。

如果之前你配置過Tomcat就不需要配置了。

4.選擇Deployment點選小+號,選擇Artifact,出現兩個後面帶有war的選項,隨便選擇一個,我選擇第一個。
URL路徑最後那個太長了,可以按照你的喜好改一個,比如springmvc

5.點選apply,點選ok

16.啟動你的Tomcat伺服器

  IDEA預設自動開啟瀏覽器,你也可以自己設定手動開啟。

  然後就訪問成功了,頁面中出現了你寫好的h1標籤裡面的內容:Hello SpringMVC

17.至此第一個SpringMVC demo就學習完畢了。
注意!
*此練習中我遇到的錯誤:“萬用字元的匹配很全面, 但無法找到元素 'context:component-scan' 的宣告”
*啟動Tomcat,頁面報500錯誤,按照控制檯錯誤提示,判斷是在springMVC中名稱空間缺少了context,上下都需要寫
*url中的名稱空間必須為偶數個。一定要注意!!!