Spring MVC

1. Spring MVC 简介

Spring MVC技术与Servlet功能技术等同,均属于web层开发技术

2. Spring MVC 入门案例

2.1 导入sevlet和springmvc坐标

pom.xml

XML 复制代码
    <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>

2.2 创建SpringMVC控制器类

com.gtc.controller.UserController.java

java 复制代码
@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/save")
    @ResponseBody
    public String save(){
        System.out.println("user save...");
        return "{'user':'save'}";
    }

    @RequestMapping("/delete")
    @ResponseBody
    public String delete(){
        System.out.println("user delete...");
        return "{'user':'delete'}";
    }
}

2.3 初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean

com.gtc.config.SpringMvcConfig.java

java 复制代码
@Configuration
@ComponentScan("com.gtc.controller")
public class SpringMvcConfig {
    
}

2.4 初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求

复制代码
com.gtc.config.ServletContainerInitConfig.java
java 复制代码
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
    // 加载springmvc容器配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        // 创建空容器
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        // 注册容器的配置
        context.register(SpringMvcConfig.class);
        return context;
    }

    // 加载哪些请求归属springmvc处理
    @Override
    protected String[] getServletMappings() {
        // 所有请求都由mvc处理
        return new String[]{"/"};
    }
    // 加载spring容器配置
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

2.5 导入Tomcat插件(或用本地Tomcat)

XML 复制代码
 <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>

2.6 启动服务器

3. bean 加载控制

SpringMVC容器加载controller的表现层bean

Spring容器控制service的业务bean、dao的数据bean等

因为功能不同,如何避免Spirng错误加载到SpringMVC的bean?

**解决办法:**SpringMvcConfig只加载mvc的bean,Spring加载所有(排除掉springmvc的bean)的bean

  • SpringMVC相关bean加载控制
    • SpringMVC加载的bean对应的包均在com.gtc.controller内
  • Spring相关bean加载控制
    • 方式一: Sring加载的bean设定扫描范围为com.gtc,排除掉controller包内的bean
    • 方式二: Spring加载的bean设定扫描范围为精准扫描,例如service包、dao包等

3.1 Spring MVC加载表现层bean

com.gtc.config.SpringMvcConfig.java

java 复制代码
@Configuration
@ComponentScan("com.gtc.controller")
public class SpringMvcConfig {
}

3.2 Spring加载其他bean

com.gtc.config.SpringConfig.java

**方式一:**Sring加载的bean设定扫描范围为com.gtc,排除掉controller包内的bean

java 复制代码
@Configuration
@ComponentScan(value="com.gtc", excludeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION,classes=Controller.class))
public class SpringConfig {
}

**方式二:**Spring加载的bean设定扫描范围为精准扫描,例如service包、dao包等

java 复制代码
@Configuration
@ComponentScan("com.gtc.service","com.gtc.dao")
public class SpringConfig {
}

4. 请求与响应

4.1 请求映射路径

@RequestMapping注解实现

4.2 请求参数

在Postman中发送Get请求:

在Postman中发送Post请求:

普通参数传递:

java 复制代码
@Controller
public class ParamController {

    // 普通参数
    @RequestMapping("/commonParam")
    @ResponseBody
    public String commonParam(String name, int age) {
        System.out.println("普通参数传递 name ==> " + name);
        System.out.println("普通参数传递 age ==> " + age);
        return "{'module':'common param'}";
    }

    // 普通参数---请求参数与形参名不同
    @RequestMapping("/commonParam02")
    @ResponseBody
    public String commonParam02(@RequestParam("name") String userNname, int age) {
        System.out.println("普通参数2传递 name ==> " + userNname);
        System.out.println("普通参数2传递 age ==> " + age);
        return "{'module':'common param'}";
    }
}

POJO类型参数

前提:有一个User类,定义了String name和int age两个属性,写了getter和setter方法和toString方法

java 复制代码
  // POJO类型参数
    @RequestMapping("/pojoParam")
    @ResponseBody
    public String pojoParam(User user) {
        System.out.println("pojo类型参数传递 ==> " + user);
        return "{'module':'pojo param'}";
    }

4.3 响应json数据

Postman发送json数据

(1)加入jackson-databind坐标

XML 复制代码
 <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>

(2)配置SpringMvcConfig.java加入EnableWebMvc注解

java 复制代码
package com.gtc.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;


@Configuration
@ComponentScan("com.gtc.controller")
@EnableWebMvc // 开启外部发送的json转换为对象功能
public class SpringMvcConfig{

}

(3)

java 复制代码
  // 集合参数: json格式
    @RequestMapping("/listParamForJson")
    @ResponseBody
    public String listParamForJson(@RequestBody List<String> likes){
        System.out.println(likes);
        return "{'module':'list param'}";
    }

4.4 响应

响应页面

java 复制代码
@Controller
@RequestMapping("/user")
public class UserController {
    // 响应页面
    @RequestMapping("/toJumpPage")
    public String toJumpPage() {
        System.out.println("跳转页面");
        return "index.jsp";
    }
}

响应数据

5. REST风格

5.1 REST简介

REST(Representational State Transfer),表现形式状态转换

5.2 RESTful入门案例

SpringMVC支持的八种请求方式:

主要四种:增PUT删DELETE改POST查GET

相关推荐
南宫生2 小时前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
计算机毕设定制辅导-无忧学长2 小时前
Maven 基础环境搭建与配置(一)
java·maven
逸狼3 小时前
【JavaEE进阶】Spring MVC(3)
spring·java-ee·mvc
风与沙的较量丶3 小时前
Java中的局部变量和成员变量在内存中的位置
java·开发语言
m0_748251723 小时前
SpringBoot3 升级介绍
java
极客先躯4 小时前
说说高级java每日一道面试题-2025年2月13日-数据库篇-请说说 MySQL 数据库的锁 ?
java·数据库·mysql·数据库的锁·模式分·粒度分·属性分
程序员侠客行4 小时前
Spring事务原理 二
java·后端·spring
小猫猫猫◍˃ᵕ˂◍5 小时前
备忘录模式:快速恢复原始数据
android·java·备忘录模式
liuyuzhongcc5 小时前
List 接口中的 sort 和 forEach 方法
java·数据结构·python·list
小天努力学java5 小时前
AI赋能传统系统:Spring AI Alibaba如何用大模型重构机票预订系统?
人工智能·spring