Struts 的核心是一个MVC 风格的控制器。Struts 控制器搭起了Model 和View 之间的桥梁。框架也包括开发人员想用来开发可伸缩的、先进的应用系统的其他组件。Struts 是一个“隐藏支柱”的集合,帮助开发人员将分散的材料,如数据库和页面,结合成一个整体的应用系统。
用户通过超链接和HTML form 与Web 应用程序进行交互。超链接引导页面显示数据和其他内容,如文本和图像。表单通常通过一些定制动作向应用提交数据。
Hyperlinks/ActionForms---->HTML forms/ActionForms----->Custom actions/ActionForms
注:Struts 组件是通过一个XML文件进行配置的。实践中,配置项是Struts框架的有机组成部分。为了将它们糅合在一起,我们在讲述它们的时候,会展示每个组件的XML配置项。
超链接
对应用开发人员来说, 超链接是指向应用中某些资源的路径。这些资源可能是web 页面,或者是定制动作。超链接中也可以包含特殊的参数。在Struts 中,开发人员可以将超链接定义为一个ActionForward。
这些对象都有个逻辑名称和一个path 属性。这使得开发人员可以设置path,然后通过名称来引用ActionForward。ActionForward 通常在一个XML 文件中定义,这个配置文件在Struts 启动时载入。Struts 使用 XML 定义来创建Struts 配置,包括一个ActionForward的列表。可用来创建到欢迎页面链接的ActionForward 对象的XML 元素看起来可能像:
<forward
name="welcome"
path="/pages/index.jsp"/>
这个元素事实上是创建了一个 ActionForward JavaBean ,其name 属性设置为welcome,path 属性设置为/pages/index.jsp。
JSP 页面和其它组件就可以引用这里定义的welcome 转发。Struts 框架将查找welcome ActionForward bean 并获取其path 属性以完成这个超链接。这样开发人员可以改变链接的目标而不用改变所有引用该链接的相关组件。在很多Web 应用中,象这样的细节被硬编码到JSP 或 Java code 中,使维护变得困难并且容易发生错误。在Struts 应用中,这些细节可以通过应用配置来改变,而不用触及到具体的页面和Java 类。
HTML表单
Web 协议,即HTTP 和 HTML,提供了一个从表单中提交数据的机制,但却把数据的接收作为一个难题留给了开发人员。为此,Struts 框架提供了ActionForm 类。ActionForm设计来就是处理来自HTML 表单的输入:校验输入,重新显示表单以供用户进行修订(如果需要),以及伴随着相应的提示和错误信息。ActionForm 其实是具有一些用来来管理校
验和修订循环的标准方法的JavaBean。Struts 自动匹配JavaBean 属性和HTML 表单控件的属性。开发者只需定义ActionForm 类,余下的就交给Struts 。例如,这个类将自动用HTML 表单中同名的属性来组装username 域:
public final class LogonForm extends ActionForm
{
private String username = null;
public String getUsername() {
return (this.username);
}
public void setUsername(String username) {
this.username = username;
}
}
其它属性也会根据表单中的每个输入域被自动加入。这使得其它组件可以从标准的JavaBean 取得它们想要的属性。所以,完全不需要对HTTP 请求进行详细解析。
ActionForm 是按通常的JavaBean 类创建的。Struts 配置通过一系列描述符引用ActionForm 类: <form-beans> 和 <form-bean> 元素。<form-bean> 元素是框架用来识别和实例化ActionForm 对象的描述符:
<form-bean
name="articleForm"
type="org.apache.artimus.struts.Form"/>
Struts 配置中要列出它使用的ActionForm bean 的清单,并给每个bean 一个在应用中被引用时的逻辑名(name 属性)。
定制动作
HTML 表单使用 action 参数来告诉浏览器将数据送到何处。Struts 框架提供相应的Action 类来接收数据。框架会自动创建、组装、校验和最后处理Action 对象所对应的ActionForm。这样,Action 就可以直接从ActionForm bean 取得它需要的数据。比如下例:
public final class LogonAction extends Action {
public ActionForward perform(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
MyForm myForm = (MyForm) form;
// ...
return mapping.findForward("continue");
}
}
Action 根据返回到控制器的ActionForward 对象作出控制流的决定。这允许Action 选择一个逻辑名称,比如continue 或者 cancel,而不是具体的系统路径。
为保证可扩展性,控制器也传递当前的请求和响应对象。实际上, Action 可以做所有JavaServlet 可以做的事情。
除了ActionForward, ActionForm,和 Action 对象,Struts 控制器层还提供了几个特殊的组件,包括ActionMapping 和 ActionServlet。 Struts 也提供在控制器层的应用程序的本地化。
ActionMapping
在一个web 应用中,每个资源都必须通过URI 来进行引用。 资源包括HTML 页面,JSP页面,和定制动作。为了给定制动作一个URI, 或者说路径,Struts 框架提供了一个ActionMapping 对象。 象ActionForward 和 ActionForm 一样, ActionMapping 通常也在XML 配置文件中定义:
<action-mappings>
<action path="/logonSubmit"
type="app.LogonAction"
name="logonForm"
scope="request"
validate="true"
input="/pages/logon.jsp" />
</action-mappings>
这也允许将同一个Action 对象定义为不同的ActionMapping。例如,其中一个映射要求校验而另一个映射不要求校验。
ActionServlet
Struts ActionServlet 完全在幕后工作,它将其他组件绑定在一起。虽然它也可以子类化,但大多数Struts 1.0 的开发人员将ActionServlet 处理为一个黑盒:他们只是配置它,然后让它自己工作。
用Struts开发Web应用
要使用Struts 开发web 应用,开发人员将需要的超链接定义为ActionForward,HTML 表单定义为ActionForm,定制的服务器端动作定义为Action 类。
需要访问JDBC 和EJB 的开发人员也可通过Action 对象进行他们的工作。这样,表现层不需要和Model 层打交道。Struts Action 对象将收集View 需要的数据,然后将它们转发到表现页面。Struts 提供 JSP 标记库,它们将和JSP 页面一起使用,简化 HTML 表单和访问Action 要转发的其它数据。其它表现机制,比如Velocity templates, 也可用来访问
Struts 框架,以创建动态的web 页面。这种处理流程入下图:
Action Object ---(Collect data)---> JSP tags ---(Format data for display)---> JavaServer Page
分享到:
相关推荐
在Struts1中,控制器组件是整个架构的核心,它们负责协调用户请求、业务逻辑和视图之间的交互。本篇将深入探讨Struts1的控制器组件以及动态ActionForm的概念。 **Struts1控制器组件** 1. **ActionServlet组件**: ...
- **Struts控制器组件**:Struts框架中的控制器组件主要负责处理HTTP请求,并根据不同的请求类型调用相应的Action处理类。 - **开发流程**:在使用Struts开发Web应用时,通常会遵循以下步骤: - 定义应用需求 - ...
- **可编程组件**:Struts控制器组件是一组可编程的组件,可以帮助开发者定义应用如何与用户交互。 - **组件实例**:例如,通过Struts可以轻松定义超链接、表单以及自定义的动作,从而简化了与用户交互的过程。 #...
虽然不是视图组件的一部分,但Struts2的拦截器(Interceptor)在视图展现过程中也起着关键作用。拦截器可以处理用户请求,在Action执行前后进行一些预处理或后处理,比如权限验证、日志记录等。这使得视图组件能专注...
Struts控制器,特别是Action,是Struts框架中的核心组件,负责协调用户请求、业务逻辑与视图之间的关系。理解并熟练运用Action,能有效提高Java Web应用的开发效率和质量。通过配置Action,结合模型和视图,可以构建...
本课件主要讲解了Struts框架中的控制器组件及其相关概念。 **第二章 Struts 控制器** 1. **Struts 控制器组件** - **ActionServlet**: 是Struts框架的核心,它是Servlet的子类,处理HTTP请求。ActionServlet负责...
Struts控制器组件主要包括以下几部分: - **超链接和表单**:开发人员可以通过定义超链接和表单来实现用户与Web应用程序的交互。这些超链接和表单通常指向特定的动作。 - **定制动作**:每个动作都是一个实现了`...
2. **Struts控制器组件** 在这一部分,读者将了解到Struts的核心组件——ActionServlet和ActionForm,它们在处理用户请求和更新模型数据方面的作用。ActionServlet作为Web应用的入口点,负责接收请求并转发到相应的...
- **Struts控制器组件**:Struts的核心是其控制器组件,它负责处理HTTP请求并将数据传递给模型对象或视图组件。 - **Struts开发Web应用流程**: - 用户通过浏览器发送请求到服务器。 - 服务器将请求交给Struts控制...
5. Struts控制器组件(Controller) Struts的控制器是ActionServlet,它拦截HTTP请求,解析请求参数,调用相应的Action,然后根据Action的返回结果转发到对应的视图。 6. Struts模型组件(Model) 模型由ActionForm...
##### 4.2 Struts控制器组件 Struts的核心是一个强大的控制器组件,它负责接收用户的请求,调用相应的模型组件处理数据,并将结果转发给视图组件进行渲染。这一机制确保了应用程序各部分之间职责明确,易于扩展和...
1. **Struts控制器组件:** - 控制器是Struts框架的核心组件之一,负责接收用户的请求,并根据请求参数调用相应的业务逻辑处理类。 - **ActionServlet:** - 是Struts控制器的主要实现,它监听HTTP请求并将请求...