最近学习 Java EE,用到了 Structs 框架,准备写一个小的 Demo 来展示 validation。
问题描述:
这是由一个小小的警告引发的故事:
在写用户表单提交验证时创建了一个 LoginAction-validation.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请输入用户名</message>
</field-validator>
...
然后看见一个小小的警告标识,具体内容如下:
The file cannot be validated as the XML definition “http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd” that is
specified as describing the syntax of the file cannot be located.
上网看看,发现这个http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd
已经没用了,取而代之的是 http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd
,因为 xwork 是struts的,而 struts 是 apache 的。
然而我并没有替换,因为仅仅是一个不起眼的警告,而且还出现在 xml 文件,有谁会注意到呢。
结果就是 validation 无法校验,直接跳到了业务代码。
解决方案:
如上所述,替换那个 dtd,然后重启 tomcat 服务器就可以正常 validation 了。
总结体会:
故事算是讲完了,其中有些问题还是值得我们去思考的,比如这里的 dtd 规范。计算机系统的正常运行是建立在很多统一的协议或规范上的。我们写程序有规范,这样程序员之间的交流会更顺畅;计算机网络有协议,这样数据在不同的计算机之间可以实现共享;计算机体系结构内部也有规范,总线给内存一个写信号,内存就开始接收数据,它可不管数据来源于哪里;
换个角度说就是,理解协议和遵守规范有助于我们构建良好的知识体系;反之,如果想另辟蹊径,则改变现有协议或规范即可。