现在的位置: 首页 > 综合 > 正文

ajax+struts-i18n,validate framework(4)

2012年12月10日 ⁄ 综合 ⁄ 共 2401字 ⁄ 字号 评论关闭
 

好啦,咱们的应用就告一段落了,因为这次我们的主要目的是学习Struts框架中的过滤器,I18N,数据验证以及和ajax集成,为了简化,所以并没有引入数据库。我们来总结一下:

 

1.      Filter是从Servlet2.3规范开始新增的功能,并在Servlet2.4规范中得到增强。它就是在源数据和目的数据之间起过滤作用的中间组件。对Web应用来说,过滤器是一个驻留在服务器端的Web组件,它可以截取客户端和资源之间的请求与响应信息,并对这些信息进行过滤。当Web容器接收到一个对资源的请求时,它将判断是否有过滤器与这个资源相关联。如果有,那么容器将把请求交给过滤器进行处理。在过滤器中,你可以改变请求的内容,或者重新设置请求的报头信息,然后再将请求发送给目标资源。当目标资源对请求作出响应时,容器同样会将响应先转发给过滤器,在过滤器中,你可以对响应的内容进行转换,然后再将响应发送到客户端。Servlet过滤器对请求的过滤过程如下:

AServlet容器创建一个过滤器实例

B.过滤器实例调用init方法,读取过滤器的初始化参数

C.过滤器实例调用doFilter方法,根据初始化参数的值判断该请求是否合法

D.如果该请求不合法则阻塞该请求

E.如果该请求合法则调用chain.doFilter方法将该请求向后续传递

 

2.      I18N就是国际化的意思,我们做国际化的应用就可以让不同地区不同语言的用户看到符合他们使用习惯的网页界面和错误提示,譬如美国人看到英文操作页面,中国人看到中文操作页面。它的原理就是web浏览器向web服务器发送HTTP请求的时候,会发送自身所在区域和语言的请求头信息,使用Struts框架的服务器端程序就可以获取这个locale请求头,然后根据不同的locale读取相应后缀名(_zh_CN,_en_US)的消息资源文件 (.properties),最后组装呈现相应的页面给用户。

 

3.      数据验证分为客户端验证和服务器端验证。客户端用JavaScript,优点是本地验证速度快,缺点是客户端可能禁用JavaScript,不安全。使用Struts框架的服务器端验证可以有三种方法:

第一种是使用验证框架,它适用于简单通用的验证,譬如表单元素不为空,必须要为数字或者符合特定格式等,使用它的步骤如下:

A.        创建validation.xml

B.        让我们编写的Form继承ValidatorForm

C.        配置struts应用使用validation framework(struts-config.xml)

D.        创建消息资源文件 applications.properties

E.        struts-config.xml 中配置application.properties

F.         jsp页面上显示错误信息

 

第二种是在ActionFormvalidate方法里面,它是执行验证框架无法涵盖的复杂验证的好地方,譬如比较两个日期的大小以其其它一些条件判断,在validation.xml配置中不好指定,而使用Java代码却很好实现;

 

第三种可以执行验证的地方就是在Actionexecute()方法里,它也是使用Java代码实现验证,和ActionForm不同的是,Action可以访问应用的服务层和领域层,因此调用服务器的数据库查询或访问领域层中业务规则的验证就最适合放在Action中。它们的使用方式在上文已经阐述过了。

 

通常在实际项目中,我们会综合这三种方式并且加上JavaScript一起做数据验证。这点有人不能理解。大家可以想一想,数据的基本流向是从页面到我们的应用程序再到数据库,数据库如果设计良好,本身就可以保证数据的完整性和准确性。那我们为什么还要在我们的应用程序中以及客户端做数据验证呢?很显然的一个原因当然是:问题越早发现和处理越好。这就是我们常说的,将错误扼杀在襁褓之中。所以作为一个真实企业级的应用,客户端验证,web服务器端验证以及数据库服务器端验证都是必不可少的!

 

4.      Ajax(Asynchronous JavaScript and XML)我们应该不陌生了,它彻底颠覆了传统WEB应用的模式,极大地改善了用户体验。在Ajax之前,我们就是提交请求等待提交请求等待的周而复始,有了Ajax之后,我们的操作和对服务器请求就可以异步地进行,再也不用枯燥地等待了。如果大家以前没有使用Ajax的经验并且对它有兴趣,请参阅拙作:http://blog.csdn.net/lenotang/archive/2008/07/22/2692926.aspx 。那么,什么叫异步呢?举一个生活中的例子:我们程序员写代码,写的口渴了就倒水喝,而在我们倒水的时候是无法继续写代码的。也就是说,写代码和倒水是同步(按照一定先后顺序)进行的。这也就是传统WEB应用的模式。但是,如果我们有一个很贤惠(注意,这里许老师所说的贤惠并不是指闲在家里什么都不会^_^!)的女朋友在身边,情况就完全不一样了。敲代码,口渴了,一个眼神或者一个响指,茶就到了嘴边。也就是说,茶是你女朋友帮忙在倒,她在倒茶的时候你的代码不用停下来。这就是异步(同一时间做多件事情)。Ajax应用里面就有个类似女朋友这样的角色—XMLHttpRequest对象!各位,现在体验到有女朋友的好处了吧。(当然,女朋友比较凶悍的,切勿模仿,否则,非但没有茶喝,头上还可能长丘陵!)ajax技术能够极大地改善用户体验,合理得当的运用能给我们的系统增色不少。而本文使用的prototype.js是由Sam Stephenson写的一个javascript类库。这个构思奇妙而且兼容标准的类库,能帮助我们用少量的代码构建灵活的Ajax应用。

抱歉!评论已关闭.