Java学习笔记-《Java程序员面试宝典》-第5章Java Web-5.3框架(5.3.3-5.3.8)

5.3.3 Structs框架的数据验证分为几种类型

数据验证也称为输入校验,用于指导对用户的输入进行基本的过滤,包括必填的字段(字段必须为数字)以及两次输入的密码必须一致等等。Sructs框架提供了现成的易于使用的数据验证功能。
具体而言,数据验证可以分为两种类型:表单验证与业务逻辑验证。其中,表单验证由ActionForm Bean处理,例如,如果用户没有在表单中输入姓名就提交表单,将生成表单验证错误。该方式重写ActionForm的validate()方法,在该方法内对所有字段进行基本的校验。若出现不符合要求的输出,则将错误提示封装在ActionError对象里,最后将多个ActionError组合成ActionErrors对象,因此ActionErrors对象中封装了所有出错信息。
业务逻辑验证由Action处理,如果用户在表单中输入的姓名为”Hello”,那么按照本应用的业务规则,不允许输入”Hello”,因此将生成业务逻辑错误。需要注意的是,在Action里面完成数据验证,实际上就是在execute()方法前面增加数据验证的部分代码。

5.3.4 Form Bean的表单验证流程是什么

Form Bean的表单验证主要有以下4个步骤:
1)用户提交HTML表单后,Structs框架会自动把表单数据组装到ActionForm Bean中。
2)Structs框架调用ActionForm Bean的validate()方法进行表单验证。
3)如果validate()返回的ActionErrors对象为null。或者不包括任何AtionMessage对象,就表示没有错误,数据验证通过。
4)如果ActionError中包含ActionMessage对象,就表示发生了严重错误,Structs框架会把ActionErrors对象保存到request范围内,然后把请求转发到恰当的视图组件中,视图组件通过< html:error>标签把request范围内的ActionErrors对象中包含的错误消息显示出来,提示用户修改错误。

5.3.5 在Structs配置文件中,< action>元素包含哪些属性和子元素

< action>元素的属性见如下描述:
1>attribute:设置和Action关联的ActionForm Bean在request和session范围内的key
2>className:和Action元素对应的配置元素,默认为org.apache.structs.action.ActionMapping
3>forward:定义了一个请求转发路径
4>include:指定包含的URL路径
5>path:指定请求访问的Action路径
6>parameter:指定Action的配置参数,在Action类的execute()方法中,可以调用ActionMapping对象的getParameter()方法来读取该配置参数
7>roles:指定允许调用Action的安全角色,多个角色之间用”,”隔开。在处理请求时,RequestProcess会根据该配置来决定用户是否有权调用Action
8>type:指定Action的完整类名,该类必须是扩展了Structs的Action类
9>name:指定需要传递给Action的ActionForm Bean
10>scope:指定ActionForm Bean的存放范围,其值为Request或Session
11>unknown:设置为true,该操作将被作为没有定义的ActionMapping的URL的默认操作。当设置为true时,表示可以处理用户发出的所有无效的Action URL,默认为false
12>validate:指定是否执行表单验证,默认为true
13>input:指定当表单验证失败时的转发路径

5.3.6 ActionForm Bean的作用有哪些

Action一般用于控制业务逻辑的处理,例如增加、删除、修改、查询等,ActionForm Bean用于封装用户请求的参数。当接收到页面输入的数据后,会首先保存在ActionForm Bean中,然后在Action里面调用逻辑层的代码来处理这些数据。
ActionForm Bean的作用有以下3点:
1>ActionForm Bean本质上也是一种JavaBean,是专门用来传递表单的数据传递对象(DATA Transfer Object,DTO)。除了具有一些JavaBean的常规方法外,ActionForm Bean还包含一些特殊的方法,例如用于验证HTML标单的数据以及将其属性重新设置为默认值。
2>Structs框架利用ActionForm Bean来进行View组件和Controller组件之间表单数据的传递。
3>Structs框架把View组件接收到的用户输入的表单数据保存在ActionForm Bean中,然后把它传递给Controller组件,Controller组件可以对ActionForm Bean中的数据进行修改,JSP文件使用Structs标签读取修改后的ActionForm Bean的信息,重新设置HTML表单。

5.3.7 ActionForm的执行步骤有哪些?

ActionForm的执行步骤有以下几点:
1)检查Action的映射,确定Action中是否已经配置了对ActionForm的映射
2)根据name属性查找Form Bean的配置信息
3)检查Action的Form Bean的使用范围,确定在此范围下是否已经有此Form Bean的实例。假如当前范围下已经存在此Form Bean的实例,而且对当前请求来说,是同一种类型的话,那么就重用。否则,就重新构建一个Form Bean额实例
4)Form Bean的reset()方法被调用
5)调用对应的setter()方法,对状态属性赋值、
6)根据validate的属性选择调用方法。如果validate的属性被设置为true,那么就调用Form Bean的validate()方法。如果validate()方法没有返回任何错误,控制器将ActionForm作为参数传递给Action实例的execute()方法并执行。

5.3.8 forward与global-forward有什么区别

forward的主要作用是根据Action返回的值找到对应的JSP页面。global-forward是全局的forward,当多个Action返回同一个值时,例如再分页或者得到数据列表时可将这个forward元素写在global-forward中,这样就不用每次都在Action里面配置forward了。
区别如下所示:
forward:

<forward name="login" path="/login.jsp" redirect="true"/>

global-forward:

<global-forward>
    <forward name="login" path="/login.jsp" redirect="true"
</global-forwards>

猜你喜欢

转载自blog.csdn.net/qq_28814687/article/details/74127356