下一个项目开发用structs 现在开始学习JAVA中的这个技术了! Struts 是一组相互协作的类servlet 和 JSP 标记它们组成一个可重用的 MVC 设计这个定义表示 Struts 是一个框架而不是一个库但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类 ● Client browser(客户浏览器) 来自客户浏览器的每个 HTTP 请求创建一个事件Web 容器将用一个 HTTP 响应作出响应 ● Controller(控制器) 控制器接收来自浏览器的请求并决定将这个请求发往何处就 Struts 而言控制器是以 servlet 实现的一个命令设计模式 strutsconfigxml 文件配置控制器 ● 业务逻辑 业务逻辑更新模型的状态并帮助控制应用程序的流程就 Struts 而言这是通过作为实际业务逻辑瘦包装的 Action 类完成的 ● Model(模型)的状态 模型表示应用程序的状态业务对象更新应用程序的状态ActionForm bean 在会话级或请求级表示模型的状态而不是在持久级JSP 文件使用 JSP 标记读取来自 ActionForm bean 的信息 ● View(视图) 视图就是一个 JSP 文件其中没有流程逻辑没有业务逻辑也没有模型信息 只有标记标记是使 Struts 有别于其他框架(如 Velocity)的因素之一 Struts 的控制器是将事件(事件通常是 HTTP post)映射到类的一个 servlet正如您所料 —— 控制器使用配置文件以使您不必对这些值进行硬编码时代变了但方法依旧 ActionForm 类 ActionForm 维护 Web 应用程序的会话状态 ActionForm 是一个抽象类必须为每个输入表单模型创建该类的子类当我说 输入表单模型 时是指 ActionForm 表示的是由 HTML 表单设置或更新的一般意义上的数据例如您可能有一个由 HTML 表单设置的 UserActionForm Struts 框架将执行以下操作 ● 检查 UserActionForm 是否存在如果不存在它将创建该类的一个实例 ● Struts 将使用 HttpServletRequest 中相应的域设置 UserActionForm 的状态没有太多讨厌的requestgetParameter() 调用例如Struts 框架将从请求流中提取 fname 并调用 UserActionFormsetFname() ● Struts 框架在将 UserActionForm 传递给业务包装 UserAction 之前将更新它的状态 ● 在将它传递给 Action 类之前Struts 还会对 UserActionForm 调用 validation() 方法进行表单状态验证 注这并不总是明智之举别的网页或业务可能使用 UserActionForm 在这些地方验证可能有所不同在 UserAction 类中进行状态验证可能更好 ● 可在会话级维护 UserActionForm Action 类 Action 类是业务逻辑的一个包装 Action 类的用途是将 HttpServletRequest 转换为业务逻辑要使用 Action 请创建它的子类并覆盖 process() 方法 ActionServlet (Command) 使用 perform() 方法将参数化的类传递给 ActionForm 仍然没有太多讨厌的 requestgetParameter() 调用当事件进展到这一步时输入表单数据(或 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 开始为一个接口后来却变成了一个类真是金无足赤) 第一个struct实例 <%@ taglib prefix=s uri=/strutstags %> 其中这样写的话是为了得到一个前缀哦! 那后面是可以这样来引用了 <s:form action=HelloWorld> Name: <s:textfield name=name /> <s:submit /> </s:form> 加一个前缀表示prefix! 提交到一个Action了哦 通过一个配置文件可以将这个action映射到一个JSP文件了 <struts> <include file=strutsdefaultxml/> <package name=tutorial extends=strutsdefault> <action name=HelloWorld class=tutorialHelloWorld> <result>HelloWorldjsp</result> </action> </package> </struts> 通过一个JAVA文件来作映射的哦! <h><s:property value=name /></h> 可以直接映射到这个JSP文件了! 来进行单元测试 单元测试好好玩的哦哈哈! 为某一个类中的一个方法进行单元测试运行的时候是运行为单元 测试! 上面的例子简单地演示了Web 应用程序的基本操作也即是页面输入>Action处理>再输出到另外页面 处理逻辑是集中到了一个Action了! 中间就是通过一个Action处理了! |