分享
 
 
 

毫无废话: 从0开始一点一滴用java开发自己的B/S--4.2

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

Struts - - - MVC 2 的一种实现

它是MVC Model 2 的开放源代码的实现

是一组相互协作的类、servlet 和 JSP 标记,它们组成一个可重用的设计

是一个框架,使用Struts也就决定了你的Application的框架

包含了丰富的标记库和独立于该框架工作的实用程序类,可以当成库使用

是Apache小组的一个子项目

Struts 概览

Client browser(客户浏览器)

来自客户浏览器的每个 HTTP 请求创建一个事件。Web 容器将用一个 HTTP request 作出响应。

Controller(控制器)

控制器接收来自浏览器的请求,并决定将这个请求发往何处。就 Struts 而言,控制器是以 servlet 实现的一个命令设计模式。struts-config.xml 文件配置控制器。

业务逻辑

业务逻辑更新模型的状态,并帮助控制应用程序的流程。就 Struts 而言,这是通过作为实际业务逻辑“瘦”包装的 Action 类完成的。

Model(模型)的状态

模型表示应用程序的状态。业务对象更新应用程序的状态。ActionForm bean 在会话级或请求级表示模型的状态,而不是在持久级。JSP 文件使用 JSP 标记读取来自 ActionForm bean 的信息。

View(视图)

视图就是一个 JSP 文件。其中没有流程逻辑,没有业务逻辑,也没有模型信息 -- 只有标记。标记是使 Struts 有别于其他框架(如 Velocity)的因素之一。

Struts框架中所使用的组件

ActionServlet 类

控制器组件是由org.apache.struts.action.ActionServlet类实现的,这个类是javax.servlet.http.HttpServlet类的扩展,它是这一框架的核心 。

控制器将事件(事件通常是 HTTP post)映射到类的一个 servlet。使用配置文件,不必对这些值进行硬编码。

ActionServlet (Command) 创建并使用 Action、ActionForm 和 ActionForward。初始化时读取 struts-config.xml 文件配置该 Command。在创建 Web 项目时,需要扩展 Action 和 ActionForm 来解决特定的问题。

Struts controller的基本功能

1. 截获用户的Http请求

2.把这个请求映射到相应的Action类,如果这是此类收到的第一个请求, 将初始化实例并缓寸

3. 创建或发现一个ActionForm bean实例(看配置文件是否定义),然后将请求过程移植到bean.

4. 调用Action实例的perform()方法并将ActioForm bean,Action Mapping对象,request和response对象传给它

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

ActionServlet配置

我们需要在web.xml中声明ActionServlet,并且将它配置成启动时进行加载

大多数情况下,标准的servlet就能够满足用户需要

<servlet>

<servlet-name>action</servlet-name>

<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

<init-param>

<param-name>config</param-name>

<param-value>/WEB-INF/struts-config.xml</param-value>

</init-param>

<init-param>

<param-name>debug</param-name>

<param-value>2</param-value>

</init-param>

<init-param>

<param-name>detail</param-name>

<param-value>2</param-value>

</init-param>

<load-on-startup>2</load-on-startup>

</servlet>

Action类

所有Action类都扩展org.apache.struts.action.Action类,并且覆盖类中定义的perform()方法。

Action 类是业务逻辑的一个包装 ,用途是将 HttpServletRequest 转换为业务逻辑。

当事件进展到这一步时,输入表单数据(或 HTML 表单数据)已被从请求流中提取出来并转移到 ActionForm 类中。 ActionForm 类被传递到Actino类,这一切都是自动完成的。

扩展 Action 类时要注意简洁。Action 类应该控制应用程序的流程,而不应该控制应用程序的逻辑。通过将业务逻辑放在单独的包或 EJB 中,我们就可以提供更大的灵活性和可重用性。

Action类必须以“线程安全”的方式进行编程,因为控制器会令多个同时发生的请求共享同一个实例,相应的,在设计Action类时就需要注意以下几点

不能使用实例或静态变量存储特定请求的状态信息,它们会在同一个操作中共享跨越请求的全局资源

如果要访问的资源(如JavaBean和会话变量)在并行访问时需要进行保护,那么访问就要进行同步

Action 的配置

我们需要在struts-config.xml中配置Action的信息

示例如下

<action path="/cautionsave"

type="org.apache.struts.webapp.example.CautionSaveAction"

name="cautionsaveForm"

scope="session"

input="/S63.jsp">

<forward name="select" path="/S64.jsp"/>

</action>

ActionForm 类

ActionForm类扩展org.apache.struts.action.ActionForm类,程序开发人员创建的bean能够包含额外的属性。

框架假设用户在应用程序中为每个表单都创建了一个ActionForm bean,维护 Web 应用程序的会话状态。

如果使用动态ActionForm类,则只需在struts-config.xml中进行相应的配置,框架可自动生成ActionForm bean

典型的ActionFrom bean只有属性的设置与读取方法(getXXX),而没有实现事务逻辑的方法。只有简单的输入检查逻辑,使用的目的是为了存储用户在相关表单中输入的最新数据,以便可以将同一网页进行再生,同时提供一组错误信息,这样就可以让用户修改不正确的输入数据。

Struts 框架将对ActionForm执行以下操作

检查 UserActionForm 是否存在;如果不存在,它将创建该类的一个实例。

将使用 HttpServletRequest 中相应的域设置 ActionForm 的状态。没有太多讨厌的 request.getParameter() 调用。

Struts 框架在将 ActionForm传递给业务包装 Action 之前将更新它的状态。

在将它传递给 Action 类之前,Struts 还会对 ActionForm调用 validation() 方法进行表单状态验证,但不提倡这种做法。

可在会话级维护 ActionForm 。

ActionForm 的配置

struts-config.xml 文件控制 HTML 表单请求与 ActionForm 之间的映射关系。

可将多个请求映射到 ActionForm 。

ActionForm可跨多页进行映射,以执行诸如向导之类的操作。

示例如下(非动态ActionForm的配置):

需要开发org.apache.struts.webapp.example.LogonForm.java文件。

LogonForm.java中只需定义私有的对应页面表单的域及其SetXXX()和GetXXX()方法。

<form-bean name="logonForm" type="org.apache.struts.webapp.example.LogonForm">

<form-property name=“userpwd" type="java.lang.String"/>

<form-property name=“username" type="java.lang.String"/>

</form-bean>

示例如下(动态ActionForm的配置):

如果需要利用框架的数据校验功能,则Type=“org.apache.struts.validator.DynaValidatorForm”

否则type=“org.apache.struts.action.DynaActionForm”

<form-bean name="cautionsaveForm" dynamic="true" type="org.apache.struts.validator.DynaValidatorForm">

<form-property name="payerClientNo" type="java.lang.String"/>

<form-property name="payerClientName" type="java.lang.String"/>

<form-property name="accountno" type="java.lang.String"/>

<form-property name="amount" type="java.lang.String"/>

<form-property name="intereststart" type="java.lang.String"/>

</form-bean>

ActionMapping 类

struts-config.xml 配置信息被转换为一组 ActionMapping,而后者又被放入 ActionMappings 容器中。

ActionMapping对象帮助进行框架内部的流程控制,它们可将特定请求URI映射到特定Action类,并且将Action类与ActionForm bean相关联。

ActionServlet (Command) 通过 perform() 方法将 ActionMapping 传递给 Action 类。这样就使 Action 可访问用于控制流程的信息。

Action将使用ActionMapping的findForward()方法,此方法返回一个指定名称的ActionForward,这样Action就完成了本地转发。

ActionError 类

ActionError 是 Struts 保持错误列表的方式,封装了单个错误消息。

ActionError类从不独立进行错误处理,它们总是被存储在ActionErrors对象中,View 可以使用标记访问这些类 。 如下所示:

<html:errors/>

Struts标记库

JSP视图组件所使用的 struts 标记库由四类标记组成

Bean标记:用来在JSP页中管理bean

逻辑标记:用来在JSP页中控制流程

HTML标记:用来生成HTML标记,在表单中显示数据,使用会话ID对URL进行编程

模板标记:使用动态模板构造普通格式的页

(关于他们的详细介绍一律略掉)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有