SpringMVC入門學習(二)----SpringMVC的第一個案例


1、創建一個maven工程

首先創建一個webapp模塊的Maven項目,如下:

image

創建好之后導入如下Maven依賴:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.2.7.RELEASE</spring.version>
</properties>
<dependencies>
    <!--Spring相關依賴-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!--Servlet相關依賴-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <!--jsp相關依賴-->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>
    <!--單元測試的依賴-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
</dependencies>

創建后項目的整體目錄如下:

image

2、在web.xml中配置DispatcherServlet(前端控制器)

<?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">

    <!-- 配置編碼過濾器,防止亂碼 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!--支持異步處理-->
        <async-supported>true</async-supported>
        <!-- 配置encoding,告訴指定的編碼格式,這里設置為UTF-8 -->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <!-- 解決請求亂碼 -->
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <!-- 解決響應亂碼 -->
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 配置SpringMVC核心控制器 -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <!-- 配置DispatcherServlet的初始化參數:讀取springmvc.xml -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <!-- servlet啟動時加載 -->
        <load-on-startup>1</load-on-startup>
        <!--支持異步處理-->
        <async-supported>true</async-supported>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!--
        /* 匹配所有資源(永遠不要這樣寫)
        /  匹配所有請求(推薦)
        *.擴展名  匹配所有請求(推薦),例如*.do
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

注意:我們也可以不通過使用contextConfigLocation配置項來指定SpringMVC的配置文件,而使用默認的配置文件為: /WEB-INF/<servlet-name>-servlet.xml,那么SpringMVC會自動去WEB-INF下面找一個叫 [servlet名字]-servlet.xml的文件,不推薦使用這種方式。

  • DispatcherServlet:它是前端核心控制器,主要負責請求的分派。前端的請求由這里分派給指定的處理器。
  • load-on-startup:當值為0或者大於0時,表示容器在應用啟動時就加載這個servlet;當是一個負數時或者沒有指定時,則指示容器在該servlet被調用時才加載。正數的值越小,啟動該servlet的優先級越高。
  • url-pattern:表示攔截哪些請求, “/” 表示攔截所有請求。也可以如”.擴展名”表示攔截所有以擴展名結尾的請求。例如”.do”

3、創建spring-mvc.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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 掃描指定包下的注解 -->
    <context:component-scan base-package="com.thr.controller"/>

    <!-- 配置注解驅動,它的主要的作用是:注冊映射器HandlerMapping和適配器HandlerAdapter 兩個類型的Bean -->
    <!--HandlerMapping的實現為實現類RequestMappingHandlerMapping,它會處理 @RequestMapping 注解,並將其注冊到請求映射表中-->
    <!--HandlerAdapter的實現為實現類RequestMappingHandlerAdapter,它是處理請求的適配器,確定調用哪個類的哪個方法,並且構造方法參數,返回值 -->
    <!--在使用SpringMVC是一般都會加上該配置 -->
    <mvc:annotation-driven/>

    <!-- 注冊視圖解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 配置前綴 -->
        <property name="prefix" value="/WEB-INF/pages/"/>
        <!-- 配置后綴 -->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>
  • InternalResourceViewResolver解析器可以解析該資源。其主要職責是:根據處理器的返回值找到資源頁面,然后裝配頁面數據,最后返回給前台。
  • prefix和suffix屬性可以指定資源頁面的前綴和后綴,可以直接把資源位置定位到項目的/WEB-INF下面。

4、創建Controller類

  • @Controller:將該Bean注冊到Spring的容器中
  • @RequestMapping:該注解可以用在類和方法上,它是用來映射請求的URL。
    • 用在類上: 表示初步的請求映射信息,所有響應請求都是以該地址作為父路徑。
    • 用在方法上: 表示在父路徑的基礎上進一步細分映射信息。
    • 類定義處未標注@RequestMapping:則映射的請求URL從方法處開始。
package com.thr.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
@Controller //聲明Bean對象,為一個控制器組件
public class HelloController {
    /**
     * 1. @RequestMapping 注解是用來映射請求的 URL
     * 2. 返回值會通過視圖解析器解析為實際的物理視圖, 對應 InternalResourceViewResolver 視圖解析器,它會做如下的解析:
     *      -通過 prefix + returnVal + suffix 這樣的方式得到實際的物理視圖, 然后做轉發操作.
     *      -這里得到的物理視圖為:/WEB-INF/pages/success.jsp
     */
    @RequestMapping("/hello")
    public String sayHello(){
        System.out.println("Hello SpringMVC");
        //訪問成功后跳轉到success頁面
        return "success";
    }
}

5、編寫視圖文件

在webapp下編寫index.jsp文件,項目啟動后會默認訪問該頁面。

注意:在第一行中需要加入這個參數isELIgnored="false",否則到時候可能訪問不到頁面。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/hello">第一個Spring MVC程序</a>
</body>
</html>

創建目標頁面(success.jsp),在WEB-INF/pages/下創建success.jsp,注:WEB-INF下的文件是不能直接通過瀏覽器訪問的,只能通過請求進行訪問。

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Hello</title>
</head>
<body>
<h1>成功訪問!!!</h1>
</body>
</html>

6、啟動Tomcat服務器測試

啟動Tomcat服務器,打開主頁訪問:

image

點擊超鏈接,成功跳轉到相應頁面,說明我們的第一個SpringMVC程序創建成功了。

image


補充:新版IDEA(我的是2020.3)注意這里:

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM