快速业务通道

面向Java开发人员的Scala指南 - Scala和servlet - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
m("lastName")}!</TITLE></HEAD>     <BODY>Hello, {param("firstName")} {param("lastName")}! It is now {currentTime}.     </BODY>    </HTML>   def currentTime = java.util.Calendar.getInstance().getTime() }

面向Java开发人员的Scala指南 - Scala和servlet(5)

时间:2011-01-30 IBM Ted Neward

这个版本使 servlet 显示变得比较简单(相对上一版本而言),而且增加了一个优点,即 param 和 header 映射保持不变(注意,我们可以将 param 定义为一个引用请求对象的方法,但这个请求对象必须已经定义为一个字段,这将引发大规模的并发性问题,因为 servlet 容器认为每一个 do 方法都是可重入的)。

当然,错误处理是处理 Web 应用程序 FORM 的重要部分,而 Scala 作为一种函数性语言,保存的内容都是表达式,这意味着我们可以将消息编写为结果页面(假设我们喜欢这个输入),或编写为错误页面(如果我们不喜欢这个输入)。因此,检查 firstName 和 lastName 的非空状态的验证函数可能如清单 9 所示:

清单 9. 响应(v3)

class NamedHelloWorldServlet extends BaseServlet {   override def message =    if (validate(param))     <HTML>      <HEAD><TITLE>Hello, {param("firstName")} {param("lastName")}!        </TITLE></HEAD>      <BODY>Hello, {param("firstName")} {param("lastName")}!          It is now {currentTime}.</BODY>     </HTML>    else     <HTML>      <HEAD><TITLE>Error!</TITLE></HEAD>      <BODY>How can we be friends if you don''t tell me your name?!?</BODY>     </HTML>   def validate(p : Map[String, String]) : Boolean =   {    p foreach {     case ("firstName", "") => return false     case ("lastName", "") => return false     //case ("lastName", v) => if (v.contains("e")) return false     case (_, _) => ()    }    true   }   def currentTime = java.util.Calendar.getInstance().getTime() }

注意,模式匹配可以使编写比较简单的验证规则变得很容易。利用模式匹配绑定到原始值(比如上一个例子),或者绑定到一个本地变量(比如我们要排除任何姓名中有 “e” 的人,比如上一个注释)。

显然,还有事情需要做!困扰 Web 应用程序的典型问题之一是 SQL 注入攻击,它由通过 FORM 传入的未转义 SQL 命令字符引入,并且在数据库中执行之前连接到包含 SQL 结构的原始字符串。使用 scala.regex 包中的正则表达式支持,或者一些解析器组合子(在本系列最后三篇文章中讨论)可以确认 FORM 验证是否正确。事实上,整个验证过程会提交给使用默认验证实现的基类,该验证实现默认情况下只返回 true(因为 Scala 是函数性语言,所以不要忽略好的对象设计方法)。

结束语

虽然 Scala servlet 框架的功能不像其他一些 Java Web 框架的那样完整,但是我这里创建的这个小 Scala servlet 有两个基本用途:

展示以有趣的方式利用 Scala 的功能,使 JVM 编程更简单。

简单介绍将 Scala 用于 Web 应用程序,这自然会引入 “lift” 框架(参见 参考资料 小节)。

本期到此结束,我们下一期再见!

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号