`

Webx的资源加载体系

 
阅读更多

 

1、资源加载的触发点

web应用中,spring容器的初始化是从ServletContextListener开始。大家知道ServletContextListener配置在web.xml中。

 

<!-- 装载/WEB-INF/webx.xml, /WEB-INF/webx-*.xml -->
<listener>
    <listener-class>
        com.alibaba.citrus.webx.context.WebxContextLoaderListener
    </listener-class>
</listener>
 

从com.alibaba.citrus.webx.context.WebxContextLoaderListener的源码中我们可以看出他是继承自spring框架的

ContextLoaderListener 的。

 

public class WebxContextLoaderListener extends ContextLoaderListener {
    @Override
    protected final ContextLoader createContextLoader() {
        return new WebxComponentsLoader() {

            @Override
            protected Class<?> getDefaultContextClass() {
                Class<?> defaultContextClass = WebxContextLoaderListener.this.getDefaultContextClass();

                if (defaultContextClass == null) {
                    defaultContextClass = super.getDefaultContextClass();
                }

                return defaultContextClass;
            }
        };
    }

    protected Class<?> getDefaultContextClass() {
        return null;
    }
}

  这段代码我们可以看出以下spring初始化中关键的几点。

1.指定spring上下文加载器ContextLoaderWebxComponentsLoader的匿名子类。

2.该匿名子类指定了默认的上下文Class同WebxComponentsLoader的一样。

 

接下来我们可以看到WebComponentssLoader的Class<?> getDefaultContextClass() 方法指定默认的WebApplicationContext是WebxComponentsContext

WebxComponentsContext的Type Hierachy如下图所示。


webx3中的com.alibaba.citrus.springext.support.context.XmlWebApplicationContext中支持扩展的resource loading机制。

通过重写protected Resource getResourceByPath(String path) 和protected ResourcePatternResolver getResourcePatternResolver() 两个方法完成了支持扩展ResourcePatternResolver机制(即:实现自定义的资源装载)。

另外该类还重写了 protected void initBeanDefinitionReader(XmlBeanDefinitionReader beanDefinitionReader),所以XmlBeanDefinitionReader可以自动的识别webx中的一些标签(其中就包括resource-loding)。

 

2.webx中的resource loading。

webx扩展了spring的resource loader。spring配置文件中添加ResourceLoading服务时,ResourceLoader 即被切换到新的机制。新的机制可兼容原有的Spring配置和代码,但支持更多的资源装载方式,以及支持重命名、重定向资源。

当ResourceLoadingService收到资源加载的请求后,将通过ResourceMapping查找合适的ResourceLoader来加载资源。各类ResourceLoader会根据资源名称将资源加载进内存并转换为webx框架自定义的Resource。随后这些自定义resource将会被适配为spring框架中的Resource。

 

简单的类图关系如下:

 


 

3.resource loading的使用范例:

只要在webx.xml中添加resource-loading的配置,webx就会自动的将加载方式重spring的resource loader切换到resource loading。

3.1)重命名资源,取消资源名称和资源环境的相关性。

 

<resource-loading
        xmlns="http://www.alibaba.com/schema/services"
        xmlns:res-loaders="http://www.alibaba.com/schema/services/resource-loading/loaders">
    ...

    <resource-alias pattern="/myapp/conf" name="/webroot/WEB-INF" />

    <resource pattern="/webroot" internal="true">
        <res-loaders:webapp-loader />
    </resource>

</resource-loading>
 

 

3.2)重定向资源

这个开发的时候用的最多,一般会将template资源指向开发目录下的template就可以了,这样每次修改后不需要重新部署就可以看到修改的效果。

 

<resource-loading
        xmlns="http://www.alibaba.com/schema/services"
        xmlns:res-loaders="http://www.alibaba.com/schema/services/resource-loading/loaders">
    ...

    <resource pattern="/templates">
        <res-loaders:file-loader basedir="${dev_root}/templates" />
    </resource>

    ...
</resource-loading>
 

 

当然貌似上边的资源重命名也可以实现这个功能。呵呵

3.3)通过通配符来匹配资源

ResourceLoading服务支持用通配符来匹配资源名称或资源别名(alias)。通配符定义如下,不过好像现在项目没有接触到用的地方。

a.“*”匹配0-n个字符,但不包括“/”。即,“*”只匹配一级目录或文件中的零个或多个字符

b.**”匹配0-n个字符,包括“/”。即,“**”匹配多级目录或文件

c.?”匹配0-1个字符,但不包括“/”。即,“?”匹配一级目录或文件中的零个或一个字符

所有的匹配,将被按顺序赋予变量“$1”、“$2”、“$3”、“$4”、……。这些变量可以在其它地方被引用。

3.4)特殊的super-loader

如果spring容器是多级的,默认的resource loading服务是现在当前容器查找资源如果不存在,那么去赴容器中查找。如此级联查找,如果都找不到,那么就放弃。

如果找到会返回第一个找到的结果。

 

如果要引用的资源知道在赴容器中那么就可以直接用这个super-loader,不过他默认的仍然是这样子查找只要不指定name就会直接去parent容器查找了。

我们也可以变更这个级联查找的顺序,比如要先在赴容器查找然后才在子容器查找,就可以这样配置了。

 

<resource pattern="/reverseLookup">
    <!-- 先找parent容器中的ResourceLoading服务 -->
    <res-loaders:super-loader />
    <!-- 再找当前容器中的ResourceLoader -->
    <res-loaders:file-loader />
</resource>
 

 

 

 

  • 大小: 45.2 KB
  • 大小: 59.4 KB
分享到:
评论

相关推荐

    webx总结 项目实践总结

    WebX是一个基于Java的开源Web应用框架,它提供了一种高效、灵活的...参考提供的文档和资源,如《Webx配置文件加载顺序与作用.docx》、《webx基础.docx》和《表单验证webx.pptx》,将有助于进一步提升WebX的使用技能。

    webx框架指南

    这部分内容为开发者提供了全面的资源管理能力,尤其在多资源加载器环境下和非Web环境下的资源使用提供了详尽的指导。 Filter、RequestContexts和Pipeline部分介绍了Webx框架中的过滤器机制。Filter在Webx框架中承担...

    webx3 PDF(阿里巴巴 前端web框架)

    - **在非Web环境中使用ResourceLoading服务**:即使在没有Web服务器支持的情况下,也可以使用ResourceLoading服务来加载资源。 **5.4 ResourceLoader参考** - **FileResourceLoader**:用于加载本地文件系统的资源...

    webx_guide

    Webx框架的基础设施服务部分是不可或缺的,它支持了资源的加载和管理。这部分内容详细介绍了资源的概念,如何表示和访问资源,以及资源的遍历。Webx使用Spring的ResourceLoader机制来装载资源,但也有其自己的...

    webx3文档——web开发

    通过定义新资源、重命名资源、重定向资源等高级特性,Webx提供了灵活的资源处理方式。 此外,Webx还提供了Filter、RequestContexts和Pipeline机制,这些机制帮助Webx更加高效地处理HTTP请求。Filter机制用于拦截和...

    webx

    WebX 是一个开源的、基于Java的企业级Web应用框架,主要设计用于构建企业信息系统和B/S架构的应用。这个框架提供了一整套开发工具和技术支持,包括数据库操作、表单处理、权限控制、模板引擎等功能,旨在提高开发...

    Webx及框架简介

    此外,阅读官方文档和社区资源也是快速掌握Webx的关键。最后,对于初学者,可以参考提供的PPT材料,如"Webx及框架简介(1).ppt"和"Webx及框架简介(2).ppt",它们通常包含框架的基本介绍、使用示例和最佳实践,能够...

    淘宝WEBX框架详解

    **淘宝WEBX框架详解** 淘宝WEBX框架是一个专为大型电子商务平台设计的高效、可扩展的Web应用程序开发框架。这个框架由阿里巴巴技术部门研发,旨在提高开发效率,保证系统的稳定性和可维护性,同时降低新手入门的...

    Webx介绍_PDF

    - **初始化**:Webx3.0的初始化主要由`WebxContextLoaderListener`完成,它负责加载配置文件,并初始化日志系统。 - **执行流程**:请求处理过程通过Pipeline来管理,包括URI解析、请求上下文处理等多个环节,确保了...

    WEBX3.0框架指南(PDF版)

    - **装载parent容器中的资源**:能够跨容器加载资源,增加了系统的扩展性。 - **修改资源文件的内容**:在不改变原始文件的前提下对内容进行修改。 - **直接使用ResourceLoadingService**:介绍了如何直接调用服务来...

    webx总结

    “源码”标签表明内容可能包括了对Webx框架源代码的分析,这对于开发者来说是极其宝贵的资源,因为它可以帮助理解框架内部的工作机制,从而更好地定制和优化自己的项目。“工具”标签则暗示了可能有Webx相关的辅助...

    WebX入门指南示例程序

    WebX项目的典型结构包括src/main/java(存放Java代码)、src/main/resources(存放资源配置文件)、WEB-INF(存放web.xml等Web应用配置文件)等。了解这些目录的作用对于后续开发至关重要。 4. **控制器...

    webx2.7绿色安装

    WEBX是阿里巴巴的内部框架,“就是把页面与Service层之间的一些Servlet等公共的东西抽象出来,提供相应的服务以提高开发效率(《接口测试之Webx简介》—何晓峰 )”,可以看出,webx和传统的servlet-action模式的...

    Webx3.0小结

    webx3.0学习小结

    创建简单的WEBX应用

    llerServlet 是 Webx 框架的核心组件,它负责处理所有以 .htm 和 .do 结尾的请求。...对于初学者来说,理解 Webx 的核心概念,如 ControllerServlet 和服务配置,是进一步学习和使用 Webx 的关键。

    webx-springExt整合eclipse插件

    Features是对插件功能的抽象,定义了一组插件的集合,而plugins目录下的JAR文件则是实际的插件实现,提供了插件的代码和资源。 总的来说,"webx-springExt整合eclipse插件"为Webx-SpringExt开发者提供了集成的开发...

    阿里巴巴J2EE Webx框架简介

    阿里巴巴的J2EE Webx框架是一个企业级的Java应用程序框架,专为构建高效、可扩展且易于维护的Web应用程序而设计。Webx框架的核心理念是模块化,这使得开发过程更加灵活,允许开发者将应用程序的不同部分(如业务逻辑...

    webx3学习的demo,以及留言板的小例子

    WebX3是一个强大的开源Web应用程序框架,主要用于构建企业级的Web应用系统。...这个压缩包中的资源为学习WebX3提供了一个很好的起点,通过实践这些示例,你可以逐步掌握WebX3的核心技术和开发流程。

    Webx3_Guide_Book.pdf

    除了资源加载服务,Webx还介绍了Filter的用途和工作原理,以及RequestContexts和Pipeline在Webx中的应用。Filter是Web应用中用于请求处理的组件,它具有限制,而Webx对其进行了优化和扩展,提供了更多的定制能力。 ...

Global site tag (gtag.js) - Google Analytics