SSM 框架 Web 项目在 TOMCAT 上运行

Spring + SpringMVC +Mybatis 项目在 Tomcat 服务器上运行。

  1. 总的来说,web.xml 的加载顺序是:<context-param>--> <listener> --> <filter> --> <servlet>。
  • 项目加载到 tomcat 上,点击运行,因为是 web 项目,所以会最先找到项目中的 web.xml 文件,然后根据项目的配置文件进行更为详细的配置。
  1. 容器首先会去读取web.xml配置文件中的两个节点:<listener> </listener><context-param> </context-param>
  2. 紧接着读取 <filter>,根据指定的类路径来实例化过滤器。
  3. 最后是前端控制器,以 Servlet 的形式配置在 xml 文件中。

系统中有 Servlet,则 Servlet 是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。所以在需要加上 <load-on-startup>1</load-on-startup>,保证前端控制器在 web 容器启动的时候就启动。

ssm 项目更新maven依赖_ssm 项目更新maven依赖


如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载。

  • Spring 的上下文
  1. web.xml 中首先加载的是 spring 的配置文件,然后 spring 配置文件加载sqlsessionFactory 的位置时,加载 dataSource 以及 Mybatis 的配置文件。当然,这个时候 springMVC 的文件也在加载了。
  2. 总的来说,spring 的配置文件 在 springMVC的文件加载前。
  1. 对于一个 web 应用,其部署在 web 容器中,web 容器提供其一个全局的上下文环境(ServletContext),其为后面的spring IoC容器提供宿主环境。
  2. 在 web.xml 中会有设置 contextLoaderListener。在web容器启动时,会触发容器初始化事件,此时contextLoaderListener会监听到这个事件,其contextInitialized方法会被调用,在这个方法中,spring 会初始化一个启动上下文(跟上下文,即WebApplicationContext),这是一个接口类,确切的说,其实际的实现类是XmlWebApplicationContext。这个就是spring的 IoC 容器,其对应的 Bean 定义的配置由 web.xml中 的 context-param 标签指定。在这个IoC容器初始化完毕后,springWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE为属性Key,将其存储到ServletContext中,便于获取。
  3. **DispatcherServlet 所在的 springMVC 上下文。**这个 servlet 是一个标准的前端控制器,用以转发、匹配、处理每个servlet请求。DispatcherServlet上下文在初始化的时候会建立自己的 IoC 上下文,用以持有spring mvc相关的bean。
  • 在创建 DispatcherServlet 自己的 IoC 上下文时,会利用WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE从 ServletContext中获取之前的根上下文(即WebApplicationContext)作为自己上下文的 parent 上下文(父上下文)。接着再初始化自己持有的上下文。
  • DispatcherServlet 初始化自己上下文的工作在其 initStrategies方法中,进行初始化处理器映射、视图解析等。这个 servlet 自己持有的上下文默认实现类也是XmlWebApplicationContext。初始化完毕后,spring 以与 servlet 的名字相关的属性为属性Key,也将其存到ServletContext中,以便后续使用。这样每个 servlet 就持有自己的上下文,即拥有自己独立的bean空间,同时各个servlet共享相同的bean,即根上下文定义的那些 bean。

注意 。

  • 同一个 Bean 被配置到了两个上下文中,会在两个上下文中生成两个独立的bean。
  • 可以只配置MVC Context 而不使用 WebApplicationContext 。