1、創建一個maven工程
首先創建一個webapp模塊的Maven項目,如下:
創建好之后導入如下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>
創建后項目的整體目錄如下:
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服務器,打開主頁訪問:
點擊超鏈接,成功跳轉到相應頁面,說明我們的第一個SpringMVC程序創建成功了。
補充:新版IDEA(我的是2020.3)注意這里: