SpringMVC---简介

SpringMVC通过实现Model、View、Controller模式,很好的将数据、业务及展现进行分离,从这样一个角度来说,SpringMVC与Struts非常类似。SpringMVC的设计是围绕dispatherservlet类展开的,dispatherservlet负责将请求派发到特定的handler,通过可配置的handleMapping来处理请求,并且转到对应的视图。Spring3版本中定义一个控制器类必须用@ controller注解进行标注,当控制器类接收到一个请求时,它会在自己内部寻找一个合适的处理方法来处理请求,使用@ RequestMapping注解将方法映射到一些请求上,以便让该方法处理那些请求,这种方法就想一般的类中的方法,方法名、参数列表和返回值并不像struts2之类的框架有很强的限制。

优点

  • 耦合性低:视图层和业务层分离,这样就运行视图层代码,而不用重新编译模型和控制器代码,同样一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可
  • 重用性高
  • 生命周期成本低
  • 部署快
  • 可维护性高
  • 有利于软件工程化管理

缺点

  • 没有明确的定义
  • 不适合小型、中等规模的应用程序
  • 增加系统结构和实现的复杂性
  • 视图与控制器间的过于紧密的连接
  • 视图对模型数据库的低效率访问
  • 一般高级的界面工具或构造器不支持模式

SpringMVC体系结构

  • DispatcherServlet类的运行体系
  1. DispatcherServlet的核心本质:是一个Servlet
  2. init方法在整个系统启动时运行,且只运行一次,因此一般在这个方法中进行初始化操作,这些初始化操作可能包括对容器ApplicationContext的初始化、组件和外部资源的初始化等。
  3. service方法在系统运行的过程中处于侦听模式,侦听并处理所有的web请求
  • DispatcherServlet类的继承体系
  1. 依次继承FrameworkServlet和HttpServletBean
  2. HttpServletBean是Spring对于servlet最低层次的抽象
  3. FrameworkServlet则是在HttpServletBean的基础之上的进一步抽象。通过FrameworkServlet真正的初始化了一个Spring的容器(WebApplicationContext),并引入到servlet对象之中DispatcherServlet通过initStrategies方法查找并装配Spring容器中用户定义的组件bean

使用SpringMVC,必须在web.xml中配置好DispatcherServlet

  • <listener>

    <listener-class>基本配置包含Log4jConfigListener和ContextLoaderListener,且log4j监听器在前,目前已废除log4j监听器,原因还在努力追问

  • <context-param>指定上下文配置文件路径,基本配置包含log4j和Spring配置文件

    <param-name>指定上下文名称,一般为:名称+ConfigLocation后缀,如:contextConfigLocation,不可随意定义,否则指定的配置文件无法加载成功

    实际上它是org.springframework.web.servlet.FrameworkServlet中的一个成员变量,而FrameworkServlet是DispatcherServlet的父类,log4jConfigLocation目前不得而知

    <param-value>指定上下文路径,如:classpath:applicationContext.xml

  • <servlet>

    <servlet-name>Servlet名称,可以自定义,但是需要遵守规则:比如指定为Spring,那么最好在classpath路径中配置Spring-servlet.xml,否则需要在子元素<init-param>特别指出

    <servlet-class>因为要配置MVC,所以指定为:org.springframework.web.servlet.DispatcherServlet

    <init-param>[定义容器启动时初始化的配置文件,作用主要是指定自定义配置文件的路径,貌似可以指定多个]

      <param-name>[contextConfigLocation,不可更改,原因见3.1]

      <param-value>[可以自定义,如:classpath:spring-servlet.xml,如果不定义,那么默认为:classpath:${servlet-name}-servlet.xml,见4.1]

      <load-on-startup>[定义为1,表示启动等级,参考文章]

  • <servlet-mapping>

    <servlet-name>与4.1保持一致

    <url-pattern>一般定义为“/”,表示所有请求都通过DispatcherServlet来处理

原文地址:https://www.cnblogs.com/xiaobaizhiqian/p/8085836.html