分享
 
 
 

Struts例子的设计分析

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

Struts例子的设计分析

原作者:Ted Husted 翻译:hatpdb

声明:这是一个演示如何建立一个struts应用程序的框架例子。这种规范与细节的实现来源于一个一个的工程。可能与你所从事的项目框架非常不同,但是也许有些共通之处。为了写更多的项目与软件,看一个例子也许理解这个标题,包括在Tom DeMarco的《结构分析与系统描述》(ISBN 0138543801),Steve McConnell的《实现代码》(ISBN 1556154844)。

Example Application - Sample 描述

问题定义

解决方案

需求分析

核心任务

其他要求

屏幕流例子

欢迎页

注册页

登陆页

菜单项

帐号

帐号描述

退出页

产品选择

应用程序接口

--------------------------------------------------------------------------------

1.0 问题定义

许多人们有许多邮件服务器上的邮件帐号,但是有些人不能够很好的治理这些多个帐号。私人和公众邮件服务器的登陆入口通常只是答应自己的用户能够登陆。

--------------------------------------------------------------------------------

2.0 解决方案

这些问题可以通过网站的登陆程序来解决。这个程序能够答应用户通过网络注册一系列的任何网络邮件服务器的邮件帐号与帐号的描述信息,同时也能够重新察看他们。

--------------------------------------------------------------------------------

3. 0 需求分析

3.1 核心任务

用用户名与用户密码注册一个新帐号

通过浏览器登陆进入已经注册的帐号

添加一个邮件帐号描述

察看一个邮件帐号的描述

退出登陆

3.2 其他需求

授权邮件服务器可以可以创建多个帐号。

帐号信息页面不能显示给没有授权的用户。

为了达到有广泛的用户群,这个程序应该能够满足使用不同语言的用户。

我们应当能够修改浏览的页面而不用重新编译应用程序。

--------------------------------------------------------------------------------

4.0 视图流程

4.1欢迎页面

注册一个新帐号{ Register }

登陆已经注册的帐号{ Login }

4.2 注册

显示注册属性表单;选项:保存,重设,和取消。

表单域: Username, PassWord, Password (confirm), Full Name, From Address, Reply To Address.

保存: 验证表单属性; 返回对用户的建议或者是存储显示登陆成功后的菜单

验证: 密码与重复密码必须相符合; 邮件的来源与回复地址都必须符合邮件地址的书写规则(必须包含@符号),回复地址是可选项,其他的都不能够为空同时还要符合其他的验证规则,用户名必须唯一。

假如注册成功: { Menu }

假如注册失败: { Register }

重置: 恢复编辑的内容

取消: 跳转到到 { Login. }

4.3 登陆

对登陆的用户显示表单信息,并且可以选择“保存”或者“重置”等的操作。

表单: 用户名(Username), 用户密码(Password)。

保存: 验证登陆信息,二者都是必须的,同时必须与注册时的信息相同(大小写敏感)。

取消: 取消编辑

4.4 主菜单

添加/编辑(Add/Edit)帐号描述 { Account }.

退出 { Welcome }.

4.5 帐号

显示表单编辑用户注册信息 (看 Register 视图)。

列表显示帐号的描述信息;可选项“编辑”或者“删除”帐号的描述信息 { Subscription }.

列表必须包含主机名字与其他属性(假如有多余的空间)

选择“添加”(Add)新的帐号描述信息{ Subscription }.

4.6 帐号描述信息 - 添加(Add),编辑(Edit),删除(Delete)

显示帐号描述属性的表单;可选项操作“添加”,“编辑”,“删除”(Add, Edit, Delete)。

可选项“添加”(Add),“编辑”(Edit) 执行任务:保存,重置,取消(Save, Reset, Cancel)。

可选项“删除”(Delete) 执行任务:“确认”,“取消”( Confirm, Cancel)。

表单域: 邮件主机(Mail Server), 用户名(Mail Username), 密码(Mail Password), 邮件服务器类型(Mail Server Type).

保存: 验证帐号描述属性;返回对用户的建议或者显示已经更新的帐号。

验证表单域:自动连接也许返回为空(false),所有其他的属性必须为非空。

假如保存成功:{ Account }。

假如保存失败:{ Subscription }。

重置:取消编辑。

取消:返回 { Account } 视图。

确认(删除):确认删除记录;显示更新的信息{ Account. }。

4.7 退出

让用户的登陆信息失效;返回到欢迎页面。

--------------------------------------------------------------------------------

5. 0 产品选择

我们选择Java的Struts框架来实现这个项目。

它的设计被描述为编写轻易,可扩展的Web应用程序;

由于采用MVC模式,使应用程序轻易维护;

采用jsp来实现显示部分,所有的修改操作都不需要重新编译程序;

支持用户通过Web程序自定义操作;

支持国际化应用程序。

--------------------------------------------------------------------------------

6.0 应用程序接口

6.1 属性

标签 组件 属性 类型 规则 域Domain

Username User username String !null unique

Password User password String !null

Full Name User fullname String !null

From Address

User fromAddress String !null *@*

Reply To Address

User replyToAddress String

- User subscriptions Hashtable

Mail Server

Subscription host String !null unique

Mail Username

Subscription username String !null

Mail Password Subscription password String !null

Mail Server Type Subscription type String "imap","pop3"

Password (repeat) registrationForm password2 String !null

--------------------------------------------------------------------------------

6. 3 表单组件(Form Beans)

<form-beans>

<!-- Logon form bean 登陆表单组件-->

<form-bean name="logonForm"

type="org.apache.struts.example.LogonForm"/>

<!-- Registration form bean 注册表单组件-->

<form-bean name="registrationForm"

type="org.apache.struts.example.RegistrationForm"/>

<!-- Subscription form bean 帐号描述组件-->

<form-bean name="subscriptionForm"

type="org.apache.struts.example.SubscriptionForm"/>

</form-beans>

--------------------------------------------------------------------------------

6.4 动作映射(Action Mappings)

6.4.1 核心执行任务映射例子

根据用户名与密码创建一个帐户

链接到“editRegistration.do?action=Create”

提交表单到“actoin=saveRegistration.do”

日志信息到帐户

打开“login.jsp” -- 输入信息文件为“login.do ”

提交输入表单从“action="logon.do" ”

添加邮件帐户的描述信息

链接到"/editSubscription.do?action=Create&user={user}"

username = Username

提交输入表单到"action="saveSubscription.do"

请参考linkUser 用户自定义标记.

编辑帐号描述信息

链接到"editSubscription.do?action=Edit&username={user}&host={host}"

username = Username

host = Mail Server

让改变与提交的到"saveSubscription.do"

用隐藏表单域:"action=Edit"

请参考linkSubscription 自定义标签。

删除帐号描述信息

链接到"editSubscription.do?action=Delete&username={user}&host={host}"

username = Username

host = Mail Server

让用户确认是否删除,假如删除提交到 action="saveSubscription.do"

用隐藏表单域:"action=Delete"

请参考linkSubscription 自定义标签。

退出

链接到"/logoff.do"

页面不许对没有授权的用户显示。

请参考 checkLogin 自定义标签。

--------------------------------------------------------------------------------

6.4.1 动作配置(Actual Configuration)

<action-mappings>

<!-- Process a user logon 处理用户登陆-->

<action path="/logon"

type="org.apache.struts.example.LogonAction"

name="logonForm"

scope="request"

input="/logon.jsp">

</action>

<!-- Edit user registration 编辑用户的注册信息-->

<action path="/editRegistration"

type="org.apache.struts.example.EditRegistrationAction"

name="registrationForm"

scope="request"

validate="false">

<forward name="sUCcess" path="/registration.jsp"/>

</action>

<!-- Save user registration 保存用户的注册信息-->

<action path="/saveRegistration"

type="org.apache.struts.example.SaveRegistrationAction"

name="registrationForm"

scope="request"

input="/registration.jsp"/>

<!-- Edit mail subscription 编辑邮件帐号描述-->

<action path="/editSubscription"

type="org.apache.struts.example.EditSubscriptionAction"

name="subscriptionForm"

scope="request"

validate="false">

<forward name="failure" path="/mainMenu.jsp"/>

<forward name="success" path="/subscription.jsp"/>

</action>

<!-- Save mail subscription 保存邮件帐号描述-->

<forward name="success" path="/editRegistration.do?action=Edit"/>

</action>

<!-- Process a user logoff 处理用户退出-->

<action path="/logoff"

type="org.apache.struts.example.LogoffAction">

<forward name="success" path="/index.jsp"/>

</action>

</action-mappings>

--------------------------------------------------------------------------------

6.3 自定义标签

6.3.1 应用程序标签

这个应用程序使用如下的自定义标签用“app”作为标示名:

App 标签- <%@ taglib uri="/WEB-INF/app.tld" prefix="app" %>

标签名称 描述

CheckLogin 检查是否有合法的用户登陆进入当前会话,假如没有用户的会话信息将会跳转到登陆页面。

LinkUser 产生URL编码对路径,包括用户选择的查询参数。

LinkSubscription 产生URL编码对路径,包括用户选择的查询参数。

--------------------------------------------------------------------------------

CheckLogin

属性名称 描述

没有属性

--------------------------------------------------------------------------------

LinkUser

属性名称 描述

page 包装用户信息到请求路径,例如:"/editSubscription.do?action=Create".

包装用户帐号信息到请求路径,例如:用户名为“user”:

<a href="/struts-example/editSubscription.do?action=Create&username=user">

--------------------------------------------------------------------------------

LinkSubscription

属性名称 描述

page 用户户的动作描述值,例如:"/editSubscription.do?action=Edit".

包装户户的动作描述值以及用户帐号信息到请求路径,例如:用户名为“user”和描述帐号为"mail.yahoo.com"":

<a href="/struts-example/editSubscription.do?action=Edit&username=user&host=mail.yahoo.com">

--------------------------------------------------------------------------------

6.3.2 Struts自定义标签

本应用程序使用以下Struts定义的标签库以及描述名:

Bean tags - <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

Html tags - <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

Logic tags - <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

--------------------------------------------------------------------------------

6.4 页面的缺省动作

页面 组件 动作

index.jsp None page="/editRegistration.do?action=Create"

page="/logon.jsp"

logon.jsp logonForm action="logon.do"

mainMenu.jsp user (session) page=/editRegistration.do?action=Edit"

page="/logoff.do"

registration.jsp user (session)

registrationForm action="saveRegistration.do"

page="/editSubscription.do?action=Delete"

page="/editSubscription.do?action=Edit"

page="/editSubscription.do?action=Create"

subscription.jsp user (session)

subscriptionForm action="saveSubscription.do"

--------------------------------------------------------------------------------

6.5 国际化

请参考< classes/org/apache/struts/example/ApplicationResource.properties >.

应用程序使用这个文件包含所有的错误描述,文字信息。

其他语言能够通过翻译这个文件来支持。

应用程序会自动选择这个属性文件来定位用户所使用的语言。

--------------------------------------------------------------------------------

Ted Husted 是一个自由软件者顾问于开发者培训,代码重构,和秘密的支持,要想获得更多的信息请访问网站 Husted dot Com 。

--------------------------------------------------------------------------------

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有