Spring-SpringMVC相关

SpringMVC概述

SpringMVC技术与Servlet技术功能等同,均属于web层开发技术
SpringMVC是一种基于Java实现MVC模型的轻量级Web框架

SpringMVC是一种表现层框架技术
SpringMVC用于进行表现层功能开发
 

优点:

  • 使用简单,相比于Servlet开发便捷
  • 灵活性强

SpringMVC入门案例

1、使用SpringMVC技术需要先导入Spr ingMVC坐标与Servlet坐标

        <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、开发SpringMVC控制器类(等同于Servlet功能)

//定义controller
//使用@Controller定义Bean
@Controller
public class UserController {

    //设置当前操作的访问路径
    @RequestMapping("/save")
    //设置当前操作的返回值类型
    @ResponseBody
    public String save(String name){
        System.out.println("spingmvc save name ==>"+name);
        return "{'module:'springmvc save''}";
    }
}

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

这个SpringMVC配置类其实等于之前的SpringConfig配置类。

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

//定义一个servlet容器启动的配置类,在里面加载spring的配置
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
    //加载springMVC配置类
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }
    //设置哪些请求归属springMVC处理
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    //加载spring容器的配置
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

5、加载tomcat7插件

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

6、启动测试

SpringMVC入门程序开发总结(1+N)

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

 入门案例工作流程分析

 

  1. 启动服务器初始化过程
    1. 服务器启动,执行ServletContainersInitConfig类, 初始化web容器
    2. 执行createServletApplicationContext方法,创建了WebApplicationContext对象
    3. 加载SpringMcConfig
    4. 执行@ComponentScan加载对应的bean
    5. 加载UserController,每个@RequestMapping的名称对应一个具体的方法
    6. 执行getServletMappings方法,定义所有的请求都通过SpringMVC
  2. 单次请求过程
    1. 发送请求localhost/save
    2. web容器发现所有请求都经过SpringMVC ,将请求交给SpringMVC处理
    3. 解析请求路径/save
    4. 由/ save匹配执行对应的方法save()
    5. 执行save()
    6. 检测到有@ResponseBody直接将save( )方法的返回值作为响应求体返回给请求方
       

Controller加载控制与业务bean加载控制

  • SpringMVC相关bean (表现层bean)
  • Spring控制的bean
    • 业务bean (Service)
    • 功能bean (DataSource等)
  • SpringMVC相关bean加载控制
    • SpringMVC加载的bean对应的包均在com. hyk. controller包内
  • Spring相关bean加载控制
    • 方式一: Spring加载的bean设定3描范围为com. hyk,排除掉controller包内的bean
    • 方式二: Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
    • 方式三:不区分Spring和Springmvc的环境,加载到同一个环境中

替换成更简单:继承类:AbstractAnnotationConfigDispatcherServletInitializer 

public class ServletContainerInitConfig 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[]{"/"};
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值