SSM学习(六)---Spring MVC

1.Spring MVC

Spring MVC与Servlet技术功能相同,均属于Web开发技术
Spring MVC是一种基于JAVA实现MVC模型的轻量级Web框架

Spring MVC入门案例

1.导入坐标

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

导入tomcat插件

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <path>/</path> <!--项目访问路径。当前配置的访问是localhost:8080/, 如果配置是/aa,则访问路径为localhost:8080/aa -->
          <port>8080</port>
          <uriEncoding>UTF-8</uriEncoding><!-- 非必需项 -->
        </configuration>
      </plugin>
    </plugins>
  </build>

2.创建SpingMVC控制器类(等同于Servlet功能)

package com.itheima.config;
public class SpirngMVCConfig {
}

在这里插入图片描述

3.初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的Bean

在这里插入图片描述

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

在这里插入图片描述
复杂版:

package com.itheima.config;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

//定义一个servlet容器启动的配置类,在里面加载spring的配置
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //加载springMVC容器配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx=new AnnotationConfigWebApplicationContext();
        ctx.register(SpirngMVCConfig.class);
        return ctx;
    }

    //设置哪些请求归属springMVC处理
    @Override
    protected String[] getServletMappings() {
        //所有请求归springMVC去处理
        return new String[]{"/"};
    }

    //加载spring容器的配置
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        AnnotationConfigWebApplicationContext ctx=new AnnotationConfigWebApplicationContext();
        ctx.register(SpringConfig.class);
        return ctx;
    }
}

精简版(在复杂版的基础上进行简化)

package com.itheima.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    
    //加载Spring容器
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
    
    //加载SpringMVC容器
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpirngMVCConfig.class};
    }
    
    //将所有请求交给SpringMVC来处理
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

在这里插入图片描述
复杂版和精简版继承的类的继承关系:
在这里插入图片描述

5.定义controller

package com.itheima.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

//定义controller
//使用@Controller来定义Bean
@Controller
public class UserController {
    //设置当前操作的访问路径
    @RequestMapping("/save")
    //设置当前操作的返回值类型
    @ResponseBody
    public String save()
    {
        System.out.println("user save......");
        return "{'moudle':'springMVC'}";
    }
}

总结

在这里插入图片描述

SpringMVC工作流程

在这里插入图片描述

SpringMVC的bean加载控制

原因:在执行业务的时候,Spring不扫描controller(表现层的包),而SpringMVC扫描表现层的包

解决方法一:精确扫描需要的包

@ComponentScan({"com.itheima.service","com.itheima.dao"})
public class SpirngConfig {
}

解决方法二:排除controller包

@ComponentScan(value = "com.itheima",excludeFilters = @ComponentScan.Filter(
        type = FilterType.ANNOTATION,
        classes = Controller.class
))
public class SpirngConfig {
}

设置请求映射路径

在这里插入图片描述

Get请求与Post请求发送普通参数

在Postman中发送请求,在controller方法中定义形参用来接收请求参数

Get请求

在这里插入图片描述

Post请求

在这里插入图片描述

接收Post请求乱码处理(本质上是过滤器)

在配置类ServletContainersInitConfig中添加如下代码

    @Override
    protected Filter[] getServletFilters() {
        //字符过滤
        CharacterEncodingFilter filter=new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }

五种类型的参数传递

1.普通参数:

a.请求参数和形参名称相同直接发送请求即可
b.请求参数和形参名称不同

使用@RequestParam(“请求参数名”) 注解
在这里插入图片描述

2.pojo参数

如果实体类的属性名和请求参数名称相同,直接发送请求即可
在这里插入图片描述
在这里插入图片描述

3.嵌套的pojo参数

User类中有属性
private Address address;

public class Address{
	private String province;
	private String city;
}

发送请求参数的时候
http://localhost:8080/book/collection?address.province=北京&address.city=北京
即可

4.数组参数

请求参数和形参名称保持一致
多用于表单复选框提交数据
发送的时候key保持一致
在这里插入图片描述
接收参数
在这里插入图片描述

5.集合参数

请求参数和形参名称保持一致
发送:
在这里插入图片描述
请求:
在这里插入图片描述

JSON数据在Spring MVC中的应用

json数据在请求体中

1.导入坐标

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>

在springMVC配置文件中添加

在这里插入图片描述

2.postman发送json数据

在这里插入图片描述
在这里插入图片描述

3.接收json数据

1.普通参数

因为json数据在请求体中,所以形参不能使用@RequestParam注解,而使用@RequestBody注解

@RequestMapping("/json")
    @ResponseBody
    //接收json数据
    public String jsonRequest(@RequestBody List<String> likes)
    {
        System.out.println(likes);
        return "{'moudle':'1234'}";
    }
2. pojo类型参数

在这里插入图片描述
在这里插入图片描述

3.嵌套pojo类型参数

发送请求:
在这里插入图片描述

4.集合参数

发送请求:
在这里插入图片描述
接收请求:
在这里插入图片描述

JSON请求与响应总结:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

日期类型参数传递

默认格式:2022/8/28
在这里插入图片描述
在这里插入图片描述

响应

在这里插入图片描述

响应页面

 @RequestMapping("/page")
 @ResponseBody
public String jsonRequest()
    {
        return page.jsp;
    }

响应文本数据

在这里插入图片描述

响应JSON数据

在这里插入图片描述
对象集合转为JSON数组
在这里插入图片描述

类转换器

响应给客户端的数据为JSON数据,通过类转换器HttpMessageConverter接口实现将响应数据转换为JSON数据
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值