`
mozhenghua
  • 浏览: 324546 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Apache tiles中用URL加载资源

 
阅读更多

URL是URI的特殊类型,统一资源定位符作用就是要将具体的资源和加载资源的方式解耦。

http://stackoverflow.com/questions/861500/url-to-load-resources-from-the-classpath-in-java

 

比如,需要得到资源的流,只需要在连接参数中设置protocol这个参数就能够加载到任意位置的比特流。除了比特流职位其他还还有 最后资源最后修改时间,创建时间等都能通过URL来取到。

 

但是,在使用URL来加载资源也是有前提的,必须要先了解URL和他所依赖的一些类的体系结构,不然在使用过程中不是任何资源都能加载的。比如执行下面这段代码:

public static void main(String[] args) throws Exception {
		new URL("classpath:tiles-conf/tiles-defs.xml").openConnection();
	}

 

在console上会输出下面的错误信息:

 

Exception in thread "main" java.net.MalformedURLException: unknown protocol: classpath
 at java.net.URL.<init>(Unknown Source)
 at java.net.URL.<init>(Unknown Source)
 at java.net.URL.<init>(Unknown Source)
 at com.koubei.profile.util.Test.main(Test.java:19)

我试验了一下无论是将这段代码用java程序启动还是放在tomcat中跑都是会抛出相同的异常 

 

但是在使用tiles框架过程中,使用在加载tiles的配置文件使用的是如下配置,在web.xml中:

<context-param>
		<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
		<param-value>classpath:tiles-conf/tiles-defs.xml</param-value>
</context-param>

 

 

会抛出这样的错误信息,说明classpath的protocol是识别的,问题的关键是找不到资源

 

 

2011-08-04 09:21:45,136 org.apache.tiles.impl.BasicTilesContainer.initializeDefinitionsFactory(BasicTilesContainer.java:398) - WARN - Unable
 to find configured definition 'classpath:tiles-conf/tiles-defs.xml'

 

问题的关键是从利用ServletContext加载资源是只能从web当前“/”根目录开始加载,如果要从classpath中加载的话就找不到了。解决的办法是添加两个类: 

import org.apache.struts2.tiles.StrutsTilesContainerFactory;
import org.apache.tiles.TilesContainer;
import org.apache.tiles.TilesException;
import org.apache.tiles.impl.BasicTilesContainer;

/**
 * @author 百岁 (莫正华 baisui@taobao.com)
 * 
 *         2011-8-4 上午11:09:55
 */
public class KoubeiStrutsTilesContainerFactory extends
		StrutsTilesContainerFactory {

	@Override
	public TilesContainer createTilesContainer(Object context)
			throws TilesException {

		BasicTilesContainer container = new KoubeiTilesContainer();
		initializeContainer(context, container);
		return container;
	}
}

 

import java.util.Map;

import org.apache.tiles.TilesException;
import org.apache.tiles.definition.DefinitionsFactory;
import org.apache.tiles.impl.BasicTilesContainer;

/**
 * @author 百岁 (莫正华 baisui@taobao.com)
 * 
 *         2011-8-4 上午10:50:41
 */
public class KoubeiTilesContainer extends BasicTilesContainer {

	@Override
	protected void initializeDefinitionsFactory(
			DefinitionsFactory definitionsFactory, String resourceString,
			Map<String, String> initParameters) throws TilesException {

		definitionsFactory.addSource(KoubeiTilesContainer.class
				.getResource("/tiles-conf/tiles-defs.xml"));
		

		super.initializeDefinitionsFactory(definitionsFactory, resourceString,
				initParameters);
	}
}

 然后在web.xml中配置一个配置节点,就可以让tiles来从classpath下来加载配置信息了。

	<context-param>
		<param-name>org.apache.tiles.factory.TilesContainerFactory</param-name>
		<param-value>com.koubei.profile.tiles.KoubeiStrutsTilesContainerFactory</param-value>
	</context-param>

 

分享到:
评论

相关推荐

    springmvc与apache tiles整合demo

    Apache Tiles是一个视图框架,它允许开发者创建可重用的布局,并通过定义模板来组织页面。在Spring MVC中整合Apache Tiles,可以将页面设计与业务逻辑分离,提高代码的可维护性和复用性。 在Spring MVC中,视图解析...

    apache tiles jar所有jar包

    Apache Tiles 是一个强大的Java Web应用程序框架,主要用于构建和管理页面布局。它允许开发者将Web页面分解为可重用的部分,称为“Tiles”,这些部分可以组合成一个完整的页面。这个压缩包“apache Tiles jar”包含...

    apache tiles3.0

    Apache Tiles是Apache软件基金会的一个开源项目,主要用于Web应用中的页面组装。Tiles 3.0是该框架的一个重要版本,它提供了强大的布局管理功能,帮助开发者更有效地构建和维护复杂的Web界面。在本篇文章中,我们将...

    springMVC + freemarker + apache tiles

    SpringMVC、Freemarker和Apache Tiles是三个在Web开发中广泛应用的框架,它们各自承担着不同的职责。SpringMVC是Spring框架的一部分,主要用于构建基于Java的后端 MVC(Model-View-Controller)应用程序;Freemarker...

    Apache Tiles3整合SpringMvc

    Apache Tiles3 是一个强大的视图框架,用于构建和管理网页应用中的页面布局。它允许开发者定义页面模板,然后通过组合这些模板来创建复杂的页面结构。Spring MVC 是一款流行的基于模型-视图-控制器(MVC)设计模式的...

    apache_tiles2.2---文档读后总结

    Apache Tiles 2.2 是一款强大的模板引擎,用于简化Web应用程序的用户界面开发。它采用复合视图模式(The Composite View pattern),允许开发者定义一系列可重用的子页面(tiles),并通过组合这些子页面来构建完整...

    tiles-api-2.0.6.jar,tiles-core-2.0.6.jar,tiles-jsp-2.0.6.jar

    在Java Web开发中,我们经常会遇到使用库和框架来简化工作的情况。...如果你在寻找这些库文件,它们通常可以在Apache官方网站或其他可靠的软件仓库找到,或者像描述中提到的那样,从特定的空间或资源库中获取。

    springmvc 集成 tiles2实现页面模板局部刷新

    同时,还需配置TilesConfigurer,用于加载Tiles的定义文件。 3. **创建Tiles定义**:编写一个或多个tiles.xml文件,定义页面布局和组件。每个定义都是一个模板,可以包含多个区域(或称为“tiles”),这些区域可以...

    thymeleaf-extras-tiles2:Thymeleaf与Apache Tiles 2.x的集成

    Apache Tiles 2版本2.2.1+ (建议使用2.2.2 ) Web环境(Tiles集成无法离线工作) Maven信息 groupId: org.thymeleaf.extras artifactId:*主程序包: thymeleaf-extras-tiles2 * Spring 3集成程序包: ...

    tiles-3.0.8-all

    "tiles-3.0.8-all" 是一个与Apache Tiles相关的软件包,它是一个用于构建Web应用程序布局的强大框架。Tiles的主要功能是将多个HTML、JSP或FreeMarker模板组合成一个单一的页面,使得页面设计更为模块化和可重用。这...

    apachetiles:这个 (apachetilesorigin) 是一个学习 apache tile 的测试项目,只能 fork 用于学习目的

    apachetiles This is a test project for learning apache tiles. Project can be forked for learning apache tiles. 建造 mvn clean install 部署 mvn jetty:run This will deploy the project on local host...

    tiles2.1.2前端框架

    Tiles框架是Struts的一个扩展,最初由Apache软件基金会开发,其设计灵感来源于JSP Tiles。Tiles2.1.2是该框架的一个特定版本,它提供了一系列改进和优化,以提高开发效率和应用的可维护性。 在提供的文件列表中,...

    SpringMVCDemo2

    SpringMVC是一个强大的Java Web应用程序框架,用于构建后端服务,而Apache Tiles则是一个视图层框架,专门用于页面布局和组装。两者的整合能够帮助开发者更有效地管理和组织Web应用的用户界面。在这个名为...

    myfaces-example-tiles-1.1.6.rar_Tiles_jsf myfaces_jsf tiles exam

    `myfaces-example-tiles-1.1.6.rar` 是一个示例项目,它展示了如何在JavaServer Faces (JSF)环境中集成和使用Apache Tiles框架。这个例子特别关注MyFaces实现,一个流行的JSF实现库。 **JSF(MyFaces)介绍** Java...

    Tiles框架的配置

    首先,Tiles框架基于Apache Struts项目,它提供了一种声明式的方式来定义页面布局。通过XML配置文件,我们可以指定页面的不同部分(如头部、主体、底部等)以及它们的来源。这使得开发者能够专注于页面内容的编写,...

    Tiles框架入门教程示例(springmvc整合tiles)

    Tiles框架基于Apache Struts项目,其主要思想是定义模板(Tiles),这些模板是页面的可重用部分,如头部、导航栏、主体和页脚。通过这种方式,开发者可以创建一个主模板,然后在其中插入不同的内容区域,从而实现...

    struts2 tiles2 配置例子

    首先,`tiles2`是Apache Tiles框架的一个版本,它允许开发者定义和管理Web应用中的页面布局。Tiles2通过模板和组件的方式,让开发者可以创建可复用的页面部分,从而提高开发效率并保持代码的整洁。 **Step1: 导入...

    tiles框架增加一个页面的步骤

    Tiles框架作为Apache Struts的一个重要组成部分,为开发者提供了一种简单而强大的方式来实现这一目标。通过本篇文章,我们将详细探讨如何使用Tiles框架增加一个新的页面,并确保其能够融入到现有网站的整体设计之中...

    cesium的3d-tiles转换工具

    “objTo3d-tiles-master”很可能是该转换工具的源代码仓库,对于开发者来说,这是一个宝贵的资源。通过阅读和研究源代码,我们可以了解到转换过程的细节,例如如何解析.OBJ文件,如何组织3D Tiles的结构,以及如何...

    tiles+struts2配置文件

    6. **运行与测试**:完成以上配置后,启动服务器,访问相应的URL,你应该能看到基于Tiles和Struts2配置的页面结构。相比直接使用iframe,Tiles提供了一种更优雅、更灵活的方式来组织和管理页面内容,避免了iframe的...

Global site tag (gtag.js) - Google Analytics