Spring MVC

参考资料

https://www.bilibili.com/video/BV1Fi4y1S7ix?p=43&vd_source=c581024b8cd9585ec6a75c56ac05571a

1. SpringMVC 简介

  • SpringMVC技术与Servlet技术功能等同,均属于web层开发技术。

  • SpringMVC 是一种基于Java实现MVC模型的轻量级Web框架。

  • SpringMVC 是一种表现层框架技术。

  • 优点:使用简单,开发便捷,灵活性强。

2. SpringMVC 入门案例

  1. 导入SpringMVC依赖和Servlet依赖
<dependencies>
    <!--SpringMVC依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.21</version>
    </dependency>
    <!--Servlet依赖-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    </dependencies>
  1. 创建SpringMVC控制器类(相当于Servlet类)
@RestController
//@RestController = @ResponseBody + @Controller
//@Controller 将类注册到Spring容器
//@ResponseBody 将方法返回值作为响应体,不加则是跳转的页面
public class UserController {

    @RequestMapping("/save") //设置请求路径
    public String save() {
        return "save";
    }
}
  1. 创建SpringMVC的配置类,设置ComponentScan路径
@Configuration
@ComponentScan({"com.xin.web"})
public class SpringMVCConfig {
    public static void main(String[] args) {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
    }
}
  1. 初始化Servle容器,加载SpringMVC环境配置,并设置SpringMVC处理的请求路径
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
	//加载Spring Web容器配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
    	//创建一个Spring Web容器
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        //加载配置
        context.register(SpringMVCConfig.class);
        return context;
    }

    @Override
    protected String[] getServletMappings() {
    	//设置交给SpringMVC处理的请求路径。"/"所有请求
        return new String[]{"/"};
    }
	
	//加载Spring容器配置。
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}
  1. 部署到tomcat ,访问路径 localhost/save
    在这里插入图片描述

3. 初始化Servle容器,加载SpringMVC容器配置,并设置SpringMVC处理的请求路径

方式一 继承AbstractDispatcherServletInitializer

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {

    @Override
    protected WebApplicationContext createServletApplicationContext() {
        //创建SpringMVC容器
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        //加载配置
        context.register(SpringMVCConfig.class);
        return context;
    }

    @Override
    protected String[] getServletMappings() {
        //设置“/” 所有请求路径都交给SpringMVC控制器处理。
        return new String[]{"/"};
    }

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        //创建Spring容器
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        //加载配置
        context.register(SpringConfig.class);
        return context;
    }
}

方式二 继承AbstractAnnotationConfigDispatcherServletInitializer

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMVCConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

4. 入门案例工作流程分析

在这里插入图片描述

5. SpringMVC加载的Controller和Spring加载的Bean分开

在这里插入图片描述

@Configuration
@ComponentScan(value = {"com.xin.web"},
        excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class))
public class SpringConfig {
    public static void main(String[] args) {
        //验证下是否排除了@Controller注解下的Bean
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        UserController userController = context.getBean(UserController.class);
        System.out.println(userController);
    }
}

6. 给Web容器添加过滤器并制定字符集

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    @Override
    protected Filter[] getServletFilters() {
        //设置字符过滤,处理中文乱码
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        return new Filter[]{characterEncodingFilter};
    }
}

7. 接收请求参数

1. 普通参数

在这里插入图片描述

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

2. POJO对象

在这里插入图片描述

3. 嵌套的POJO

在这里插入图片描述

4. 数组

在这里插入图片描述

5. 集合

在这里插入图片描述

8. 接收请求参数 JSON格式

  1. 导入转json的依赖
        <!--字符串转json格式的依赖-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.3</version>
        </dependency>
  1. 开启注解
@ComponentScan({"com.xin.web.controller"})
@EnableWebMvc //开启json数据转换为对象
public class SpringMVCConfig {
}
  1. 形参上加@RequestBody注解,参数从请求体中获取
@RestController
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/save") //设置请求路径
    public String save(@RequestBody User user) {
        System.out.println(user);
        return user.toString();
    }
}
  1. 测试
    在这里插入图片描述

9. 请求参数 日期类型

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

10. 响应页面

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/save")
    public String save() {
        //响应到页面
        return "/index.jsp"; //页面路径
    }
}

11. 响应数据

1. 响应字符串

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/save")
    @ResponseBody
    public String save() {
        //响应文本数据
        return "save";
    }
}

2. 响应json数据

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/save")
    @ResponseBody
    public User save() {
        User user = new User();
        return user; //jackson帮我们将对象转为json格式的数据了。
    }
}

在这里插入图片描述

12. REST 风格

在这里插入图片描述

13. 放行静态资源

public class SpringMVCSupport extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        //放行静态资源,不由SpringMVC控制器管理
        registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
        registry.addResourceHandler("/html/**").addResourceLocations("/html/");
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
    }
}
@Configuration
@ComponentScan(basePackages = {"com.xin.web.controller"})
@Import(SpringMVCSupport.class) //将SpringMVCSupport对象添加到SpringMVC容器。
@EnableWebMvc //开启json数据转换为
public class SpringMVCConfig {
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值