Scala 如何与核心 Servlet API 交互

来源:不详 责任编辑:栏目编辑 发表时间:2013-07-01 22:31 点击:

为了让一门语言适用于 “现实”,并且使其 “辉煌起来”,该语言必须能够服务于现实环境和应用程序。在这一期的 面向 Java 开发人员的 Scala 指南 系列中,Ted Neward 将介绍 Scala 在现实环境中的使用,即解释 Scala 如何与核心 Servlet API 交互,甚至可能会对其进行一些改正。

Scala 显然是一门有趣的语言,很适合体现语言理论和创新方面的新思想,但最终它要用在 “现实” 环境中,它必须能满足开发人员的某些需求并在 “现实” 环境中有一定的实用性。

了解 Scala 语言的一些核心功能之后,就能认识到 Scala 语言的一些灵活性,并能放心使用 Scala 创建 DSL.现在我们进入实际应用程序使用的环境,看看 Scala 如何适应环境。在本系列的新阶段中,我们将首先讨论大部分 Java? 应用程序的核心:Servlet API.

Servlet 回顾

回忆一下 Servlet 101 课程和教程,servlet 环境的核心实际上就是通过一个套接字(通常是端口 80)使用 HTTP 协议的客户机-服务器交换。客户机可以是任何 “用户-代理”(由 HTTP 规范定义),服务器是一个 servlet 容器。servlet 容器在我编写的一个类上查找、加载和执行方法,该类最终必须实现 javax.servlet.Servlet 接口。

通常,实际的 Java 开发人员不会编写直接实现接口的类。因为最初的 servlet 规范是用于为 HTTP 之外的其他协议提供一个通用 API,所以 servlet 命名空间被分为了两部分:

一个 “通用” 包(javax.servlet)

一个特定于 HTTP 的包(javax.servlet.http)

这样,将在一个称为 javax.servlet.GenericServlet 的抽象基类的通用包中实现一些基本的功能;然后在派生类 javax.servlet.http.HttpServlet 中实现其他特定于 HTTP 的功能,该类通常用作 servlet 实际 “内容” 的基类。HttpServlet 提供了一个 Servlet 的完整实现,将 GET 请求委托给一个将要被覆盖的 doGet 方法,将 POST 请求委托给一个将要被覆盖的 doPut 方法,依此类推。

Hello, Scala 与 Hello, Servlet

显然,任何人编写的第一个 servlet 都是普遍的 “Hello, World” servlet;Scala 的第一个 servlet 示例也是如此。回忆一下许多年之前介绍的 servlet 教程,当时基本的 Java “Hello, World” servlet 只是输出清单 1 所示的 HTML 响应:

清单 1. 预期的 HTML 响应

<HTML>
   <HEAD><TITLE>Hello, Scala!</TITLE></HEAD>
   <BODY>Hello, Scala! This is a servlet.</BODY>
</HTML>

用 Scala 编写一个简单的 servlet 来实现这个操作非常简单,而且这个 servlet 与其相应的 Java 形式几乎一样,如清单 2 所示:

清单 2. Hello, Scala servlet!

import javax.servlet.http.{HttpServlet,
  HttpServletRequest => HSReq, HttpServletResponse => HSResp}

class HelloScalaServlet extends HttpServlet
{
  override def doGet(req : HSReq, resp : HSResp) =
    resp.getWriter().print("<HTML>" +
      "<HEAD><TITLE>Hello, Scala!</TITLE></HEAD>" +
      "<BODY>Hello, Scala! This is a servlet.</BODY>" +
      "</HTML>")
}

注意,我使用了一些适当的导入别名来缩短请求的类型名称和相应类型;除此之外,这个 servlet 几乎与其 Java servlet 形式一样。编译时请记得在 servlet-api.jar(通常随 servlet 容器一起发布;在 Tomcat 6.0 发行版中,它隐藏在 lib 子目录中)中包含一个引用,否则将找不到 servlet API 类型。

这还准备得不够充分;根据 servlet 规范,它必须使用一个 web.xml 部署描述符部署到 Web 应用程序目录中(或一个 .war 文件中),该描述符描述 servlet 应该与哪个 URL 结合。对于这样一个简单的例子,使用一个相当简单的 URL 来配合它最容易,如清单 3 所示:

清单 3. 部署描述符 web.xml

<!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <servlet>
    <servlet-name>helloWorld</servlet-name>
    <servlet-class>HelloScalaServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>helloWorld</servlet-name>
    <url-pattern>/sayHello</url-pattern>
  </servlet-mapping>
</web-app>

从这里开始,我假设读者会在必要时调整/修改部署描述符,因为这跟 Scala 没有关系。

当然,格式良好的 HTML 与格式良好的 XML 非常相似;鉴于这一点,Scala 对 XML 字面值的支持使编写这个 servlet 简单

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Java编程语言的八大优点
    • JVM对象生命周期详细介绍
    • Java平台上的CRM系统
    • Java 算数测试小程序
    • Command(命令模式)
    • Java环境 使用Resin在NT环境下配置JSP环境
    • Java 一个简单的画图程序
    • Java 日历的小程序
    • Java 统计代码的小工具
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1