Struts 学习 二

今天学习一点点关于AIX的命令,感觉和DOS命令,linux命令还是有些相似的。

主要还是学习了Struts 架构知识。又重新作了一遍最简单的用户注册页面。对于struts稍微有了一点感觉。

 

Struts应用有4个主要部件:

1. 一个Servlet Controller(由Struts提供,org.apache.action.ActionServlet,以下简称controller);

2.负责具体业务处理的Action类(org.apache.action.Action的基类);

3. Jsp页面(viewer);

4. 应用的业务逻辑封装(model),formbean。

Struts 的中心控制器(ActionServlet)接受所有来自客户端的请求,并根据系统的配置(Struts-config.xml)路由HTTP请求到其他Action对象(开发者实现的org.apache.struts.action.Action的子类),在这些Action对象中会进行所有的业务操作,比如插入一条订单,修改一条记录。处理完毕,由StrutsActionServlet转向到JSP页面,将处理结果返回给客户端。从这儿可以看出在StrutsActionServlet担任了重要的角色,由它控制所有的程序流转,是MVC三个相对独立的部分协调工作,提供系统的完善功能。

从下图可见StrutsMVC Model 2的一个典型应用。

Struts有如下的特点:

l        中心控制

l        处理流程和业务逻辑相分离

l        表示逻辑和业务逻辑相分离

l        数据和表示逻辑相分离

l        丰富的标签库

l        支持显示模板

l        内建对国际化的支持

l        内建对数据校验的支持

 

如下的类图分析:

 

 

  • ActionServlet
Struts 的控制器是将事件(事件通常是 HTTP post)映射到类的一个 servlet。正如您所料 -- 控制器使用配置文件以使您不必对这些值进行硬编码。
ActionServlet 是该 MVC 实现的 Command 部分,它是这一框架的核心。在一个Web应用中,应用服务器启动时将加载控制器。ActionServlet (Command) 创建并使用 Action、ActionForm 和 ActionForward。如前所述,struts-config.xml 文件配置该 Command。在创建 Web 项目时,您将扩展 Action 和 ActionForm 来解决特定的问题。文件 struts-config.xml 指示 ActionServlet 如何使用这些扩展的类。这种方法有几个优点:
应用程序的整个逻辑流程都存储在一个分层的文本文件中。这使得人们更容易查看和理解它,尤其是对于大型应用程序而言。
网页设计人员不必费力地阅读 Java 代码来理解应用程序的流程。
Java 开发人员也不必在更改流程以后重新编译代码。
可以通过扩展 ActionServlet 来添加 Command 功能。
  • ActionForm
ActionForm 维护 Web 应用程序的会话状态。ActionForm 是一个抽象类,必须为每个输入表单模型创建该类的子类。输入表单模型是指ActionForm 所表示的,由 HTML 表单设置或更新的一般意义上的数据。例如,您可能有一个由 HTML 表单设置的 UserActionForm。Struts 框架将执行以下操作:
检查 UserActionForm 是否存在;如果不存在,它将创建该类的一个实例。
Struts 将使用 HttpServletRequest 中相应的域设置 UserActionForm 的状态。没有太多讨厌的 request.getParameter() 调用。例如,Struts 框架将从请求流中提取 fname,并调用 UserActionForm.setFname()。
Struts 框架在将 UserActionForm 传递给业务包装 UserAction 之前将更新它的状态。
在将它传递给 Action 类之前,Struts 还会对 UserActionForm 调用 validation() 方法进行表单状态验证。
注:
这并不总是明智之举。别的网页或业务可能使用 UserActionForm,在这些地方,验证可能有所不同。在 UserAction 类中进行状态验证可能更好。
可在会话级维护 UserActionForm。
注:
struts-config.xml 文件控制 HTML 表单请求与 ActionForm 之间的映射关系。
可将多个请求映射到 UserActionForm。
UserActionForm 可跨多页进行映射,以执行诸如向导之类的操作。
  • Action
Action 类是业务逻辑的一个包装。Action 类的用途是将 HttpServletRequest 转换为业务逻辑。要使用 Action,请创建它的子类并覆盖 process() 方法。
ActionServlet (Command) 使用 perform() 方法将参数化的类传递给 ActionForm。仍然没有太多讨厌的 request.getParameter() 调用。当事件进展到这一步时,输入表单数据(或 HTML 表单数据)已被从请求流中提取出来并转移到 ActionForm 类中。
注:扩展 Action 类时请注意简洁。Action 类应该控制应用程序的流程,而不应该控制应用程序的逻辑。通过将业务逻辑放在单独的包或 EJB 中,我们就可以提供更大的灵活性和可重用性。
考虑 Action 类的另一种方式是 Adapter 设计模式。Action 的用途是“将类的接口转换为客户机所需的另一个接口。Adapter 使类能够协同工作,如果没有 Adapter,则这些类会因为不兼容的接口而无法协同工作。”(摘自 Gof 所著的 Design Patterns - Elements of Reusable OO Software)。本例中的客户机是 ActionServlet,它对我们的具体业务类接口一无所知。因此,Struts 提供了它能够理解的一个业务接口,即 Action。通过扩展 Action,我们使得我们的业务接口与 Struts 业务接口保持兼容。(一个有趣的发现是, Action 是类而不是接口)。Action 开始为一个接口,后来却变成了一个类。真是金无足赤。)
  • Error
UML 图还包括 ActionError 和 ActionErrors。ActionError 封装了单个错误消息。ActionErrors 是 ActionError 类的容器,View 可以使用标记访问这些类。ActionError 是 Struts 保持错误列表的方式。
 
 
以上是struts基本结构的类图分析,在struts中,还有一组重要的类,即动作映射类。如下图所示:
 
 
 
 
 
  • ActionMapping
输入事件通常是在 HTTP 请求表单中发生的,servlet 容器将 HTTP 请求转换为 HttpServletRequest。控制器查看输入事件并将请求分派给某个 Action 类。struts-config.xml 确定 Controller 调用哪个 Action 类。struts-config.xml 配置信息被转换为一组 ActionMapping,而后者又被放入 ActionMappings 容器中。(您可能尚未注意到这一点,以 s 结尾的类就是容器)
ActionMapping 包含有关特定事件如何映射到特定 Action 的信息。ActionServlet (Command) 通过 perform() 方法将 ActionMapping 传递给 Action 类。这样就使 Action 可访问用于控制流程的信息。
  • ActionMappings
ActionMappings 是 ActionMapping 对象的一个集合。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值