SpringMVC入门以及工作流程详解

什么是MVC
MVC是一种分层方法,其三层分别是模型(Model),视图(View)和控制器(Controller)。是一种软件设计规范。MVC可以将软件的逻辑、数据和业务相分离,其主要作用是消除视图和业务逻辑之间的双向耦合

模型Model:指数据模型,提供了需要展示的数据,可以认为是JavaBean。模型会提供模型数据查询和模型数据状态更新等功能。
控制器Controller:接收用户请求,委托给模型进行处理,处理完毕后将处理完成的数据传输给视图
视图View:负责进行模型的展示,也就是用户可以看到的东西

MVC框架需要做什么

  1. 将url映射到java类或java类的方法
  2. 封装用户提交的数据
  3. 处理请求–调用相关的业务处理–封装响应数据
  4. 将响应的数据进行渲染 jsp / html 等表示层数据

什么是SpringMVC
SpringMVC是Spring框架的一部分,是基于Java实现的轻量级Web框架。
SpringMVC的核心是DispatchServlet(调度Servlet),在一个web应用中,会有多个dao和多个数据库表进行映射,而一个dao又和一个service以及一个servlet联系在一起。如下图
SpringMVC入门以及工作流程详解_第1张图片
用户不需要逐个管理servlet,而是通过dispatch统一管理,dispatch的职责包括:调度servlet,处理请求,适配URL和跳转页面。dispatchServlet使用的是适配器模式(一种设计模式)

基本流程如下:
SpringMVC入门以及工作流程详解_第2张图片
我们具体来分析下SpringMvc的执行流程:
SpringMVC入门以及工作流程详解_第3张图片
图中实线为SpringMVC帮我们解决的流程,虚线是我们需要自行编码实现的。

  1. 用户将请求(Request)发送到DispatchServlet,DispatchServlet会对请求进行拦截并且处理
  2. HandlerMapping根据用户请求的url寻找对应的Handler(Handler一般会在springmvc-servlet.xml中注册)
  3. HandlerExecution会根据HandlerMapping找到的Handler寻找对应的处理器(Controller)
  4. HandlerExecution将对应的Controller返回给DispatchServlet
  5. HandlerAdapter是处理器适配器,会按照特定的规则执行Handler
  6. 调用具体的Controller
  7. Controller完成对对应请求的处理后,将处理完毕的数据封装在一个ModelAndView中,返回给Handler Adapter
  8. HandlerAdapter又将ModelAndView传给DispatchServlet
  9. DispatchServlet会调用视图解析器,将ModelAndView转化为视图,并且根据配置文件拼接视图名字,找到对应的视图。然后将视图渲染到视图上
  10. DispatchServlet将对应视图返回

那么我们具体到代码中看是如何使用DispatchServlet进行统一管理的。在以往,所有前端页面都需要配置在web.xml中,但是在SpringMVC中,web.xml只需要完成DispatchServlet的配置

DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Applicationdisplay-name>
  
  <servlet>
    <servlet-name>springmvcservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    <init-param>
      <param-name>contextConfigLocationparam-name>
      <param-value>classpath:springmvc-servlet.xmlparam-value>
    init-param>
  servlet>
  <servlet-mapping>
    <servlet-name>springmvcservlet-name>
    <url-pattern>\url-pattern>
  servlet-mapping>
web-app>

接着在resource文件夹下新建一个springmvc-servlet.xml用于规定DispatchServlet的配置。web.xml会读取该配置文件来完成对DispatchServlet的配置,springmvc-servlet.xml配置如下:


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
        
        <property name="prefix" value="/WEB-INF/jsp/"/>
        
        <property name="suffix" value=".jsp"/>
    bean>

    
    <bean id="/hello" class="com.hch.controller.HelloController"/>

beans>

该配置中配置了DispatchServlet,其中规定了视图解析器的前后缀。

你可能感兴趣的:(Spring,spring,java)