JavaEE学习笔记 04——Spring webmvc启动流程:serlvet注册、IoC容器创建、bean初始化、MVC的流程

一、自己的项目改造

1.项目目录结构

在这里插入图片描述

2.serlvet注册

最主要的是在web.XML中注册DispatcherServletDispatcherServlet是springMvc中唯一的Servlet

  • 配置DispatcherServlet

1.web.xml的配置

<web-app>
  <display-name>Archetype Created Web Application</display-name>


  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:app-context.xml</param-value>
  </context-param>


  <!--  springmvc 主要用servlet
        DispatcherServlet 是 spring 内置的servlet
        路由实现mvc-->
  <servlet>
    <servlet-name>api</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:app-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>api</servlet-name>
        <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>
  • app-servlet.xml的配置
  <context:component-scan base-package="org.example.javaee.springmvc.controller"></context:component-scan>

3.IoC容器创建

  • 将servlet注册为controller,我分为studentController和teacherController。
  • 由原来的HttpServletRequest、HttpServletResponse 修改为@RequestBody 直接接收对象。

Spring IOC容器是框架的核心,IOC是控制反转的意思,可以用来降低程序代码之间的耦合度。
把强耦合的代码依赖从代码中移出去,放到统一的XML配置文件中,将程序对组件的主要控制权交给IOC,由IOC统一加载和管理。

重要的就是用来完成对对象的创建以及依赖注入的管理等。
以前我们需要对象就直接new,然后为对象和构造方法及方法等赋值,需要对象的创建对象,需要方法则调用方法,然后再去设置参数。
而spring为我们把这些事都省略了,简化了我们的操作,那么就都由spring来为我们管理,直接帮我们注入,所以这个就是所谓的依赖注入。

//由原来的
@WebServlet("/AddStudentHomeworkServlet");
//变为
@RequestMapping("/TeacherJSP/")
@Controller

根据xml文件创建IoC容器

        //1
        ApplicationContext context = new ClassPathXmlApplicationContext("app-context.xml");
        //2
        ApplicationContext context = new FileSystemXmlApplicationContext("JavaEE-SpringMVC/src/resources/app-context.xml");

根据注解创建ioc容器

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Beans.class);
StudentHomeworkJdbc studentHomeworkJdbc=(StudentHomeworkJdbc) context.getBean("studentHomeworkJdbc");

4. bean初始化

将StudentHomeworkJdbc 注册为Bean,为了直观就单独写了一个类出来。



@Configuration
public class Beans {

    @Bean
    public StudentHomeworkJdbc studentHomeworkJdbc(){
        return new StudentHomeworkJdbc();
    }

}

也可以在app-context.xml中配置


    <!-- 配置注解方式扫描的包:在指定的包下进行扫描,如果发现类上面有注解,让其装配到容器中 -->
    <context:component-scan base-package="org.example.javaee.springmvc.bean"/>

二、SpringMVC的流程

在这里插入图片描述
1、用户发送请求至前端控制器DispatcherServlet

  • 请求会首先发送到DispatchServlet,这是spring的前置Servlet,它会接收请求并转发给spring的MVC controller,也就是业务controllerDispatchServlet负责请求分发,起到控制器的作用。
  • 名如其义,它的本质上是一个Servlet。下层的子类不断的对HttpServlet父类进行方法扩展。
  • DispatcherServlet是SpringMVC前端控制器,作为整个SpringMVC的控制中心,,其相关UML如下所示:
    在这里插入图片描述

2、 DispatchServlet通过HandlerMapping(处理器映射)确定将请求转发给哪个controller,HandlerMapping主要通过请求中的URL确定映射关系的。

  • HandlerMapping主要用来解析请求url,解析出控制器,从而映射控制器。在这里插入图片描述

3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器一并返回给DispatcherServlet
4、 DispatcherServlet调用HandlerAdapter处理器适配器。

  • HandlerAdapter主要是调度Controller来处理业务逻辑等,想相关类有6个。
  • 在这里插入图片描述
    5、HandlerAdapter经过适配调用具体的处理器(Controller)。
    6、Controller执行完成返回ModelAndView
    7、HandlerAdaptercontroller执行结果ModelAndView返回给DispatcherServlet
    8、DispatcherServletModelAndView传给ViewReslover视图解析器。
    9、ViewReslover解析后返回具体View.
  • ViewResolver接口主要作用是解析DispatcherServlet传递的逻辑视图名,并将解析结果传回给DispatcherServlet
    10、DispatcherServlet根据View进行渲染视图
    11、DispatcherServlet响应用户。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值