Web开发中验证的讨论及Webwork中的实现

首先,js验证和validation验证的争论
js验证的好处:
  1.javascript可以令到用户一输入错误,马上可以在本页面就验证并弹出提示,而无需

转到servlet中验证后,再转到别的页面显示提示信息.从使用人性化的角度上,用js更为

直观易懂. 
  2.把验证转到servlet中,其实是一种低效的方法,javascript运行是不用占服务器资

源的,只靠用户端机子的CPU和内存资源运行,如果一个页面同时访问量很大的

话,servlet验证的敝端就出来了,会减低服务器的性能.而且先转到servlet中,验证完后

再转到相关页面,这本来就会相隔一段时间的,这对用户来说,也是不希望的. 
  3. 写javascript函数只需很少量的代码就可以完成验证了,而且javascript发展成熟

,很多代码可以在网上查得到.但如果用servlet验证,有一堆的文件要配置,还要写相关

的类,这不是简单问题复杂化,自己增加自己的工作量吗? 
  缺点:

 客户端可能禁用JS
  要做到安全的表单验证,服务端验证是必须的,JS只是作为辅助,是可选的  
  你写的表单别人不一定就会用,别有用心的人可以自己写个表单提交一些特别  
  的数据到服务器
   
  某些复杂的验证是不可能用JS验证(当然AJAX所用的XMLHttpRequest除外)。如  
  在帐号注册用例中,验证某个帐号是否存在就不能用JS验证了

  一般现在,现在我是这样认为的,如果用户存入不合规范的数据,是对系统全局或别

的模块没影响的,那么我们就用javascript来做,一般比较复杂的验证又或者重要数据

表的数据输入,就用正规的验证方式。  关键这个影响与否的尺度 很难把握的。

  http://topic.csdn.net/t/20051218/01/4465704.html  关于框架验证的讨论

  http://www.80diy.com/csdn/list.aspx?u=f/5403/7001-7500.html 关于框架和开源

的帖子列表


webwork2guide中关于 验证方式
  1. JS验证
  2. 服务器端的验证

重点关于 服务器端的数据验证,XWork提供了一个 Validator接口,所有的数据验证类

必须实现这个接口,同时提供了几个常用的数据验证类以及用于扩展的抽象类

数据的合法性验证在 Action 被调用前,通过 Interceptor 在 Action 运作前对其输

入参数进行验证,具体是 ValidationInterceptor 调用指定的 Validator 对输入的参

数进行合法性验证

上述的细节可以参考 Xwork 的 ActionValidatorManager 和 ValidationInterceptor

的实现代码

下面具体的 Validator 使用  (特别是涉及到的配置文件一堆) 架构之妙在于对框架

的灵活使用,好的架构不着痕迹,同时没有性能的损失

下面的记录以配置文件为主线:


1. web.xml 中配置  服务资源的注册
标准http协议中没有.action结尾的服务资源,需要在web.xml中注册
<servlet>
    <servlet-name>webwork</servlet-name>
        <servlet-class>
com.opensymphony.webwork.dispatcher.ServletDispatcher
 </servlet-class>
</servlet>
 
<servlet-mapping>
        <servlet-name>webwork</servlet-name>
        <url-pattern>*.action</url-pattern>
</servlet-mapping>
这样所有 .action 结尾的服务请求由 ServletDispatcher接管


2. xwork.xml 注册 action  同时在 action 中配置 数据验证的 Interceptor


3. classpath的根目录 WEB-INF/classes 创建 validators.xml 注册当前应用中的所

有的 Validator


4. 针对页面表单字段设置 对应的 Validator XxAction-validation.xml
 <field name="model.username">
        <field-validator type="required">
            <message>Please enter Username!</message>
        </field-validator>
 </field> 
 <field name="model.password">
        <field-validator type="length">
            <param name="minLength">4</param>
            <param name="maxLength">6</param>
            <message>
Password length must between ${minLength} and
${maxLength} chars!
     </message>
        </field-validator>
 </field>
通过 param 节点,我们可以为对应的 Validator 设置属性值。这一点与Spring IOC非

常类似,实际上XWork也提供了内置的 IOC实现,不过与Spring的 IOC支持想比还有一

些差距


5. 修改 Action 类,使继承 ActionSupport 类
6. 修改页面  增加数据合法性校验错误提示
<ww:if test="hasFieldErrors()">
  <span class="errorMessage">
      <b>Errors:</b><br>
      <ww:iterator value="fieldErrors">
        <li><ww:property value="value[0]"/></li>
      </ww:iterator>
  </span>
</ww:if>
通过<ww:if test="hasFieldErrors()">判断是否存在字段验证错误,hasFieldErrors

()是 ActionSupport中提供的方法,用于判定当前是否存在字段验证错误。

LoginAction扩展了 ActionSupport类,自然继承了这个方法,我们即可在页面中通过

EL对其进行调用。如果存在FieldErrors,则通过一个迭代,在页面上显示错误信息:
 
    <ww:iterator value="fieldErrors">
        <li><ww:property value="value[0]"/></li>
    </ww:iterator>
 
fieldErrors 是 ActionSupport 中保存字段校验错误信息的 Map 结构。针对这个Map

进行迭代,得到的每个迭代项都是一个 key-value Entry,key中保存着字段名,value

则是一个List数据结构,里面包含了针对这个 Key的错误信息列表,错误信息的数量取

决 于字 段 验证 规则配置中的设定。这里value="value[0]",也就是取当前条目

value中保存的第一条错误信息。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值