- Struts 2.x权威指南
- 李刚编著
- 747字
- 2022-07-20 11:12:05
5.1.4 类型转换和输入校验
当仔细分析上面Servlet中的输入校验代码时,我们发现了如下的代码片段。
try
{
//将用户输入的生日字符串转换成一个日期变量
birth = sdf.parse(strBirth);
}
...
//如果将用户输入的生日字符串转换成日期出现异常,表明输入不合法
catch (Exception e)
{
errStr += "<br>您输入的生日必须是yyyy-MM-DD格式!";
}
在上面代码中,尝试将用户输入的生日字符串转换成一个日期类型的变量,如果转换过程中出现异常,就断定用户的输入出现了异常,在这种方式下,类型转换和输入校验成为了一个整体。
表现层数据处理包含类型转换和输入校验,通常我们认为:类型转换处理应该在输入校验之前进行,因为如果浏览者输入的数据无法转换成合适的类型,也就不必进行输入校验了。所以,我们可以看到上面Servlet中的代码必须先将用户年龄转换成一个整数,然后才判断浏览者输入的年龄是否是一个有效的年龄值。
除此之外,很多时候将类型转换和输入校验同时完成,正如上面的try...catch块,在进行类型转换的同时,也完成了输入数据的校验。这不难理解:如果用户输入无法正常转换成有效的数据类型,则用户输入肯定是非法数据,因此进行类型转换时可以完成基本的输入校验;但能成功转换成有效数据类型只是成为有效数据的必要条件,但不是充分条件,所以在类型转换的基础上,还必须进行额外的输入校验。
实际上,Struts 2框架的类型转换也利用了这种设计哲学,在4.6节的讲解中,Struts 2在类型转换出现失败时,将会转入系统的输入页面,并在该页面上显示类型转换失败的提示信息——实际上,这种类型转换失败信息是一种广义的输入校验失败信息。
类型转换和数据校验的大致关系是,类型转换是数据校验的前提。但在很多时候,类型转换和数据校验是同时完成的。如果要求数据可以正常转换成有效的数据类型,则输入数据必须是合法数据,这就要求用户输入必须是合法数据。可以理解:类型转换的要求是输入校验的子集。