zoukankan      html  css  js  c++  java
  • SpringMVC简介

    SpringMVC简介

    1、特点(为什么要学)

    ​ 它是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架,对于初学者或者想了解mvc的人来说我觉得 spring是最好的,它的实现就是教科书!第二它和tapestry一样是一个纯正的servlet系统,这也是它和tapestry相比 struts所具有的优势。而且框架本身有代码,看起来容易理解。

    • 轻量级、简洁灵活,简单易学
    • 高效,基于请求响应的MVC框架
    • 与Spring兼容性好
    • 功能强大,如RESTful、数据验证、格式化、本地化等
    • 约定高于配置

    2、DispatcherServlet(中心控制器)

    ​ Spring的Web框架围绕DispatcherServlet设计。DispatcherServlet的作用是将请求分发到不同的处理器。DispatcherServlet是整个SpringMVC的控制中心

    image-20200723204010689

    3、原理图

    下图中绿色的部分表示需要自己实现的部分,其他属于框架自动实现的。数字表示接收请求时调用的顺序

    image-20200723210041182

    4、核心文件(初期学习)

    web.xml

    项目内路径:webWEB-INFweb.xml

    <!--    注册DispatcherServlet-->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--        关联一个springmvc的配置文件-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc-servlet.xml</param-value>
            </init-param>
    <!--        启动级别-->
            <load-on-startup>1</load-on-startup>
        </servlet>    
    <!--    / 匹配所有请求(不包括.jsp)-->
    <!--    /* 匹配所有请求(包括.jsp)-->
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    

    springmvc-servlet.xml

    项目内路径:srcmain esourcesspringmvc-servlet.xml

    <!--    配置HandlerMapping和HandlerAdapter-->
    	<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
    <!--    视图解析器:DispatcherServlet提供的ModelAndView-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
    <!--        前缀-->
            <property name="prefix" value="/WEB-INF/jsp/"/>
    <!--        后缀-->
            <property name="suffix" value=".jsp"/>
        </bean>
    
    <!--    Handler-->
        <bean id="/template" class="com.wjr.controller.TemplateController"/>
    

    Controller

    项目内路径:srcmainjavacomwjrcontrollerTemplateController.class

    public class TemplateController implements Controller {
        public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
            //ModelAndView 模型和视图
            ModelAndView mv = new ModelAndView();
            //封装对象,放在ModelAndView中,Model
            mv.addObject("msg","Hello,SpringMVC!I am the template");
            //封装要跳转的视图,放在ModelAndView中
            mv.setViewName("template");//WEB-INF/jsp/template.jsp
            return mv;
        }
    }
    
    

    5、运行流程

    1. 用户发出请求,DispatcherServlet接收请求并拦截;

      • DispatcherServletweb.xml配置文件中进行注册

        <!--    注册DispatcherServlet-->
            <servlet>
                <servlet-name>springmvc</servlet-name>
                <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--        关联一个springmvc的配置文件-->
                <init-param>
                    <param-name>contextConfigLocation</param-name>
                    <param-value>classpath:springmvc-servlet.xml</param-value>
                </init-param>
        <!--        启动级别-->
                <load-on-startup>1</load-on-startup>
            </servlet>    
        <!--    / 匹配所有请求(不包括.jsp)-->
        <!--    /* 匹配所有请求(包括.jsp)-->
            <servlet-mapping>
                <servlet-name>springmvc</servlet-name>
                <url-pattern>/</url-pattern>
            </servlet-mapping>
        
      • 假设用户请求的url为: http://localhost:8080/SpringMVC/template

      • 该url会被拆分成三块(请求位于服务器localhost:8080上的SpringMVC站点的template控制器)

        • http://localhost:8080(服务器域名)
        • SpringMVC(部署在服务器上的web站点)
        • template(控制器)
    2. DispatcherServlet会自动调用HandlerMapping进行处理器映射,根据请求url中的template查找对应的Handler;

      • HandlerMappingspringmvc-servl;et.xml配置文件中进行注册

        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
        
    3. HandlerExecution表示具体的Handler,其主要的作用为根据url查找控制器,如TemplateController;

      • TemplateControllerspringmvc-servlet.xml配置文件中进行注册

        <bean id="/template" class="com.wjr.controller.TemplateController"/>
        
    4. HandlerExecution将查找到的控制器等信息传递给DispatcherServlet;

    5. DispatcherServlet再自动调用HandlerAdapterHandlerAdapter表示处理器适配器,按照特定的规则执行Handler;

      • HandlerAdapterspringmvc-servlet.xml配置文件中进行注册

        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
        
    6. Handler再让具体的Controller执行;

    7. Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView

      • Controller接口的方法,返回值为ModelAndView

        public interface Controller {
            @Nullable
            ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception;
        }
        
    8. HandlerAdapter将视图逻辑名或模型(ModelAndView)传给DispatcherServlet

    9. DispatcherServlet调用ViewResolver(视图解析器)来解析视图逻辑名;

      • ViewResolverspringmvc-servlet.cml配置文件中注册

        <!--    视图解析器:DispatcherServlet提供的ModelAndView-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--        前缀-->
                <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--        后缀-->
                <property name="suffix" value=".jsp"/>
            </bean>
        
    10. ViewResolver将解析的视图逻辑名返回给DispatcherServlet

    11. DispatcherServlet根据视图逻辑名调用具体的View(视图)

    12. 最终结果呈现给用户

  • 相关阅读:
    工厂模式
    将WebApi Host到控制台和IIS
    模板方法模式
    策略模式
    插件式WebApi服务及自动生成Api帮助文档
    单例模式
    外观模式
    论文序号的结构层次顺序
    计算机面试之Session、Cookie、Token
    Django的日常操作
  • 原文地址:https://www.cnblogs.com/lazyr/p/13370633.html
Copyright © 2011-2022 走看看