javaweb Struts的中央控制器

在Struts框架中,有多个组件分担控制器的工作,它们分别是ActionServlet类,RequestProcessor类和Action类等,其中ActionServlet是Struts框架中的核心控制器。
Struts应用程序处理用户请求的一般过程
ActionServlet类作为中心Servlet,负责处理所有到来的用户请求。当ActionServlet接收到一个用户请求时,将执行如下流程:
1.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的错误信息。
2.如果为ActionMapping配置了Form Bean,则获取相应范围内的ActionForm实例。如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
3.根据ActionMapping配置信息决定是否需要验证表单。如果需要验证,就调用ActionForm的validate()方法。
4.如果ActionForm的validate()方法返回null,或者返回一个不包含任何ActionMessage的ActionErrors对象,就表明表单验证成功,继续执行下一步。否则返回input属性指定的页面,并向用户显示ActionErrors集合中的错误信息。
5.ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,则先创建这个实例,然后调用Action的execute方法。
6.Action的execute方法返回 一个ActionForward对象,ActionServlet将请求转发到这个ActionForward对象指定的组件,通常是一个JSP组件或其他Action。
7.如果ActionForward对象指向一个JSP组件,则将该JSP生成的动态页面返回给用户;如果ActionForward对象指向的仍然是一个Action,则从第1步重新开始执行!

从上述过程可知ActionServlet类是Struts框架的内置核心控制器组件,它继承了javax.servlet.http.HttpServlet类。Struts的启动通常从加载ActionServlet开始。Web容器会在首次启动或Struts应用的第一个请求到达时加载ActionServlet。
ActionServlet第一次被加载后,其init()方法被调用。在init()方法中,Struts框架执行所有必要的初始化工作。

然后,Web容器将调用ActionServlet的doPost()或doGet()方法来处理用户请求,而它们实际上都是调用process()方法具体处理请求的.

Struts的中央控制器中写了Struts的控制器角色,在这篇介绍下Struts的视图!
Struts的视图组件:
Struts框架中的视图组件主要包括:
JSP页面。
ActionForm类
Struts自定义标记。
消息资源。
其中,ActionForm类是Struts框架的核心组件之一,是Struts的关键视图组件。在这篇文章中,将讨论ActionForm类及其作用。
ActionForm的作用机理:
ActionForm本质上是一种JavaBean,是专门用来传递表单数据的DTD(Data Transfer Object,数据传递对象)。它包括用于表单数据验证的validate()方法和用于数据复位的reset()方法。
Struts框架利用ActionForm对象来临时存放视图页面中的表单数据。例如,一个登录页面会有一个用户名输入框和一个密码输入框,以及用来提交登录请求的按扭。当用户提交登录请求后,Struts将 用户名和密码两个输入域的数据自动填充到相应的ActionForm对象中,然后控制层可以从该ActionForm对象中读取用户输入的表单数据,也可以把来自模型层的数据存放到ActionForm中,然后返回给视图显示。

ActionForm有(request)和(session)两种作用域(scope)。如果ActionForm的作用域设定为request,ActionForm实例将保存在request对象中,像其他保存在request对象中的属性一样,仅在当前请求范围内有效。如果ActionForm的作用域设定为session,那么ActionForm实例将被保存在session对象中,同一个ActionForm实例在整个HTTP会话中有效。
在Struts框架 中,ActionForm的作用机理如下图:
当验证ActionForm时,如果检测到一个或多个验证错误,Struts框架会把错误转发回配置文件struts-config.xml中<action>元素的input属性所指定的输入页面。

ActionForm的使用方法:
下面通过在(Struts重构)构建一个简单的基于MVC模式的JavaWeb的例子,来介绍一下ActionForm的正确使用,包括如何创建,配置和访问。
1.创建ActionForm
可以扩展Struts软件包的ActionForm类来创建具体的ActionForm。Struts软件包中的ActionForm类本身 是一个抽象类,在扩展的时候,为每一个要从HTML表单中捕获的输入域定义一个属性,使表单输入域与ActionForm属性一一对应,以使ActionForm能够捕获需要的表单输入。定义了具体的属性,就可以覆盖父类 的validate()和reset()方法,来实现具体的ActionForm验证规则和初始化方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值