快速业务通道

纯 servlet:重新考虑视图 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
nessWriter 对象和 这些常量,servlet 实现了非常紧凑的 Java 风格的代码。

按照 MVC 的说法,servlet(这里的 UI 基本单元)构成了视图层和控制层 。对于 HTTP 这样的无状态接口,这是有意义的。对视图的请求和对数据更新的 请求采用同样的基本形式,这两者之间没有明确的区别。为了保持模块化,我在 一个 servlet 类中实现表单页面,在另一个 servlet 类中实现它的处理器。但 是,无论怎样对功能进行分隔,HTML 输出逻辑、servlet 参数的处理和页面流 逻辑都自我封闭的同级别的对象。虽然 MVC 对它们进行抽象是出于好意,但是 会导致功能混乱。

业务层的实现应该与视图层没有关联。关键是要有一个简单明了的业务接口 ,这样的话,UI 代码就可以只处理 UI 问题。(对于示例应用程序的业务层, 我在 Apache Derby 上构建了一个相当粗糙的 CRUD 接口。)

纯 servlet:重新考虑视图(3)

时间:2011-06-11 Jason Van Cleve

运行应用程序

这个 Web 应用程序是几乎完全自含的,但是可能需要修改 web.xml 描述符 中的一些环境属性,然后才能将它部署到 webapps 目录中。至少需要指定创建 嵌入式 Derby 实例和存储它的数据文件的位置。默认设置是 UNIX 路径 —— /var/derby/ —— 所以如果您运行 Linux,那么只需要创建这个目录(并允许 servlet 容器写这个目录)。用用户名 admin 和密码 password 登录这个站点 。在下载包的 README 文件中可以找到更多信息。

表单和它的处理器

现在该看看代码了。在锦标赛的第一轮开始之前,用户进入 Picks 页面(见 图 2),选择他们喜欢的球队。在此之后,他们可以通过只读输出的形式查看自 己和其他玩家的选择情况。

图 2. Picks 页面

纯 servlet:重新考虑视图 - 编程入门网

在生成这个页面时,Picks servlet 做的第一件事情是从业务层获取它的用 户对象(在这个系统中,是 Player),并执行一项安全检查:

PlayerManager playerMan = PlayerManager.GetInstance(); Player player = playerMan.select(session.getAttribute(P_PLAYER_ID), true); boolean readOnly = GetCutoffDateIsPassed() && ! player.getAdmin(); String playerID = request.getParameter(P_PLAYER_ID); if (playerID != null)   if (readOnly || player.getAdmin())    player = playerMan.select(playerID, true);   else    throw new ServletException("You may not view other players'' picks"       " until the cutoff date has passed: " + CutoffDate + ".");

这确保正常用户根据业务规则查看或编辑选择的球队。它还建立一些局部变 量,这些变量将决定页面的表现,尤其是 readOnly。接下来,建立一个 Team 对象数组,每个对象代表一支参赛球队。然后,调用一个方法,从数组生成按字 母表排序的 map,下拉控件需要用到这个 map:

TeamManager teamMan = TeamManager.GetInstance(); Team[] teams = teamMan.selectAll(); Map selectTeams = getDropDownMap(teams);

现在,开始输出:

out.printPreContent(null, out.SCRIPTFile ("/js/picks.js"));

这个方法输出页面的第一部分,包括完整的 HEAD 标记、BODY 开始标记和页 面顶部的徽标。注意指向一个 JavaScript 文件的 URL,它添加在 HEAD 中。您 可能会认为,在部署 WAR 文件时这种方法会失效,因为它将在 URL 的开头添加 上下文前缀 /madness。实际上,上下文前缀是动态地传递给 MadnessWriter 构 造函数的,然后构造函数自动地将它加在任何 URL 的开头,并加上斜线;如果 您的上下文是不确定的,那么这个特性就非常有用。

下一个调用输出主菜单:

out.printMenu(URL_PICKS);

通过传递要显示的页面的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号