web项目加载顺序

@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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在IDEA中导入Maven项目时遇到"Unable to import maven project"的报错,可能有几种原因导致该问题。首先,确保你已正确下载并解压了Maven,并且在IDEA中进行了相应的配置,包括设置Maven的安装路径和本地仓库路径。如果已经完成了这些步骤,但仍然无法加载Maven项目,可以尝试以下解决方法。 1. 检查pom.xml文件:确保你的pom.xml文件没有任何错误或者缺失。可以使用Maven的命令行工具来验证该文件是否有效,如果有错误,修复它们并重新导入项目。 2. 清理缓存:有时候,Maven的缓存可能会导致问题。你可以尝试清理Maven的本地仓库缓存,然后重新导入项目。 3. 检查网络连接:确保你的网络连接正常。如果你的项目需要从远程仓库下载依赖包,网络连接问题可能会导致无法加载项目。 4. 检查IDEA中的Maven配置:再次检查IDEA中的Maven配置,确保你已正确设置了Maven的安装路径和本地仓库路径。如果配置不正确,可以重新设置并重新导入项目。 如果上述方法仍然无法解决问题,请尝试在IDEA中打开logs文件,看看是否有明显的报错信息。根据报错信息进行进一步的排查和解决。 总之,无法加载Maven项目可能是由于配置问题、pom.xml文件错误、网络连接问题或者缓存问题导致的。通过检查和修复这些可能的原因,你应该能够成功加载Maven项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值