首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Struts概述一

2012-10-06 
Struts概述1概述Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用MVC模式,能够很好地帮

Struts概述1

概述
Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用MVC模式,能够很好地帮助java 开发者利用J2EE开发Web应用。和其他的java架构一样,Struts 也是面向对象设计,将MVC模式"分离显示逻辑和业务逻辑"的能力发挥得淋漓尽致。Structs 框架的核心是一个弹性的控制层,基于如 Java Servlets,JavaBeans,ResourceBundles与XML等标准技术,以及 Jakarta Commons 的一些类库。Struts有一组相互协作的类(组件)、Servlet以及jsp tag lib组成。基于struts构架的web应用程序基本上符合JSP Model2的设计标准,可以说是一个传统 MVC设计模式的一种变化类型。

目的
Struts的目的是为了减少在运用MVC设计模型来开发Web应用的时间。

Struts的流程
服务器启动后,根据web.xml加载ActionServlet读取struts-config.xml文件内容到内存。   
以登陆为例:第一次进login.jsp会先实例化Form、把默认值(String默认为空字符串,整形默认为0)赋给表单元素。   输入用户名密码提交表单、提交到action属性的login.do,通过ActionServlet读struts-config.xml文件找到 action下的path属性找到.do,通过name属性找form-beans中的form-bean的name属性得到ActionForm的包名类名,先实例化form,把表单的值填充给form,调用form的validate方法验证、ActionErrors返回null表示验证通过,否则失败返回input指定的页面.验证通过会实例化Action,执行Action的excute方法。

控制器:ActionServlet的作用
Action,这个类通常由用户提供,该控制器负责接收来自ActionServlet的请求,并根据该请求调用模型的业务逻辑方法处理请求,并将处理结果返回给JSP页面显示。org.apache.struts.action.ActionServlet类实现的,这个类是javax.servlet.http.HttpServlet类的扩展。

Model部分:ActionForm和JavaBean
由ActionForm和JavaBean组成,其中ActionForm用于封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给Action,Action根据ActionFrom里面的请求参数处理用户的请求。   JavaBean则封装了底层的业务逻辑,包括数据库访问等。

View部分
该部分采用JSP实现。Struts提供了丰富的标签库,通过标签库可以减少脚本的使用,自定义的标签库可以实现与Model的有效交互,并增加了现实功能。

注意:
系统核心控制器,对应上图的ActionServlet。该控制器由Struts框架提供,继承HttpServlet类,因此可以配置成标注的Servlet。该控制器负责拦截所有的HTTP请求,然后根据用户请求决定是否要转给业务逻辑控制器。 业务逻辑控制器,负责处理用户请求,本身不具备处理能力,而是调用Model来完成处理。对应Action部分。


框架中所使用的组件   
ActionServlet 控制器   
ActionClass 包含事务逻辑   
ActionForm 显示模块数据   
ActionMapping 帮助控制器将请求映射到操作   
ActionForward 用来指示操作转移的对象   
ActionError 用来存储和回收错误   
Struts标记库 可以减轻开发显示层次的工作

Struts配置文件   
这是将struts组件结合在一起的东东:struts-config.xml。默认值   
\WEB-INF\struts-config.xml。
配置文件可以定义:   ?
全局转发   ?
ActionMapping类 帮助控制器将请求映射到操作   ?
ActionForm bean 显示模块数据   ?
JDBC数据源   
配置全局转发   
全局转发用来在JSP页之间创建逻辑名称映射。
转发都可以通过对调用操作映射的实例来获得。

看看具体每个组件的作用

配置全局转发
<global-forwards>   
<forward name="bookCreated" path="/BookView.jsp"/>   
</global-forwards>

配置ActionMapping
ActionMapping对象帮助进行框架内部的流程控制,它们可将请求URI映射到Action类,并且将Action类与ActionForm bean相关联。ActionServlet在内部使用这些映射,并将控制转移到特定Action类的实例。
如:
<action-mappings>   
<action path="/createBook"   type="BookAction"   name="bookForm"   scope="request"   input="/CreateBook.jsp">   
</action>   
<forward name=”failure” path=”/CreateBook.jsp”/>   
<forward name=”cancel” path=”/index.jsp”/>   
</action-mappings>


配置ActionForm Bean
<form-beans>   
<form-bean name="bookForm" type="BookForm"/>   
</form-beans>

配置JDBC数据源


ActionServlet类   
框架中的控制器组件是有org.apache.struts.action.ActionServlet类实现的,这个类是javax.servlet.http.HttpServlet类的扩展。   Struts controller基本功能是:   
1. 截获用户的Http请求   
2. 把这个请求映射到相应的Action类,如果这是此类收到的第一个请求,将初始化实例并缓存。   
3. 创建或发现一个ActionForm bean实例(看配置文件是否定义),然后将请求过程移植到bean.   
4. 调用Action实例的perform()方法并将ActioForm bean,Action Mapping对象,request和response对象传给它。

5.perform返回一个ActionForword对象,此对象连接到相应的jsp页面.

ActionMapping类   
将特定请求映射到特定Action的相关信息存储在ActionMapping中,ActionServelt将ActionMapping传送到Action类的perform()方法,Action将使用ActionMapping的findForward()方法,此方法返回一个指定名称的ActionForward,这样Action就完成了本地转发。若没有找到具体的ActionForward,就返回一个null。

public ActionForward findForward(String name)   
可在映射中动态添加ActionForward:   
public void addForward(ActionForward forward)   
可返回与映射关联的表单bean:   
public String getName()   
可返回映射的属性域(会话或请求)   
public String getScope()


Action类   
Action类真正实现应用程序的事务逻辑,它们负责处理请求。在收到请求后,ActionServlet会:   ? 为这个请求选择适当的Action   ? 如果需要,创建Action的一个实例   ? 调用Action的perform()方法   如果ActionServlet不能找到有效的映射,它会调用默认的Action类(在配置文件中定义)。如果找到了ActionServlet将适当的ActionMapping类转发给Action,这个Action使用ActionMapping找到本地转发,然后获得并设置ActionMapping属性。根据servlet的环境和被覆盖的perform()方法的签名,ActionServlet也会传送ServletRequest对象或HttpServletRequest对象。   所有Action类都扩展org.apache.struts.action.Action类。

ActionForm类   
框架假设用户在应用程序中为每个表单都创建了一个ActionForm bean,对于每个在struts-config.xml文件中定义的bean,框架在调用Action类的perform()方法之前会进行以下操作:   ? 在相关联的关键字下,它检查用于适当类的bean实例的用户会话,如果在会话中没有可用的bean,它就会自动创建一个新的bean并添加到用户的会话中。   ? 对于请求中每个与bean属性名称对应的参数,Action调用相应的设置方法。   ? 当Action perform()被调用时,最新的ActionForm bean传送给它,参数值就可以立即使用了。   ActionForm类扩展org.apache.struts.action.ActionForm类,程序开发人员创建的bean能够包含额外的属性,而且ActionServlet可能使用反射(允许从已加载的对象中回收信息)访问它。


ActionForward类   
目的是控制器将Action类的处理结果转发至目的地。   Action类获得ActionForward实例的句柄,然后可用三种方法返回到ActionServlet,所以我们可以这样使用findForward():   ? ActionServlet根据名称获取一个全局转发   ? ActionMappin实例被传送到perform()方法,并根据名称找到一个本地转发



错误处理   
struts提供了两个类来处理错误:ActionErrors和ActionError,它们都扩展org.apache.struts.action。ActionErrors保存着ActionError对象的集合,其中每一个代表了独立的错误信息。每个ActionError都包含了关键字,能够映射到资源文件中存储的错误信息,而这个资源文件是在ActionServlet初始化参数中指定的。




热点排行