快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
态内容或者当前日期和时间的简单消息,它们带有 POST 形式的内容,检查内容并进行相应的响应。例如,可能 Web 应用程序需要知道使用者的身份,并询问其姓名:

清单 6. 挑战!

<HTML>   <HEAD><TITLE>Who are you?</TITLE></HEAD>   <BODY> Who are you? Please answer: <FORM action="/scalaExamples/sayMyName" method="POST"> Your first name: <INPUT type="text" name="firstName" /> Your last name: <INPUT type="text" name="lastName" /> <INPUT type="submit" /> </FORM>   </BODY> </HTML>

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

时间:2011-01-30 IBM Ted Neward

这个方法不会在任何用户界面设计大赛中夺冠,但是它达到了目的:这是一个 HTML 表单,它会将数据发送给一个新的 Scala servlet(绑定到 sayMyName 的相对 URL)。这些数据将根据 servlet 规范存储在一个名称-值对集合中,可通过 HttpServletRequest.getParameter() API 调用获得。在此调用中,我们将 FORM 元素的名称作为一个参数传递给 API 调用。

从 Java 代码直接转换相对容易一些,如清单 7 中的 servlet 所示:

清单 7. 响应(v1)

class NamedHelloWorldServlet1 extends HttpServlet {   def message(firstName : String, lastName : String) =    <HTML>     <HEAD><TITLE>Hello, {firstName} {lastName}!</TITLE></HEAD>     <BODY>Hello, {firstName} {lastName}! It is now {currentTime}.</BODY>    </HTML>   def currentTime =    java.util.Calendar.getInstance().getTime()   override def doPost(req : HSReq, resp : HSResp) =   {    val firstName = req.getParameter("firstName")    val lastName = req.getParameter("lastName")    resp.getWriter().print(message(firstName, lastName))   } }

但这缺少了我之前提到的消息分离的一些好处,因为现在消息定义必须显式使用参数 firstName 和 lastName;如果响应 get 中使用的元素个数超过 3 个或 4 个,情况就会变得比较复杂。此外,doPost 方法在将参数传递给消息进行显示之前,必须自行提取每一个参数 — 这样的编码很繁琐,并且容易出错。

一种解决方法是将参数提取和 doPost 方法本身的调用添加到一个基类,如清单 8 中的版本 2 所示:

清单 8. 响应(v2)

abstract class BaseServlet extends HttpServlet {   import scala.collection.mutable.{Map => MMap}   def message : scala.xml.Node;   protected var param : Map[String, String] = Map.empty   protected var header : Map[String, String] = Map.empty   override def doPost(req : HSReq, resp : HSResp) =   {    // Extract parameters    //    val m = MMap[String, String]()    val e = req.getParameterNames()    while (e.hasMoreElements())    {     val name = e.nextElement().asInstanceOf[String]     m += (name -> req.getParameter(name))    }    param = Map.empty ++ m    // Repeat for headers (not shown)    //    resp.getWriter().print(message)   } } class NamedHelloWorldServlet extends BaseServlet {   override def message =    <HTML>     <HEAD><TITLE>Hello, {param("firstName")} {para

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