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>
分享到:
相关推荐
Apache Tiles是一个视图框架,它允许开发者创建可重用的布局,并通过定义模板来组织页面。在Spring MVC中整合Apache Tiles,可以将页面设计与业务逻辑分离,提高代码的可维护性和复用性。 在Spring MVC中,视图解析...
Apache Tiles 是一个强大的Java Web应用程序框架,主要用于构建和管理页面布局。它允许开发者将Web页面分解为可重用的部分,称为“Tiles”,这些部分可以组合成一个完整的页面。这个压缩包“apache Tiles jar”包含...
Apache Tiles是Apache软件基金会的一个开源项目,主要用于Web应用中的页面组装。Tiles 3.0是该框架的一个重要版本,它提供了强大的布局管理功能,帮助开发者更有效地构建和维护复杂的Web界面。在本篇文章中,我们将...
SpringMVC、Freemarker和Apache Tiles是三个在Web开发中广泛应用的框架,它们各自承担着不同的职责。SpringMVC是Spring框架的一部分,主要用于构建基于Java的后端 MVC(Model-View-Controller)应用程序;Freemarker...
Apache Tiles3 是一个强大的视图框架,用于构建和管理网页应用中的页面布局。它允许开发者定义页面模板,然后通过组合这些模板来创建复杂的页面结构。Spring MVC 是一款流行的基于模型-视图-控制器(MVC)设计模式的...
Apache Tiles 2.2 是一款强大的模板引擎,用于简化Web应用程序的用户界面开发。它采用复合视图模式(The Composite View pattern),允许开发者定义一系列可重用的子页面(tiles),并通过组合这些子页面来构建完整...
在Java Web开发中,我们经常会遇到使用库和框架来简化工作的情况。...如果你在寻找这些库文件,它们通常可以在Apache官方网站或其他可靠的软件仓库找到,或者像描述中提到的那样,从特定的空间或资源库中获取。
同时,还需配置TilesConfigurer,用于加载Tiles的定义文件。 3. **创建Tiles定义**:编写一个或多个tiles.xml文件,定义页面布局和组件。每个定义都是一个模板,可以包含多个区域(或称为“tiles”),这些区域可以...
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" 是一个与Apache Tiles相关的软件包,它是一个用于构建Web应用程序布局的强大框架。Tiles的主要功能是将多个HTML、JSP或FreeMarker模板组合成一个单一的页面,使得页面设计更为模块化和可重用。这...
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...
Tiles框架是Struts的一个扩展,最初由Apache软件基金会开发,其设计灵感来源于JSP Tiles。Tiles2.1.2是该框架的一个特定版本,它提供了一系列改进和优化,以提高开发效率和应用的可维护性。 在提供的文件列表中,...
SpringMVC是一个强大的Java Web应用程序框架,用于构建后端服务,而Apache Tiles则是一个视图层框架,专门用于页面布局和组装。两者的整合能够帮助开发者更有效地管理和组织Web应用的用户界面。在这个名为...
`myfaces-example-tiles-1.1.6.rar` 是一个示例项目,它展示了如何在JavaServer Faces (JSF)环境中集成和使用Apache Tiles框架。这个例子特别关注MyFaces实现,一个流行的JSF实现库。 **JSF(MyFaces)介绍** Java...
首先,Tiles框架基于Apache Struts项目,它提供了一种声明式的方式来定义页面布局。通过XML配置文件,我们可以指定页面的不同部分(如头部、主体、底部等)以及它们的来源。这使得开发者能够专注于页面内容的编写,...
Tiles框架基于Apache Struts项目,其主要思想是定义模板(Tiles),这些模板是页面的可重用部分,如头部、导航栏、主体和页脚。通过这种方式,开发者可以创建一个主模板,然后在其中插入不同的内容区域,从而实现...
首先,`tiles2`是Apache Tiles框架的一个版本,它允许开发者定义和管理Web应用中的页面布局。Tiles2通过模板和组件的方式,让开发者可以创建可复用的页面部分,从而提高开发效率并保持代码的整洁。 **Step1: 导入...
Tiles框架作为Apache Struts的一个重要组成部分,为开发者提供了一种简单而强大的方式来实现这一目标。通过本篇文章,我们将详细探讨如何使用Tiles框架增加一个新的页面,并确保其能够融入到现有网站的整体设计之中...
“objTo3d-tiles-master”很可能是该转换工具的源代码仓库,对于开发者来说,这是一个宝贵的资源。通过阅读和研究源代码,我们可以了解到转换过程的细节,例如如何解析.OBJ文件,如何组织3D Tiles的结构,以及如何...
6. **运行与测试**:完成以上配置后,启动服务器,访问相应的URL,你应该能看到基于Tiles和Struts2配置的页面结构。相比直接使用iframe,Tiles提供了一种更优雅、更灵活的方式来组织和管理页面内容,避免了iframe的...