spring mvc启动流程

本文主要介绍Spring mvc的启动流程:
包括servlet注册、loc容器创建、bean的初始化,以及MVC流程

spring mvc与servlet

springmvc的本质就是一个servlet,并对其进行了扩展。
其扩展内容主要为这三个类:HttpServletBean,FrameworkServlet,DispatcherServlet

  1. HttpServletBean
    将web.xml中配置的参数设置到Servlet中

  2. FrameworkServlet
    将Servlet与Spring容器上下文关联

  3. DispatcherServlet
    初始化各个功能的实现类。

一、注册servlet

web.xml :



    
        contextConfigLocation
        /WEB-INF/applicationContext.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    
    
        dispatcher
        org.springframework.web.servlet.DispatcherServlet
        1
    
    
        dispatcher
        /
    



配置contextConfigLocation

    
        contextConfigLocation
        /WEB-INF/applicationContext.xml
    

配置ContextLoaderListener

    
        org.springframework.web.context.ContextLoaderListener
    

配置DispatcherServlet

    
        dispatcher
        org.springframework.web.servlet.DispatcherServlet
        1
    
        
        dispatcher
        /
    

二、IOC容器创建

IOC 就是由 Spring IOC 容器来负责对象的生命周期和对象之间的关系

  1. 谁控制谁:
    在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说你依赖的对象直接由你自己控制,但是有了 IOC 容器后,则直接由 IoC 容器来控制。所以“谁控制谁”,当然是 IoC 容器控制对象。
  2. 控制什么:
    控制对象。
  3. 为何是反转:
    没有 IoC 的时候我们都是在自己对象中主动去创建被依赖的对象,这是正转。但是有了 IoC 后,所依赖的对象直接由 IoC 容器创建后注入到被注入的对象中,依赖的对象由原来的主动获取变成被动接受,所以是反转。
  4. 哪些方面反转了:
    所依赖对象的获取被反转了。
    Ioc容器的创建需要通过ApplicationContext接口的相关实现类进行
    有三种创建IOC容器的方式。

ClassPathXmlApplicationContext:从项目的根目录下加载配置文件

FileSystemXmlApplicationContext:从磁盘中的加载配置文件

AnnotationConfigApplicationContext:当使用注解配置容器对象时使用此类进行注解读取,创建容器。

代码中IOC容器创建
在Java代码中,通过以下方式进行配置文件读取

//基于注解的springIOC容器
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AopBeanConfig.class);
//基于配置文件的springIOC容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/spring-beans.xml");

web中IOC容器创建

   
    org.springframework.web.context.ContextLoaderListener  
  

三、bean初始化

Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象。Spring 容器会自动完成@bean对象的实例化。创建应用对象之间的协作关系的行为称为:装配(wiring),这就是依赖注入的本质。

bean初始化方法:
applicationContext.xml文件配置:

    

bean类注册

package com.daoImpl;

import com.dao.AssignDao;
import com.util.JDBCUtil;
import org.springframework.stereotype.Component;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

@Component
public class AssignDaoImpl implements AssignDao {

    private Connection connection = JDBCUtil.getConnection();

    @Override
    public void assign(int tid, int hid) {

        String sql = "INSERT INTO assign (tid, hid) VALUES (?, ?)";

        try {
            PreparedStatement pst = connection.prepareStatement(sql);

            pst.setInt(1, tid);
            pst.setInt(2, hid);

            pst.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

示例:

    @Autowired
    AssignDao assignDao;

    @RequestMapping("/assign")
    public String assign(int hid, String students){
       String[] studentIDs = students.split(";");

        submitDao = new SubmitDaoImpl();
        for(String studentId:studentIDs){
            int sid = Integer.parseInt(studentId);
            submitDao.addSubmit(sid, hid);
        }

        return "successful";
    }

四、MVC的流程

MVC(model view controller),一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

  1. 用户发送请求至前端控制器DispatcherServlet。
  2. DispatcherServlet收到请求调用HandlerMapping处理器映射器。
  3. 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
  4. DispatcherServlet调用HandlerAdapter处理器适配器。
  5. HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
  6. Controller执行完成返回ModelAndView。
  7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
  8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
  9. ViewReslover解析后返回具体View.
  10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
  11. DispatcherServlet响应用户。

你可能感兴趣的:(JavaEE)