SpringMVC:入门案例

从此开始,我们步入SpringMVC的学习。
SpringMVC是一种基于Java实现MVC模型的轻量级Web框架

先来看一下web程序是如何工作的:

  • 因为是异步调用,所以后端不需要返回view视图,将其去除
  • 前端如果通过异步调用的方式进行交互,后台就需要将返回的数据转换成json格式进行返回
  • SpringMVC主要负责的就是
    • controller如何接收请求和数据
    • 如何将请求和数据转发给业务层
    • 如何将响应数据转换成json发回到前端

1,SpringMVC入门案例

1.创建web工程(Maven结构)

2.设置tomcat服务器,加载web工程(tomcat插件)

3.导入坐标(SpringMVC+Servlet)

4.定义处理请求的功能类(UserController)

5.设置请求映射(配置映射关系)

6.将SpringMVC设定加载到Tomcat容器中

步骤1:创建Maven项目

打开IDEA,创建一个新的web项目

步骤2:补全目录结构

创建java目录:

打开项目架构:

将刚创建的java目录设置为源码目录

步骤3:导入jar包

将pom.xml中多余的内容删除掉,再添加SpringMVC需要的依赖

xml 复制代码
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.fage</groupId>
  <artifactId>springMVC001</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>springMVC001 Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <port>80</port>
          <path>/</path>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

注意:

这里的打包必须是: <packaging>war</packaging>

**说明:**servlet的坐标为什么需要添加<scope>provided</scope>?

  • scope是maven中jar包依赖作用范围的描述,

  • 如果不设置默认是compile在在编译、运行、测试时均有效

  • 如果运行有效的话就会和tomcat中的servlet-api包发生冲突,导致启动报错

  • provided代表的是该包只在编译和测试的时候用,运行的时候无效直接使用tomcat中的,就避免冲突

步骤4:创建配置类
java 复制代码
//springmvc配置类,本质上还是一个spring配置类
@Configuration
@ComponentScan("itheima.controller")
public class SpringMvcConfig {
}
步骤5:创建Controller类

设置映射路径为/save,即外部访问路径: @RequestMapping("/save")

设置当前操作返回结果为指定json数据(本质上是一个字符串信息): @ResponseBody

创建对应的处理方法:public String save()

java 复制代码
@Controller
public class UserController {

    //设置映射路径为/save,即外部访问路径
    @RequestMapping("/save")
    //设置当前操作返回结果为指定json数据(本质上是一个字符串信息)
    @ResponseBody
    public String save(){
        System.out.println("user save ...");
        return "{'info':'springmvc save'}";
    }

    //设置映射路径为/delete,即外部访问路径
    @RequestMapping("/delete")
    @ResponseBody
    public String delete(){
        System.out.println("user delete ...");
        return "{'info':'springmvc delete'}";
    }
}
步骤6:使用配置类替换web.xml

将web.xml删除,换成ServletContainersInitConfig

创建servlet容器:createServletApplicationContext

加载springmvc配置类:SpringMvcConfig.class

设置由springmvc控制器处理的请求映射路径

加载spring配置类:createRootApplicationContext(),可以直接返回null,因为用不到

java 复制代码
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //加载springmvc配置类
    protected WebApplicationContext createServletApplicationContext() {
        //初始化WebApplicationContext对象
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        //加载指定配置类
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }

    //设置由springmvc控制器处理的请求映射路径
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    //加载spring配置类
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}
步骤7:配置Tomcat环境

需要再pom中的build中配置tomcat7-maven-plugin,包括端口80,路径/

添加maven

步骤8:启动运行项目

控制台信息:

上图说明已经启动了tomcat

步骤9:浏览器访问


控制台:

至此SpringMVC的入门案例就已经完成。
注意事项

  • SpringMVC是基于Spring的,在pom.xml只导入了spring-webmvcjar包的原因是它会自动依赖spring相关坐标
  • AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类
  • AbstractDispatcherServletInitializer提供了三个接口方法供用户实现
    • createServletApplicationContext方法,创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围
    • getServletMappings方法,设定SpringMVC对应的请求映射路径,即SpringMVC拦截哪些请求
    • createRootApplicationContext方法,如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,使用方式和createServletApplicationContext相同。
    • createServletApplicationContext用来加载SpringMVC环境
    • createRootApplicationContext用来加载Spring环境

知识点1:@Controller

名称 @Controller
类型 类注解
位置 SpringMVC控制器类定义上方
作用 设定SpringMVC的核心控制器bean

知识点2:@RequestMapping

名称 @RequestMapping
类型 类注解或方法注解
位置 SpringMVC控制器类或方法定义上方
作用 设置当前控制器方法请求访问路径
相关属性 value(默认),请求访问路径

知识点3:@ResponseBody

名称 @ResponseBody
类型 类注解或方法注解
位置 SpringMVC控制器类或方法定义上方
作用 设置当前控制器方法响应内容为当前返回值,无需解析

2,入门案例总结

  • 一次性工作
    • 创建工程,设置服务器,加载工程
    • 导入坐标
    • 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
    • SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)
  • 多次工作
    • 定义处理请求的控制器类
    • 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)

3,工作流程

请见:SpringMVC工作流程

[声明]:内容主要来源黑马程序员网上资源学习

相关推荐
paopaokaka_luck10 分钟前
[384]基于springboot的药品管理系统
java·spring boot·后端
煎饼果子呀16 分钟前
mvc命令
mvc
老马啸西风28 分钟前
Neo4j APOC-01-图数据库 apoc 插件介绍
java
次次皮41 分钟前
【方案三】JAVA中使用ocr(Umi-OCR)
java·ocr
疯一样的码农1 小时前
如何使用Apache HttpClient发送带有HTML表单数据的POST请求
java·apache·httpclient
Allen Bright1 小时前
使用 Apache Commons IO 实现文件读写
java·开发语言·apache
武子康1 小时前
Java-16 深入浅出 MyBatis - SqlSession Executor StatementHandler 源码分析
java·开发语言·mysql·mybatis·springboot
{⌐■_■}1 小时前
【docker】docker build上下文
java·docker·容器
程序猿小柒1 小时前
leetcode hot100【Leetcode 72.编辑距离】java实现
java·算法·leetcode
Yuan_o_1 小时前
SpringBoot 统一功能处理
java·spring boot·后端