web项目加载顺序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunyanxiong123/article/details/84205035

@WEB

web项目执行顺序

现在主流的web开发框架一般都是基于Spring开发的,Spring生态圈量级非常之大,功能非常强大。今天讲述一下普通的web项目加载顺序。 虽然项目大部分都在使用SpringBoot、SpringCloud等微服务的架构来搭建项目,基本不会在进行这些配置了,但是如果项目追究Spring源码,这些基础知识还是需要了解的。

  1. web.xml
    web项目运行时首先会加载web.xml配置文件,一般该配置文件在 /WebRoot(web)/WEB-INF/web.xml ,web.xml中的内容加载不依赖于内容书写顺序,而是以 context-param 、 listener、 filter、servlet的顺序进行加载。web.xml中有以下几项内容:
    (1)context-param
    以下为配置spring配置文件目录的配置。该配置是针对整个web项目上下文的。

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
      </context-param>
    

    (2)listener
    该配置用于向web容器中注册一个事件监听器,监听事件发生事件,如何响应等信息。事件监听程序在建立、修改和删除会话或servlet环境时得到通知。常与context-param联合使用。

    <listener>
       // 该类继承ServletContextListener 包含初始化方法contextInitialized(ServletContextEvent event) 和销毁方法contextDestoryed(ServletContextEvent event)
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    

    (3)filter
    filter 在web项目中起到过滤请求的作用,可配置在web.xml中,也可在项目中使用代码 继承Filter类来进行处理一些逻辑。Filter类中有 init(), doFilter(),destory() 方法。可获取到请求ServletRequest 和ServletResponse,然后决定继续处理哪些请求,阻挡哪些请求等。一般用作 防CRSF攻击、防SQL注入、权限过滤等
    web.xml中filter 需要和 filter-mapping 一起使用,如下为字符过滤器。

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    
    public interface Filter {
      default void init(FilterConfig filterConfig) throws ServletException {}
      void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;
      default void destroy() {}
    }
    

    (4)servlet
    SpringMVC 中围绕 DispatcherServlet 来设计请求映射、视图处理、视图解析。DispatcherServlet 用于处理请求分发。具体内容见后续SpringMVC执行顺序。

    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:SpringMVC.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      
      <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
    

    (5)欢迎页
    web项目默认启动加载的页面。

    <welcome-file-list>
        <welcome-file>.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
    

SpringMVC执行顺序

  1. 时序图

在这里插入图片描述

2.组件

DispatcherServlet

前端控制器DispatcherServlet是SpringMVC整个流程控制中心,由它来调度其它组件相互配合,完成匹配请求URL,解析数据,响应数据,视图解析以及视图渲染等任务。

HandlerMapping

处理器映射器HandlerMapping负责根据用户请求URL找到匹配的Handler处理器。

HandlerAdapter

处理器适配器HandlerAdapter对处理器进行执行

ModelAndView

ModelAndView是Spring封装的model和view组合对象。可用于处理数据和视图。

ViewResolver

视图解析器ViewResolver负责处理结果生成视图,先根据逻辑视图名称找到物理视图地址,再生成视图对象,最后对视图进行渲染,将处理结果通过页面展现给用户。

Controller

业务逻辑处理器,接受请求参数,进行业务处理,返回响应的数据和视图。
3.applicationContext.xml和dispatcher-servlet.xml
applicationContext.xml 是Spring的全局配置文件,用来控制Spring特性,管理Bean的容器。
dispatcher-servlet.xml是SpringMVC中用作控制器,拦截器、转发view等作用。

注意

在两个配置文件中最好不要声明相同的bean。 applicationContext.xml是随ContextLoaderListener而加载的,ContextLoaderListener 配置于 中的。dispatcher-servlet.xml是随DispatcherServlet而加载的,而DispatcherServlet配置于 中,在web.xml中加载顺序为 context-param 、listener 、 filter 、servlet 。所以先加载applicationContext.xml 再加载dispatcher-servlet.xml

猜你喜欢

转载自blog.csdn.net/sunyanxiong123/article/details/84205035