Struts核心功能

来源:互联网 发布:java进程占用cpu高 编辑:程序博客网 时间:2024/05/09 22:44
1 Struts核心功能1.1   Struts内部机制1.1.1 Struts系统结构

Struts体系结构实现了MVC设计模式的概念

Controller负责控制流程,由ActionServlet负责读取struts-config.xml,并使用ActionMapping来查找对应的Action

Model由系统状态Bean ActionForm和商业逻辑的JavaBean来构建;

View是由JSPstruts提供的自定义标签来实现

配置文件struts-config.xml:在该配置文件中,每一个Action的映射信息都通过一个action元素来配置。这些配置信息在系统启动时会被读入内存,每一个action元素都对应一个ActionMapping类的实例,供Struts在运行期间使用。

Controller控制器:该控制器主要由ActionServlet类和ActionMapping类来实现。ActionServlet类是Struts框架中的核心组件,主要负责接收HTTP请求信息。根据配置文件struts-config.xml的配置信息,把请求通过ActionMapping转发给适合的Action对象。Action对象负责调用模型的方法,更新表单组件ActionForm的状态,并帮助控制应用程序。

Model模型:该模型主要通过Action更新系统的状态、调用业务逻辑。在Struts中,系统的状态主要由ActionForm Bean体系,业务逻辑通常由JavaBeanEJB组件来实现。

View视图:主要有JSP建立。Struts自身包含了一组可扩展的自定义标签库Taglib可以简化创建用户视图的过程。

1.1.2 Struts工作流程

1ActionServlet接收用户请求

org.apache.struts.action.ActionServleStruts Controller中主要的部分,所有用户请求都会被发送到这里,所有其他处理也必须从这里经过。ActionServlet是从HttpServlet中继承过来的,是一个标准的Servlet

当一个ActionServlet接收到HTTP Request的时候,不管doGet()或者doPost()方法,都会调用process方法,将Request转发给RequestProcessor来处理。该函数代码如下所示:

         Protected void process(HttpServletRequest request, HttpServletResponse response)

                   throws IOException, ServletException {

                   Request.Utils.selectApplication(reques, getServletContext());

                   getApplicationConfig(request).getProcessor().process(request, response);

}

2ActionMapping映射配置文件

         org.apache.struts.action.ActionMappingActionConfig的子类,实质上是对struts-config.xml的一个映射,从中可以取得所有的配置信息。

3RequestProcessor代理ActionServlet处理请求

         ActionServletprocess()的最后一行代码中可以看出,RequestProcessorActionServlet的一个代理处理类org.apache.struts.action.RequestProcessor根据提交过来的URL,从ActionMapping中得到相应的ActionFormAction。然后将Request的参数对应到ActionForm中,进行Form验证。如果验证通过则调用Actionexecute()方法来执行Action,最终返回ActionForward

4Action响应处理类

         org.apache.struts.action.Action类是实现整个体系的核心部分,它在客户请求、界面表示和业务逻辑之间起到一个桥梁的作用。每一个Action都用来处理某一项任务,或者进行一个业务操作。

         Struts提供了多种Action供选择使用。普通的Action只能通过调用execute执行一项任务,而DispatchAction可以根据配置参数执行,而不是仅进入execute()函数,这样可以执行多种任务,如insertupdate等。LookupDispatchAction可以根据提交表单按钮的名称来执行函数。

5ActionForward转发

         ActionForward是对struts-config.xml中配置的mapping元素的forward属性的包装,对应于一个URL

         Actionexecute方法中,返回一个ActionForward类。Actionforward把配置文件中forward部分的信息包装起来,减小了应用程序和物理资源信息之间的耦合性。

6ActionForm保存用户表单信息

         ActionForm使用了ViewHelper模式,是对HTMLform的一个封装。其中包含有validate方法,用于验证form数据的有效性。对于一个复杂的系统,还可以采用DynaActionForm来构造动态的form,即通过预制参数来生产form。这样可以更灵活的扩展程序。

7ActionErrors保存错误信息

         ActionErrors是对错误信息的包装,一旦在执行action或者form.validate中出现异常,即可产生一个ActionError并最终加入到ActionErrors,在Form验证过程中,如果有Error发生,则会将页面重新导向至输入页,并提示错误。

处理流程:

(1)       检索和用户请求相匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效信息。

(2)       如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。

(3)       根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionFormValidate()方法。

(4)       如果ActionFormValidate()方法返回null或者一个ActionErrors对象,就表示表单验证成功。

(5)       ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action。如果Action实例不存在,就先创建这个实例,然后调用Actionexecute()方法。

(6)       Actionexecute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。

(7)       ActionForward对象指向的JSP组件生产动态网页,返回给客户。

 

 

原创粉丝点击