官方文档:https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#spring-web

Spring MVC 是Spring为展现层提供的基于 MVC 设计理念的优秀的web框架,支持 Rest 风格的 URL 请求。

  • M:Model,业务模型,负责完成业务中的数据通信处理,对应项目中的service和dao
  • V:View,渲染数据,生成页面,对应项目中的页面模板
  • C:Controller,直接对接请求,控制MVC流程,调度模型,选择视图,对应项目中的Servlet

简单使用

1、idea 创建Maven项目,导入Maven依赖:由下图可知 spring-webmvc 依赖已经导入了spring的基础依赖,因此只需在maven中导入 spring-webmvc 的依赖即可
image.png

  1. <dependencies>
  2. <!-- servlet编译环境,采用4.0版本 -->
  3. <dependency>
  4. <groupId>javax.servlet</groupId>
  5. <artifactId>javax.servlet-api</artifactId>
  6. <version>4.0.1</version>
  7. <scope>provided</scope>
  8. </dependency>
  9. <!-- spring-webmvc含有spring和web的相关依赖 -->
  10. <dependency>
  11. <groupId>org.springframework</groupId>
  12. <artifactId>spring-webmvc</artifactId>
  13. <version>5.2.9.RELEASE</version>
  14. </dependency>
  15. </dependencies>
  16. <build>
  17. <plugins>
  18. <plugin>
  19. <groupId>org.apache.maven.plugins</groupId>
  20. <artifactId>maven-compiler-plugin</artifactId>
  21. <version>3.8.1</version>
  22. <configuration>
  23. <encoding>utf-8</encoding>
  24. <source>1.8</source>
  25. <target>1.8</target>
  26. </configuration>
  27. </plugin>
  28. </plugins>
  29. </build>

2、web项目,打包成war包,在pom.xml文件中进行配置
image.png

3、创建 web 目录:在 main 目录下创建 webapp 文件夹,然后再 webapp 文件夹内创建 WEB-INF 文件夹

  • webapp 目录就是 web 目录,里面存放动态、静态资源和配置文件,如 jsp、css、html等
  • WEB-INF 目录下只有一个文件,就是web的配置文件:web.xml

image.png

4、idea自动生成 web.xml:

  • 【File】->【Project Structure】

    image.png

  • 【Modules】->选择当前项目下的 web 文件夹,然后点击右边的加号,选择 web.xml

屏幕截图 2020-11-24 221919.png

  • 调整 web.xml 文件的位置,然后依次点击 OK 即可

    屏幕截图 2020-11-24 221919.png

5、在 web.xml 中进行配置前端控制器:dispatcherServlet,前端控制器的作用如下

  • 前端,负责接受所有请求
  • 加载mvc.xml,启动 Spring MVC 工厂
  • Spring MVC 流程调度

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    5. version="4.0">
    6. <!-- 前端控制器:
    7. 1.控制SpringMVC的一切行为
    8. 2.启动springMVC工厂
    9. -->
    10. <servlet>
    11. <servlet-name>springDispatcherServlet</servlet-name>
    12. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    13. <init-param>
    14. <!-- 配置spring-mvc配置文件位置 -->
    15. <param-name>contextConfigLocation</param-name>
    16. <param-value>classpath:spring-mvc.xml</param-value>
    17. </init-param>
    18. <!-- 在tomcat启动时加载该servlet -->
    19. <load-on-startup>1</load-on-startup>
    20. </servlet>
    21. <!-- 设置接受所有请求 -->
    22. <servlet-mapping>
    23. <servlet-name>springDispatcherServlet</servlet-name>
    24. <url-pattern>/</url-pattern>
    25. </servlet-mapping>
    26. </web-app>

6、idea 自动生成 Spring MVC 配置文件:spring-mvc.xml

  • 默认名称:核心控制器名-server.xml
  • 默认位置:WEB-INF
  • 常用名称:mvc.xml
  • 常用位置:resources

    屏幕截图 2020-11-24 221919.png

7、编写一个简单的后端控制器:

  1. @Controller // 声明控制器
  2. public class MvcController {
  3. @RequestMapping(value = "/hello", method = RequestMethod.GET)
  4. public String hello() {
  5. return "hello";
  6. }
  7. }

8、在spring-mvc配置文件中配置注解扫描、注解驱动、视图解析器等,同时在 webapp/WEB-INF/ 下创建一个 views 目录,再在该目录中创建一个 hello.jsp

注意看约束条件,tomcat启动时如果报错 No bean named ‘cacheManager’ is defined 错误,则说明约束文件有误(Spring的xml文件中使用到tx标签,idea工具默认引入cache命名空间)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. 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">
  7. <!-- 配置扫描路径 -->
  8. <context:component-scan base-package="top.songfang.controller"/>
  9. <!-- 注解驱动 -->
  10. <mvc:annotation-driven/>
  11. <!-- 视图解析器 -->
  12. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  13. <!-- 前缀 -->
  14. <property name="prefix" value="/WEB-INF/views/"/>
  15. <!-- 后缀 -->
  16. <property name="suffix" value=".jsp"/>
  17. </bean>
  18. </beans>

9、配置 tomcat:

  • 【Add Configuration】

image.png

  • 加号,下拉,展开 tomcat server,选择 Local

image.png

  • 切换到【Deployment】标签,点击旁边的加号,选择【Artifact…】

image.png

  • 在弹出窗口中,选择 war exploded,点击 OK

image.png

  • 在【Deployment】的OK上面有一栏 Application Context,可以自定义一个简单的应用路径

image.png

  • 点击右侧的笔按钮,如果相关依赖没有自动导入,则全选后右键,选择【Put into /WEB-INF/lib】

image.png

10、运行,访问http://localhost:8080/demo/hello