SpringMVC学习(入门案例思路及实现、Web容器初始化与SpringMVC配置类)(2)

目录

一、SpringMVC入门案例实现思路。

(1)核心依赖坐标分析。

(2)控制器类及其所使用注解分析。

(3)SpringMVC配置类及所使用注解分析。

(4)Tomcat启动时加载SpringMVC配置。(Web容器初始化配置类)

二、SpringMVC入门案例。(实操)

(1)快速构建新Web工程。

[<1>使用Maven Archetype(xxx-webapp)快速构建Web项目。](#<1>使用Maven Archetype(xxx-webapp)快速构建Web项目。)

<2>创建好后将pom文件中idea自生成无用的部分删除。

<3>手动添加源码目录:java。

(2)pom文件中导入核心依赖坐标。

(3)控制器类并定义可访问的操作方法。(xxxController)

(4)SpringMVC配置类。(加载控制器类bean)

(5)Tomcat(Web)容器初始化启动配置类。(加载SpringMVC配置类)

<1>AnnotationConfigWebApplicationContext。(Web环境专用)

<2>使用register(xxxConfig.class)注册SpringMVC配置类。

<3>设置所有请求归SpringMVC处理。

(6)配置好项目的本地Tomcat。

(7)启动Tomcat服务器。浏览器访问指定url。

三、SpringMVC入门程序开发总结(1+N模式)。

(1)一次性工作。(初始化工作:相对繁琐)

(2)多次工作。(控制器类)


一、SpringMVC入门案例实现思路。

(1)核心依赖坐标分析。
  • 使用SpringMVC技术需要导入Servlet坐标、SpringMVC坐标。

(2)控制器类及其所使用注解分析。
  • 创建SpringMVC控制器类。(相当于Servlet功能)
  • 又因为使用Spring技术,当然需要把控制器类变成bean。在SpringMVC中不能简单的使用注解@Component,其开发表现层的bean要使用注解@Controller。

  • 定义任意一个方法,返回值设置成想要的类型。
  • 使用注解@RequestMapping("/xxx"):设置当前控制器类操作方法访问请求路径名称。
  • 最后方法上使用注解@ResponseBody。注意:@ResponseBody是Spring框架中用于注解控制器方法的一个注解。主要用于将控制器方法的返回值直接作为 HTTP响应体返回给客户端。
  • 简单说:若方法上使用注解@ResponseBody,如果返回值是一个对象,Spring会将其序列化为 JSON 或 XML。如果返回值是字符串,Spring会直接将其作为响应体内容返回。

(3)SpringMVC配置类及所使用注解分析。
  • 终究来说,SpringMVC入门程序还是一个Spring程序。
  • 作为配置类------使用最基本注解@Configuration。
  • 其次对应bean的扫描(扫描对应控制器类bean)------注解@ComponentScan("xxx")。

(4)Tomcat启动时加载SpringMVC配置。(Web容器初始化配置类)
  • SpringMVC中提供了一个专用开发Web容器的配置类(AbstractDispatcherServletInitializer)。AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类。
  • 所以需要自己定义一个类然后去继承这个类即可。因为它是抽象类,所以需要实现抽象类的几个方法。

  • 第一个方法createServletApplicationContext():加载SpringMVC配置类。
  • 作用总结:创建Servlet容器时,加载SpringMVC对应的bean并放入
    WebApplicationcontext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个Web容器范围。

  • 第二个方法getServletMappings():向Tomcat容器说明:发起的请求哪些交给SpringMVC去处理。这里配置一个拦截所有请求("/")即可,这样Tomcat接收的所有请求都会交给自动SpringMVC去处理。
  • 作用总结:设定SpringMVC对应的请求映射路径。设置为"/"表示拦截所有请求,任意请求都将转入到SpringMVC进行处理。

  • 第三个方法createRootApplicationContext():入门案例中暂时不需要使用,该方法的作用在关于bean的加载控制时,加载Spring配置类时使用的。
  • 作用总结:如果创建Servlet容器时需要加载非SpringMVC对应的bean时,使用当前方法进行。

二、SpringMVC入门案例。(实操)

(1)快速构建新Web工程。
<1>使用Maven Archetype(xxx-webapp)快速构建Web项目。

<2>创建好后将pom文件中idea自生成无用的部分删除。

<3>手动添加源码目录:java。
  • 打开项目结构。

  • 选择模块。在main目录下新建目录。

  • 弄完下面操作后即可。

(2)pom文件中导入核心依赖坐标。
  • Servlet。
XML 复制代码
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
  • SpringMVC。
XML 复制代码
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.18</version>
</dependency>

  • 刷新Maven,查看依赖项。

(3)控制器类并定义可访问的操作方法。(xxxController)
java 复制代码
package com.hyl.controller;

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

/**
 * 控制器类
 */
//1.使用注解@Controller定义bean
@Controller
public class ExampleController {

    /**
     * 随机写一个处理请求的方法
     * @return 字符串(模仿json数据)
     */
    //设置当前方法操作的访问路径
    @RequestMapping("/save")
    //设置当前操作的返回值类型(如何响应给客户端)
    @ResponseBody
    public String save(){
        //方便测试查看运行结果。
        System.out.println("exampleController save ...");
        return "{'module':'springMVC'}";
    }

}

(4)SpringMVC配置类。(加载控制器类bean)
java 复制代码
package com.hyl.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

//创建SpringMVC的配置类,加载controller包对应bean
@Configuration
@ComponentScan("com.hyl.controller")
public class SpringMvcConfig {
}

(5)Tomcat(Web)容器初始化启动配置类。(加载SpringMVC配置类)
<1>AnnotationConfigWebApplicationContext。(Web环境专用)
  • 普通项目注解开发获取容器:AnnotationConfigApplicationContext类。
  • Web项目注解开发获取容器:AnnotationConfigWebApplicationContext类。

<2>使用register(xxxConfig.class)注册SpringMVC配置类。

<3>设置所有请求归SpringMVC处理。

  • Tomcat(Web)容器启动配置类所有代码
java 复制代码
package com.hyl.config;


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

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

    /**
     * 设置哪些请求归属SpringMVC处理
     * @return
     */

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

    /**
     *加载Spring配置类(加载Spring容器)
     *这里案例还未使用到..
     * @return
     */
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

(6)配置好项目的本地Tomcat。




(7)启动Tomcat服务器。浏览器访问指定url。
  • 访问:localhsot:8080/save。请求成功!
  • 控制台输出打印。测试成功!

三、SpringMVC入门程序开发总结(1+N模式)。

  • SpringMVC的后期开发模式不会像初始化项目这么繁琐。整体的开发模式属于"1+N"。
(1)一次性工作。(初始化工作:相对繁琐)
  • 创建工程,设置Tomcat服务器,加载工程。

  • 导入所需核心依赖坐标。

  • 创建Web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径。

  • SpringMVC核心配置类。(设置配置类,扫描controller包,加载controller控制器bean)


(2)多次工作。(控制器类)
  • 当然。实际情况不只案例中一个控制器类。实际不同的业务对应不同的控制器类。
  • 定义处理请求的控制器类。(多次工作)
  • 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回JSON数据(@ResponseBody)。(多次工作)

  • 简单演示:控制器类中添加另外一个操作方法delete()。稍加修改即可。
java 复制代码
//设置当前方法操作的访问路径
    @RequestMapping("/delete")
    //设置当前操作的返回值类型(如何响应给客户端)
    @ResponseBody
    public String delete(){
        //方便测试查看运行结果。
        System.out.println("exampleController delete ...");
        return "{'module':'springMVC delete ...'}";
    }
  • 访问:localhsot:8080/delete。请求成功!
相关推荐
码熔burning4 分钟前
(十 八)趣学设计模式 之 观察者模式!
java·观察者模式·设计模式
Eugene__Chen6 分钟前
java常见面试01
java·开发语言·面试
ZIM学编程14 分钟前
JavaWeb5、Maven
java·maven
一休哥助手20 分钟前
基于 Spring Boot 的企业级脚手架搭建指南
spring
大G哥32 分钟前
jenkins集成docker发布java项目
java·运维·开发语言·docker·jenkins
Hamm1 小时前
巧妙使用位运算来解决真实开发中的权限控制场景
java·后端·算法
Biehmltym1 小时前
【SpringBoot】数据访问技术spring Data、 JDBC、MyBatis、JSR-303校验
spring boot·spring·mybatis
caihuayuan41 小时前
SpringCloud之Eureka、Ribbon、OpenFeign
java·大数据·sql·spring·课程设计
艾斯比的日常1 小时前
深入解析Java虚拟机(JVM)的核心组成
java·开发语言·jvm
源码姑娘2 小时前
基于SpringBoot的校园二手交易平台(源码+论文+部署教程)
java·spring boot·后端·毕业设计