知识大全 JBuilder2005 Struts深度体验之概述

Posted 控制器

篇首语:吃的苦中苦,方为人上人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JBuilder2005 Struts深度体验之概述相关的知识,希望对你有一定的参考价值。

JBuilder2005 Struts深度体验之概述  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Struts是基于Model 实现的技术框架 Model 是经典的MVC(Model View Control)模型的Web应用变体 这个改变主要由于HTTP协议的无状态性引起的 Model 的目的和MVC一样 也是利用控制器来分离模型和视图 达到不同层间松散耦合的效果 提高系统灵活性 复用性和可维护性 在多数情况下 你可以将Model 与MVC等同起来     图 表示一个基于Java技术典型的MVC网络应用 从中可以看出MVC中的各个部分对应于J EE哪些实现技术    >   >    在利用Model 之前 我们把所有的表示逻辑和业务逻辑都集中在一起(如我们前两个专题中的login jsp) 有时也称这种应用模式为Model Model 的主要缺点就是紧耦合 复用性差 维护成本高     由于Struts就是基于Model 实现的框架 所以它底层的机制也是MVC 我们通过图 描述Struts的具体实现    >   >     .框架初始化    Struts框架总控制器(ActionServlet)完成所有初始化工作 总控制器是一个Servlet 它通过web xml配置成自动启动的Servlet 读取配置文件(struts config xml)的配置信息 为不同的Struts模块初始化相应的ModuleConfig对象 配置文件中的Action映射定义都保存在ActionConfig集合中 配置文件中其他配置信息分别保存在ControlConfig集合 FormBeanConfig集合 ForwardConfig集合和MessageResourcesConfig等集合中     要特别指出的是 初始化动作在Web容器启动时自动完成 初始化完成后 它将通过URL匹配映射截获所有以 do结尾的URL请求      .客户端发送一个HTTP请求    用户通过提交表单或调用URL向Web应用程序器提交一个请求 请求的数据用HTTP协议上传给Web服务器      .总控制器接截获这个请求并实例化Form Bean    控制器接收HTTP请求 并从ActionConfig中找出对应该请求的Action子类 如果没有对应的Action 控制器直接将请求转发给JSP或者静态页面 如果有对应的Action且这个Action有一个相应的Action Form ActionForm被实例化并用HTTP请求的数据填充其属性 然后保存在Servlet Context中(request或session中) 这样它们就可以被其它Action对象或者JSP调用     此外 还可以在ActionForm填充数据后还可以调用validate()进行数据有效性自检 并且可以返回一个包含所有错误信息的ActionErrors对象 如果ActionErrors不空 总控制器直接将请求返回到入口页面      .控制器将请求转交给具体的Action处理    控制器根据配置信息将请求切换到具体的Action 这个Form Bean也一并传给这个Action的execute()方法      .Action完成具体的业务逻辑操作    Action很简单 一般只包含一个execute方法 它负责执行相应的业务逻辑 如果需要 它也可能进行相应的数据检查 执行完成之后 返回一个ActionForward对象 控制器通过该ActionForward对象来进行转发工作      .Action返回目标响应对象给总控制器    Action根据业务处理的不同结果返回一个目标响应对象给总控制器 这个目标响应对象对应一个具体的JSP页面或另外一个Action      .总控制器将HTTP请求转换到目标响应对象中     总控制器根据业务功能Action返回的目标响应对象 将HTTP请求转换到这个目标响应对象中 一般情况下 它是一个具体的JSP页面      .目标响应对象将结果展现给用户    目标响应对象(JSP)将结果页面展现给用户     客户端发送一个HTTP请求 通过Struts框架最后获得一个HTTP响应 这一过程非常重要 它是理解Struts框架的重点 图 描述了Struts框架的结构 而图 通过一个活动图更具体描述接受请求直至返回响应的整个过程    >   >     Struts 新增功能     多模块的支持    我们知道 在Struts 中 只能在web xml中为ActionServlet指定一个Struts配置文件(struts config xml) 这对一个只需一两个人开发的小系统当然没有任何问题 但如果一个多人开发的大中型应用程序 问题就产生了 因为许多开发人员可能同时都需要修改Struts配置文件 这样肯定会造成一定程度的资源争夺 可能会出现彼此覆蓋的情况 这样势必会影响开发效率并引起开发人员的抱怨     在Struts 中 为了解决这个并行开发的问题 提出了两种解决方案     ·多个配置文件    支持多个配置文件 是指你能够为ActionServlet同时指定多个xml配置文件 文件之间以逗号分隔 请看下面web xml中关于多个struts配置文件的声明示例     代码清单 多个struts配置文件     <servlet>   <servlet name>action</servlet name>   <servlet class> apache struts action ActionServlet</servlet class>   <init param>   <param name>config</param name>   <param value>   /WEB INF/struts config xml /WEB INF/book struts config xml   </param value>   </init param>   <load on startup> </load on startup>   </servlet>    通过这种方法 你可以为每一个模块定义一个配置文件 由于项目一般按模块划分工作 这样就大大地减小了冲突的概率     ·独立的模块    但是 多个配置文件存在一个潜在的问题 不同的配置文件之间会产生冲突 因为在ActionServlet初始化的时候多个配置文件还是要合并到一起 比如 在struts config xml中配置了一个名为errorDbAccess的<exception> 而在book struts config xml中也配置了一个同样的<exception> 这样就产生冲突了     为了彻底解决这种冲突 Struts 中引进了模块(Module)的概念 一个模块就是一个独立的子系统 对应一个独立的配置文件 ActionServlet将不同模块的配置文件保存在各自独立的ModuleConfig对象中的     下面是两个独立模块的配置方式     代码清单 多模块配置方式     …   <init param>   <param name>config</param name>   <param value>/WEB INF/struts config xml</param value>   </init param>   <init param>   <param name>config/book</param name>   <param value>/WEB INF/book struts config xml</param value>   </init param>   …    通过这种方式 我们配置了两个模块 一个模块名为config 而另一个名为config/book     ·动态ActionForm支持    ActionForm表示HTTP页面表单的数据 可以将其看成视图页面数据的服务器映射 它负责保存视图中的数据供控制器或者其他视图使用 此外 它还负责数据有效性的验证 所以Struts 文档把它比作HTTP和Action之间的防火墙 这足以体现ActionForm在视图和控制器之间的过滤器作用     由于ActionForm对应于HTTP页面表单 所以随着页面的增多 你的ActionForm将会急聚增加 动态ActionForm(DynaActionForm)即为减少ActionForm的数目被设计出来 利用它你不必创建一个个具体的ActionForm类 只需要在配置文件中配置出所需的虚拟ActionForm 而由Struts框架通过配置文件动态创建这个ActionForm 例如 代码清单 通过指定<form bean>的type为 apache struts action DynaActionForm 来创建一个动态的ActionForm loginForm     代码清单 配置一个动态ActionForm     <form beans>   <form bean name= bookForm type= apache struts action DynaActionForm >   <form property name= bookId type= java lang String />   <form property name= isbn type= java lang String />   <form property name= bookName type= java lang String />   <form property name= author type= java lang String />   </form bean>   </form beans>    DynaActionForm将属性保存在一个Map对象中 同时提供相应的get(name)和set(name value)方法 其中参数name是要访问的属性名 而value是一个Object 例如要访问DynaActionForm中bookName的值 可以采用String bookName = (String)get( bookName )方法 由于bookName存储在Map中 所以要进行强制转换     由于DynaActionForm通过配置文件产生 并没有一个实体对象类 如果要对动态ActionForm对象进行校验需要使用DynaValidatorForm 它是DynaActionForm的子类 它能够提供动态ActionForm和动态表单输入验证的功能 检验规则在validation xml配置文件中定义 而这些规则的所对应的实现函数在validator rules xml文件中定义     ·通过配置方式实现异常处理    Struts 允许以配置方式进行异常处理 配置方式可以避免在Action中通过硬编码来处理异常 从而提高应用程序异常处理的灵活性和可维护性 一般情况下 一个异常处理对象可以通过以下步骤实现      . cha138/Article/program/Java/ky/201311/28937

相关参考

知识大全 JBuilder2005单元测试体验之测试配置

JBuilder2005单元测试体验之测试配置  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在

知识大全 JBuilder 2005代码审查功能体验(1)

JBuilder2005代码审查功能体验(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代

知识大全 JBuilder 2005代码审查功能体验(2)

JBuilder2005代码审查功能体验(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  命

知识大全 JBuilder2005单元测试之JUnit框架

JBuilder2005单元测试之JUnit框架  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 JBuilder2005单元测试之创建测试固件

JBuilder2005单元测试之创建测试固件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在

知识大全 用JBuilder 2005实现重构之认识重构

用JBuilder2005实现重构之认识重构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  为什

知识大全 JBuilder2005创建开发文档之编写注释

JBuilder2005创建开发文档之编写注释  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  可

知识大全 JBuilder2005实现重构之分布式重构

JBuilder2005实现重构之分布式重构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  由于

知识大全 JBuilder2005单元测试之捆绑多个用例

JBuilder2005单元测试之捆绑多个用例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  目

知识大全 JBuilder2005实现重构之重构前的侦察

JBuilder2005实现重构之重构前的侦察  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  有