- 浏览: 585361 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lihaiming:
受用了,已把定义的版本改为跟本地的一致,不用担心找不到了,现应 ...
Cannot find the declaration of element 'beans' -
Albert_Hawking:
看到这个帖子,解决了我的问题。 我的总结是这样的:由于mave ...
Cannot find the declaration of element 'beans' -
di1984HIT:
学习了啊,哈哈哈~~
win7下安装的sqlserver ,1433端口不通 -
蛋呢823:
我也碰到这个问题,尝试了你这个方法也不行,自己摸索了一天,终于 ...
was缓存导致web.xml更改无效 -
liuxiyangyang:
文章帮了我大忙了,谢谢
Cannot find the declaration of element 'beans'
转自:http://a123159521.iteye.com/blog/782198
一般比较正式的XML信息中都会包含对应的DTD声明,用来定义 该XML文档中的格式,例如WEB项目中用到的web.xml,例如struts的配置文件struts-config.xml,下面是web.xml中 用到的DTD信息:
Java代码
- <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd">
当我们用DOM或者Digester来解析这个XML的时候,如果当前计算机已联网那么解析的速度比较慢,如果当前计算机未联网则会报无法连接主机 的异常。这是因为XML的解析器需要读取dtd的内容,而这个dtd文件是存在于互联网的某台主机上的.
[曾经因为ibatis的服务器访问不到,总提示找不到dtd验证,苦恼了很久,这回好好研究]
让我们看看开源框架是如何验证DTD的:
Spring如何解析网络和本地dtd配置的路径.
Java代码
- /**
- * EntityResolver implementation for the Spring beans DTD,
- * to load the DTD from the Spring class path (or JAR file).
- *
- * <p>Fetches "spring-beans-2.0.dtd" from the class path resource
- * "/org/springframework/beans/factory/xml/spring-beans-2.0.dtd",
- * no matter whether specified as some local URL that includes "spring-beans"
- * in the DTD name or as "http://www.springframework.org/dtd/spring-beans-2.0.dtd".
- *
- * @author Juergen Hoeller
- * @author Colin Sampaleanu
- * @since 04.06.2003
- * @see ResourceEntityResolver
- */
以上是类的说明就不贴整段了,免得大家看着烦,我也是.
配置dtd从源代码路径,不管是否有特殊的本地url包含spring-beans.dtd的名称 ,实际还是从本地取DTD路径.[ XML配置还是以网络地址显示],这也是为什么即使Spring在没有网络连接的情况下还是依然可以运行.
那么这是怎么查找指定的,请看如下代码:
Java代码
- public InputSource resolveEntity(String publicId, String systemId)
通过publicId和systemId.
比如:
Java代码
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " http://www.springframework.org/dtd/spring-beans.dtd ">
其PublicID就是-//SPRING//DTD BEAN//EN.
其 SystemID就是- http://www.springframework.org/dtd/spring-beans.dtd.
在Spring框架中只要你使用标准的xml dtd或者schema声名,就会自动从spring.jar里面加载到dtd或schema.其加载程序如下.
Java代码
- Resource resource = new ClassPathResource(dtdFile, getClass());
- InputSource source = new InputSource(resource.getInputStream());
- source.setPublicId(publicId);
- source.setSystemId(systemId);
这里的路径就是相对于此BeansDtdResolver的路径,也就是org.springframework.beans.factory.xml,所以Spring的dtd等配置文件放在这个目录下,没有网络照样运行.
接下来让我们看下Struts是如何加载dtd文件的.
看Struts源码如下:
Java代码
- protected String[] registrations =
- {
- "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN",
- "/org/apache/struts/resources/struts-config_1_0.dtd",
- "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN",
- "/org/apache/struts/resources/struts-config_1_1.dtd",
- "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN",
- "/org/apache/struts/resources/struts-config_1_2.dtd",
- "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN",
- "/org/apache/struts/resources/struts-config_1_3.dtd",
- "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN",
- "/org/apache/struts/resources/web-app_2_3.dtd"
- };
publicID直接写死,systemId直接写死.哈哈,与Spring对比,Spring的publicId由xml动态指定,如果需要添加dtd或schema版本等不需要修改代码,Struts必须修改代码,或许大家也看到差距了,感觉Struts1.X都很久没更久了,曾经的辉煌都被埋没了.[不知道哪种利益驱动了,搞了个struts2.x,完全不同的理念]
Java代码
- // Create a new Digester instance with standard capabilities
- configDigester = new Digester();
- configDigester.setNamespaceAware(true);
- configDigester.setValidating(this.isValidating());
- configDigester.setUseContextClassLoader(true);
- configDigester.addRuleSet(new ConfigRuleSet());
- for (int i = 0; i < registrations.length; i += 2) {
- URL url = this.getClass().getResource(registrations[i + 1]);
- if (url != null) {
- configDigester.register(registrations[i], url.toString());
- }
- }
- this.addRuleSets();
Struts是使用Digester进行dtd的注册,现在终于明白了,为什么Struts和Spring在没有网络的情况下可以运行,但是有的外部包,在没有网络的情况下,或者网络有问题的时候会出问题,这也是我们要注意的,在引入其他项目时,配置文件中的dtd是必须要关注的,在本地开发完全正常,到没有网络环境的时候,你就傻眼了.
解决Dtd问题也是我们平时开发必须考虑的.
发表评论
-
使用json-lib进行Java和JSON之间的转换
2013-05-09 09:30 1129http://www.cnblogs.com/mailing ... -
java验证身份证号码及编码规则和提取相应信息
2012-09-21 16:39 1817转自:http://www.cnblogs.com ... -
判断二个RGB颜色相近
2012-08-27 12:04 8982转自:http://blog.sina.com.cn/s ... -
Java中颜色的String和Color对象之间的互相转换
2012-06-27 09:10 2587转自http://blog.csdn.net/signs ... -
字符编码详解——彻底理解掌握编码知识,“乱码”不复存在
2012-06-04 16:07 1441摘自 <http://polaris1119.iteye ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-04-26 15:28 799http://www.iteye.com/magazines/ ... -
POI 汇总、总结帖
2012-01-17 17:21 1957最近工作需求使用POI,使用场景如下: 1、查询数据库获取数 ... -
POI实现插入行
2012-01-17 17:13 15277http://hi.baidu.com/xiangliling ... -
POI操作Excel文档-中级篇
2012-01-17 17:12 1293转自 http://ltc603.iteye.com/blo ... -
POI操作Excel文档-基础篇
2012-01-17 17:09 1100转自:http://ltc603.iteye.com/blog ... -
制作完整的java可执行文件
2012-01-09 10:56 1013转自:http://www.cnblogs.com/Seiya ... -
Step By Step(Java 系列的目录)
2012-01-09 10:10 783转自:http://www.cnblogs.com/steph ... -
引用weblogic10的weblogic.jar
2011-12-27 11:35 2888weblogic10及以后的版本,不能直接使用server/l ... -
SWING 那几刀
2011-12-25 01:29 1971最近想做一些桌面程序,所以把前段时间ITEYE上很多的Swin ... -
遍历Map时抛出java.util.ConcurrentModificationException异常的解决办法
2011-12-22 15:46 3031转自http://hi.baidu.com/notyetfis ... -
Crack JRebel 4.0,无需重启JVM,热部署解决方案
2011-12-02 15:44 1455http://dl.dropbox.com/u/2295134 ... -
log4j详解与实战
2011-11-01 15:45 1178转自:http://www.iteye.com/t ... -
【解惑】深入jar包:从jar包中读取资源文件
2011-07-17 12:36 1174我们常常在代码中读取一些资源文件(比如图片,音乐,文 ... -
sun.misc.BASE64Encoder与sun.misc.BASE64Decoder导入错误
2011-07-14 21:24 12220项目中引用import sun.misc.BASE64Deco ... -
分享高效java开发者必备的资源列表
2011-07-14 09:11 1251分享高效java开发者必备 ...
相关推荐
Spring的配置通常通过XML文件进行,而DTD则用于验证这些XML配置文件的语法正确性。例如,`spring-beans.dtd`定义了Spring配置文件中bean、property等元素的结构,确保开发者按照规范编写配置,避免因语法错误导致的...
首先,`struts-2.0.dtd`是Struts 2.0的文档类型定义,它是XML文件的一种规范,用于验证`struts.xml`配置文件的语法是否正确。DTD中定义了配置元素和属性,如action、result、package等,确保开发者在编写配置文件时...
在Struts2中,DTD文件用于验证Struts配置文件(struts.xml)的语法正确性。例如,`struts-default.dtd`包含了默认的Struts2配置元素和属性的定义,确保了开发者在编写配置文件时遵循了正确的规范。将这些DTD文件放在...
DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="abc" namespace="/def" extends="struts-...
其中,XML文件的自动提示与校验功能极大地提高了开发效率,尤其在使用如Struts、Hibernate、Spring等流行框架时更为显著。然而,在离线状态下,当遇到框架升级或引入新版本DTD(Document Type Definition,文档类型...
SSH(Struts2、Spring、Hibernate)是Java开发中常用的三大开源框架,它们的组合能有效地实现MVC(Model-View-Controller)设计模式,提高开发效率并降低耦合度。以下是S2S3H3(Struts2.3.4+Spring3.0+Hibernate3.3...
### Spring和Struts框架学习总结 #### 一、Spring框架简介与核心概念 Spring框架是一个开源的Java平台,主要用于简化企业级应用的开发工作。它提供了全面的基础架构支持,包括依赖注入(DI)、面向切面编程(AOP)...
### Struts + Spring + Hibernate 实例详解 #### 一、项目背景与概述 在本教程中,我们将构建一个简单的登录应用,使用Struts作为前端框架,Spring进行业务逻辑管理,Hibernate作为持久层技术。该应用名为`login`...
- 在Struts2中,可以通过注解、XML配置文件或编写自定义验证器等方式实现数据验证。 - 示例: ```java @RequiredStringValidator(message = "Username is required") private String username; ``` ### 访问Web...
【Eclipse开发Struts1.2】的知识点详解 Struts1.2 是一个流行的Java Web框架,它基于Model-View-Controller (MVC)设计...此外,随着Struts1.2逐渐被淘汰,现代Web开发更多地转向Struts2或Spring MVC等更现代的框架。
SSH(Struts2、Spring、Hibernate)是一种常见的Java Web开发框架组合,用于构建高效、可扩展的企业级应用程序。DTD(Document Type Definition)是XML文档的一个重要组成部分,它定义了XML文档的结构和规则。在SSH...
总之,Java后端开发中的DTD文件是保证XML配置正确性和一致性的重要工具,它与Spring、MyBatis、Struts和Dubbo等框架的结合使用,共同构成了复杂且高效的后端应用体系。了解并熟练掌握这些技术,对于Java后端开发者来...
### Struts2、Hibernate3、Spring的简单配置与使用 #### 一、开发环境搭建 在开始介绍如何配置Struts2、Hibernate3以及Spring之前,我们先了解一下所需的开发环境: - **IDE**: MyEclipse 6.5 - **Java SDK**: ...
### Struts2 + Spring2 + Hibernate3 整合实例源码分析 #### 一、概述 随着企业级应用的发展,为了提高开发效率和系统维护性,越来越多的项目开始采用MVC设计模式。其中,Struts2作为MVC框架中的佼佼者,在前端...
### Struts 2、Hibernate、Spring的整合应用实例 #### 一、概述 在Java EE领域,Struts 2、Hibernate以及Spring这三个框架被广泛应用于构建高性能的企业级应用。Struts 2负责处理用户交互及页面展示;Hibernate...
它结合了Struts2的MVC架构模式、Spring的依赖注入(DI)和面向切面编程(AOP)、以及Hibernate的对象关系映射(ORM)技术,可以有效提高开发效率和代码质量。 - **Struts**:负责处理前端请求和页面展示,遵循MVC...
在Struts2中,`struts-config.dtd`和`struts-plugin.dtd`等文件用于验证Struts2配置文件的格式,确保配置正确无误。 3. **学习资料**:这部分可能包含教程、示例代码、讲解文档等,帮助开发者理解和学习如何使用...