java.io.FileNotFoundException: http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd问题终结原因

问题:当我使用Struts2使用XML配置数据校验Validator时,发现校验数据没有效果。找了好久原因,终于找到原因并附上代码,希望能帮助初学Struts并遇到类似问题的朋友,废话不多说。

首先遇到validator配置文件验证不起作用从下面方面一一验证。(首先考虑)

下面是我从网上搜集到的:
在采用struts的xml配置方式校验数据时,发现怎么也不起作用。无法按照正常流程,走到input指向的页面。
一 问题的解决
很多博客说明了自己查找的方式,最后都指明了是因为配置文件格式不正确的原因。出现这种问题的时候,应该从下面4个部分考虑:
1:文件名是否是 LogInAction-validation.xml 第一部分的名字必须与action类名对应一致。
2:struts.xml中同一个action下面,要配置input类型的返回结果,如同:

<action name="login" class="com.allen.ssh.action.LogInAction">
            <result name="success">/Welcome.jsp</result>
            <result name="error">/Register.jsp</result>
            <result name="input">/Register.jsp</result> 
        </action>

3:然后是检查 LogInAction-validation.xml 中指定的属性名字,是否与JSP页面中的属性名字一致。
4:然后是 LogInAction-validation.xml 文件格式是否正确,主要是指如下这一部分:

二 问题的根源
有一定的开发经验的童鞋,不管步骤是如何,都会整体的检查下来,因为这种校验文件只要与action类放在同一个包下,是自动加载的,无须关心是否还要在哪里配置。
但是我想说的是造成这种问题的根源,一般情况下,大家都是搜索某篇文章,然后跟着做例子,可是有时候使用的struts的版本不一致,贸然的使用了不同版本的配置,很可能会导致这种问题。
所以,参考别人做的东西时候,主要是看思路,具体到自己去实现的时候,要去自己下载的源码包下面,找到对应的文件:struts-2.3.16.3/src/xwork-core/src/main/resources/xwork-validator-1.0.3.dtd
打开看一下,里面说的:

<!--
  XWork Validators DTD.
  Used the following DOCTYPE.
</pre><p></p><p></p><pre name="code" class="html">  <!DOCTYPE validators PUBLIC
  "-//Apache Struts//XWork Validator 1.0.3//EN"
  "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
-->

那么直接拷贝过去使用即可。要知道1.0.2版本还是如下配置的:

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"  
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> 

所以不管直接使用还是修改为了 1.0.3,都会导致校验文件不起作用。

三 开发建议
从这个问题可以看出,再使用开源的框架时候,一定要使用软件本身自带的例子配置文件说明,而不是直接去网络上拷贝。这应该是一个早就形成的习惯。

最后,以struts为例子,相关DTD文件,一般在下面的包里:
struts-2.3.16.3/src/
如果是validator:struts-2.3.16.3/src/xwork-core/src/main/resources/xwork-validator-1.0.3.dtd
如果是标签库:/Users/zhaoxin/Dev/struts-2.3.16.3/src/core/src/main/resources/struts-2.3.dtd
如果上面方法都用了还是没有验证效果,请考虑下面方法:

其次验证下载的Struts版本与Xwork是否一致。如果不一致也会导致验证失败。(其次考虑)

关于为什么要版本一致在我的之前博客有介绍。欢迎浏览: Struts2与XWork
如果不一致,请下载版本一致,例如我的Struts2 版本是struts2-core-2.0.11.1
那我的Xwork版本需要是xwork-2.0.1。下载下来xwork之后使用解压软件打开文件。里面会有个xwork-validator-1.0.2.dtd文件即是我们要使用来写XML的模板文件。使用编辑打开这个文件,找到下面代码:

<!DOCTYPE validators PUBLIC 
        "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

先在浏览器上使用IE打开http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd打开这个地址,如果不存在说明该文件已经不是dtd约束文件了,不能使用这个作为Validation.xml的描述文件了,怎么办呢?
打开网址,发现opensymphony的网址已经迁移走了,因为xwork的东西已经并入struts2中,成为apache的一部分.所有的dtd已经移交到http://struts.apache.org/dtds/ 这个地方.打开这个网址下载你需要的dtd文件。struts2的校验器的规范要改成:

<!DOCTYPE validators PUBLIC 
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">

如果运用这个dtd文件呢?
在MyEclipse中,Windows->Preferences->MyEclipse->Files and Editors->XML->XML files->XML Catalog点击Add按钮,找到FileSystem将刚才下载的xwork-validator-1.0.2.dtd文件加入,修改KeyType为URI,Key为上面的地址即http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd
这里写图片描述
至此XML的DTD文件已经加载完了,接下来要在所在的Acition.class的包下面新建类似于BookAction-addBook-validation.xml的验证文件。
如何运用这个dtd呢?
New->XML Basic Templates->填写XML文件名->Next->Create XML file from DTD file->Select XML Catalog entry往下拉就有刚才添加的dtd文件了选择之后就可以有提示的写验证XML文件了。
这里写图片描述
至此所有的问题已经说明了。
下面是程序的显示效果:
这里写图片描述
学习Struts确实有很多东西要自己钻研,只有不断总结才能解决一些难易解决的问题。希望我的总结能对大家有帮助。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值