---
# System prepended metadata

title: 使用註解開發SpringMVC
tags: [SpringMVC-基礎]

---

# 使用註解開發SpringMVC
###### tags: `SpringMVC-基礎`

### 1.配置web.xml

![](https://i.imgur.com/9H9rmYm.png)
![](https://i.imgur.com/Mz06yET.png)
完成
![](https://i.imgur.com/159Eb92.png)

### 2.添加lib目錄
![](https://i.imgur.com/bexP8Zb.png)
把所有包導入
![](https://i.imgur.com/VJsWGGI.png)

### 3.在pom.xml添加解決maven過濾問題的文件

```xml=
<?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">
    <parent>
        <artifactId>SpringMVC</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springmvc-03-annotation</artifactId>

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>
```

### 4.在web.xml中註冊DispatcherServlet

#### 在Project Structure中的Artifacts，新增lib資料夾，並且將Maven的jar添加進去
![](https://i.imgur.com/3zxMIEI.png)

* 注意web.xml版本问题，要最新版！
* 注册DispatcherServlet
* 关联SpringMVC的配置文件
* 启动级别为1
* 映射路径为 / 【不要用/*，会404】

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

    <!--配置DispatcherServlet：這個是SpringMVC的核心：請求分發器，前端控制器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <!-- <servlet-class>：對應文件位置       -->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--DispatcherServlet要綁定Spring的配置文件-->
        <!--init-param是配置Servlet的初始化参数-->
        <init-param>
            <!--在web.xml中通過contextConfigLocation配置spring，
                contextConfigLocation引數定義了要裝入的 Spring 配置檔案。-->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <!--啟動級別：1-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--
        在SpringMVC中， /  /* 有區別
        / ：只匹配所有的請求，不會去配置jsp頁面
        /*：匹配所有的請求，包括jsp頁面
        因為視圖解析器包含jsp，如果使用/*，會形成jsp.jsp.jsp...的無限嵌套
        -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!-- <url-pattern>：瀏覽器訪問地址-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
```



### 5.編寫springmvc-servlet.xml文件

在resource目录下添加springmvc-servlet.xml配置文件，配置的形式与Spring容器配置基本类似，为了支持基于注解的IOC，设置了自动扫描包的功能，具体配置信息如下：

```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
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 自动扫描包，让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.kuang.controller"/>
    <!-- 让Spring MVC不处理静态资源 -->
    <mvc:default-servlet-handler />
    <!--
    支持mvc注解驱动
        在spring中一般采用@RequestMapping注解来完成映射关系
        要想使@RequestMapping注解生效
        必须向上下文中注册DefaultAnnotationHandlerMapping
        和一个AnnotationMethodHandlerAdapter实例
        这两个实例分别在类级别和方法级别处理。
        而annotation-driven配置帮助我们自动完成上述两个实例的注入。
     -->
    <mvc:annotation-driven />

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>

</beans>
```

在视图解析器中我们把所有的视图都存放在/WEB-INF/目录下，这样可以保证视图安全，因为这个目录下的文件，客户端不能直接访问。
![](https://i.imgur.com/KpD2N2E.png)
* 让IOC的注解生效
* 静态资源过滤 ：HTML . JS . CSS . 图片 ， 视频 .....
* MVC的注解驱动
* 配置视图解析器

並創建一個hello.jsp
```xml=
<%--
  Created by IntelliJ IDEA.
  User: User
  Date: 2022/9/18
  Time: 下午 09:46
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>
```

### 6.创建Controller
```java=
@Controller
@RequestMapping("/hello")
public class HelloController {
    //真实访问地址 : localhost:8080/hello/h1
    @RequestMapping("/h1")
    public String hello(Model model){
        //封裝數據
        //向模型中添加属性msg与值，可以在JSP页面中取出并渲染
        model.addAttribute("msg","Hello,SpringMVCAnnotation！");
        //web-inf/jsp/hello.jsp
        return "hello"; //會被視圖解析器處理：/WEB-INF/jsp/hello.jsp
    }
}

```
表示掃描已經生效
```xml=
<context:component-scan base-package="com.kuang.controller"/>
```
![](https://i.imgur.com/fMnNSqv.png)

### 7.創建視圖層
```xml=
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

```

### 8.配置Tomcat運行
配置Tomcat，开启服务器，访问对应的请求路径！

成功！
![](https://i.imgur.com/sZ4Idmr.png)


## 小結
实现步骤其实非常的简单：

1.新建一个web项目

2.导入相关jar包

3.编写web.xml , 注册DispatcherServlet

4.编写springmvc配置文件

5.接下来就是去创建对应的控制类 , controller

5.最后完善前端视图和controller之间的对应

6.测试运行调试.

### 使用springMVC必须配置的三大件：

**处理器映射器、处理器适配器、视图解析器**

通常，我们只需要手动配置视图解析器，而处理器映射器和处理器适配器只需要开启注解驱动(   <mvc:annotation-driven />)即可，而省去了大段的xml配置