成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Scala語(yǔ)言中的Scala Servlet

開(kāi)發(fā) 后端
本文介紹Scala語(yǔ)言中的Scala Servlet,即解釋 Scala 如何與核心 Servlet API 交互,甚至可能會(huì)對(duì)其進(jìn)行一些改正。

為了讓一門語(yǔ)言適用于 “現(xiàn)實(shí)”,并且使其 “輝煌起來(lái)”,該語(yǔ)言必須能夠服務(wù)于現(xiàn)實(shí)環(huán)境和應(yīng)用程序。在這一期的 面向 Java 開(kāi)發(fā)人員的 Scala 指南 系列中,Ted Neward 將介紹 Scala 在現(xiàn)實(shí)環(huán)境中的使用,即解釋 Scala 如何與核心 Servlet API 交互,甚至可能會(huì)對(duì)其進(jìn)行一些改正。

Scala 顯然是一門有趣的語(yǔ)言,很適合體現(xiàn)語(yǔ)言理論和創(chuàng)新方面的新思想,但最終它要用在 “現(xiàn)實(shí)” 環(huán)境中,它必須能滿足開(kāi)發(fā)人員的某些需求并在 “現(xiàn)實(shí)” 環(huán)境中有一定的實(shí)用性。

了解 Scala語(yǔ)言的一些核心功能之后,就能認(rèn)識(shí)到 Scala語(yǔ)言的一些靈活性,并能放心使用 Scala 創(chuàng)建 DSL.現(xiàn)在我們進(jìn)入實(shí)際應(yīng)用程序使用的環(huán)境,看看 Scala 如何適應(yīng)環(huán)境。在本系列的新階段中,我們將首先討論大部分 Java? 應(yīng)用程序的核心:Servlet API.

Servlet 回顧

回憶一下 Servlet 101 課程和教程,servlet 環(huán)境的核心實(shí)際上就是通過(guò)一個(gè)套接字(通常是端口 80)使用 HTTP 協(xié)議的客戶機(jī)-服務(wù)器交換。客戶機(jī)可以是任何 “用戶-代理”(由 HTTP 規(guī)范定義),服務(wù)器是一個(gè) servlet 容器。servlet 容器在我編寫的一個(gè)類上查找、加載和執(zhí)行方法,該類最終必須實(shí)現(xiàn) javax.servlet.Servlet 接口。

通常,實(shí)際的 Java 開(kāi)發(fā)人員不會(huì)編寫直接實(shí)現(xiàn)接口的類。因?yàn)樽畛醯?servlet 規(guī)范是用于為 HTTP 之外的其他協(xié)議提供一個(gè)通用 API,所以 servlet 命名空間被分為了兩部分:

一個(gè) “通用” 包(javax.servlet)

一個(gè)特定于 HTTP 的包(javax.servlet.http)

這樣,將在一個(gè)稱為 javax.servlet.GenericServlet 的抽象基類的通用包中實(shí)現(xiàn)一些基本的功能;然后在派生類 javax.servlet.http.HttpServlet 中實(shí)現(xiàn)其他特定于 HTTP 的功能,該類通常用作 servlet 實(shí)際 “內(nèi)容” 的基類。HttpServlet 提供了一個(gè) Servlet 的完整實(shí)現(xiàn),將 GET 請(qǐng)求委托給一個(gè)將要被覆蓋的 doGet 方法,將 POST 請(qǐng)求委托給一個(gè)將要被覆蓋的 doPut 方法,依此類推。

Hello, Scala 與 Hello, Servlet

顯然,任何人編寫的第一個(gè) servlet 都是普遍的 “Hello, World” servlet;Scala 的第一個(gè) servlet 示例也是如此。回憶一下許多年之前介紹的 servlet 教程,當(dāng)時(shí)基本的 Java “Hello, World” servlet 只是輸出清單 1 所示的 HTML 響應(yīng):

清單 1. 預(yù)期的 HTML 響應(yīng)

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

用 Scala 編寫一個(gè)簡(jiǎn)單的 servlet 來(lái)實(shí)現(xiàn)這個(gè)操作非常簡(jiǎn)單,而且這個(gè) servlet 與其相應(yīng)的 Java 形式幾乎一樣,如清單 2 所示:

清單 2. Scala Servlet!

  1. import javax.servlet.http.{HttpServlet,  
  2.   HttpServletRequest => HSReq, HttpServletResponse => HSResp}  
  3.  
  4. class HelloScalaServlet extends HttpServlet  
  5. {  
  6.   override def doGet(req : HSReq, resp : HSResp) =  
  7.     resp.getWriter().print("<HTML>" +  
  8.       "<HEAD><TITLE>Hello, Scala!</TITLE></HEAD>" +  
  9.       "<BODY>Hello, Scala! This is a servlet.</BODY>" +  
  10.       "</HTML>")  

注意,我使用了一些適當(dāng)?shù)膶?dǎo)入別名來(lái)縮短請(qǐng)求的類型名稱和相應(yīng)類型;除此之外,這個(gè) servlet 幾乎與其 Java servlet 形式一樣。編譯時(shí)請(qǐng)記得在 servlet-api.jar(通常隨 servlet 容器一起發(fā)布;在 Tomcat 6.0 發(fā)行版中,它隱藏在 lib 子目錄中)中包含一個(gè)引用,否則將找不到 servlet API 類型。

這還準(zhǔn)備得不夠充分;根據(jù) servlet 規(guī)范,它必須使用一個(gè) web.xml 部署描述符部署到 Web 應(yīng)用程序目錄中(或一個(gè) .war 文件中),該描述符描述 servlet 應(yīng)該與哪個(gè) URL 結(jié)合。對(duì)于這樣一個(gè)簡(jiǎn)單的例子,使用一個(gè)相當(dāng)簡(jiǎn)單的 URL 來(lái)配合它最容易,如清單 3 所示:

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

  1. <!DOCTYPE web-app  
  2.     PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
  3.     "http://java.sun.com/dtd/web-app_2_3.dtd"> 
  4. <web-app> 
  5.   <servlet> 
  6.     <servlet-name>helloWorld</servlet-name> 
  7.     <servlet-class>HelloScalaServlet</servlet-class> 
  8.   </servlet> 
  9.   <servlet-mapping> 
  10.     <servlet-name>helloWorld</servlet-name> 
  11.     <url-pattern>/sayHello</url-pattern> 
  12.   </servlet-mapping> 
  13. </web-app> 

從這里開(kāi)始,我假設(shè)讀者會(huì)在必要時(shí)調(diào)整/修改部署描述符,因?yàn)檫@跟 Scala 沒(méi)有關(guān)系。

當(dāng)然,格式良好的 HTML 與格式良好的 XML 非常相似;鑒于這一點(diǎn),Scala 對(duì) XML 字面值的支持使編寫這個(gè) servlet 簡(jiǎn)單得多(參閱 參考資料 中的 “Scala 和 XML” 一文)。Scala 不是在傳遞給 HttpServletResponse 的 String 中直接嵌入消息,它可以分離邏輯和表示形式(非常簡(jiǎn)單),方法是利用此支持將消息放在 XML 實(shí)例中,然后再傳遞回去:

清單 4. Hello, Scala Servlet!

  1. import javax.servlet.http.{HttpServlet,  
  2.   HttpServletRequest => HSReq, HttpServletResponse => HSResp}  
  3.  
  4. class HelloScalaServlet extends HttpServlet  
  5. {  
  6.   def message =  
  7.     <HTML> 
  8.       <HEAD><TITLE>Hello, Scala!</TITLE></HEAD> 
  9.       <BODY>Hello, Scala! This is a servlet.</BODY> 
  10.     </HTML> 
  11.  
  12.   override def doGet(req : HSReq, resp : HSResp) =  
  13.     resp.getWriter().print(message)  

Scala 的內(nèi)聯(lián)表達(dá)式求值工具使用 XML 字面值,這意味著能夠輕松地使 servlet 更有趣。例如,將當(dāng)前日期添加到消息中與將 Calendar 表達(dá)式添加到 XML 中一樣簡(jiǎn)單,不過(guò)增加了幾行 { Text(java.util.Calendar.getInstance()。getTime()。toString() ) }.這似乎顯得有點(diǎn)冗長(zhǎng),如清單 5 所示:

清單 5. Hello, timed Scala Servlet!

  1. import javax.servlet.http.{HttpServlet,  
  2.   HttpServletRequest => HSReq, HttpServletResponse => HSResp}  
  3.  
  4. class HelloScalaServlet extends HttpServlet  
  5. {  
  6.   def message =  
  7.     <HTML> 
  8.       <HEAD><TITLE>Hello, Scala!</TITLE></HEAD> 
  9.       <BODY>Hello, Scala! It's now { currentDate }</BODY> 
  10.     </HTML> 
  11.   def currentDate = java.util.Calendar.getInstance().getTime()  
  12.  
  13.   override def doGet(req : HSReq, resp : HSResp) =  
  14.     resp.getWriter().print(message)  

實(shí)際上,Scala 編譯器與 XML 對(duì)象消息一起整合到一個(gè) scala.xml.Node 中,然后在將它傳遞給響應(yīng)的 Writer 的 print 方法時(shí)將其轉(zhuǎn)換為一個(gè) String.

不要小看這一點(diǎn) — 表達(dá)形式從邏輯中分離出來(lái)完全在一個(gè)類內(nèi)部進(jìn)行。這條 XML 消息將進(jìn)行編譯時(shí)檢查,以確保語(yǔ)法正確和格式良好,并獲得一些標(biāo)準(zhǔn) servlet(或 JSP)不具備的好處。由于 Scala 可以進(jìn)行類型推斷,因此可以省略有關(guān) message 和 currentDate 的實(shí)際類型消息,使得這就像動(dòng)態(tài)語(yǔ)言 Groovy/Grails 一樣。初次使用效果不錯(cuò)。以上是Scala語(yǔ)言中的Scala Servlet一個(gè)小小的介紹,希望對(duì)大家有用。

【編輯推薦】

  1. Servlet Context的范圍
  2. 淺析Servlet 3.0 API的概念
  3. Servlet注釋與部署描述符
  4. Java Servlet和Servlet 3.0的新特性
  5. Servlet和JSP潛在的隱患
責(zé)任編輯:佚名 來(lái)源: 中國(guó)IT實(shí)驗(yàn)室
相關(guān)推薦

2020-10-31 17:33:18

Scala語(yǔ)言函數(shù)

2009-02-04 17:32:03

ibmdwJavaScala

2010-09-14 15:34:41

Scala

2010-09-14 13:22:17

Scala編程指南Scala

2009-07-08 14:51:10

2009-07-08 16:42:57

Scala語(yǔ)言設(shè)計(jì)

2010-08-18 08:53:53

Scala

2009-12-11 10:44:00

Scala講座函數(shù) scala

2009-11-16 17:04:46

Inside Scal

2009-08-21 16:17:25

ScalaTwitter API

2009-09-28 11:01:39

從Java走進(jìn)Scal

2009-02-06 09:08:04

Scala函數(shù)語(yǔ)言輕量級(jí)

2009-10-19 11:26:08

Scala循環(huán)數(shù)組

2009-12-09 09:15:47

從Java走進(jìn)ScalTwitter API

2011-09-20 15:01:40

Scala語(yǔ)言

2020-12-29 06:44:18

GoScala編程語(yǔ)言

2009-06-16 17:54:38

Scala類語(yǔ)法語(yǔ)義

2021-07-09 06:48:30

語(yǔ)言Scala編程

2009-09-02 17:56:31

ScalaWeb 2.0

2009-09-09 10:50:55

Scala例子Scala與Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91毛片在线观看 | www.亚洲精品 | 精品国产三级 | 精品1区2区| av国产精品 | 成人影院在线视频 | 国产精品毛片无码 | 欧洲视频一区二区 | 日韩视频中文字幕 | 亚洲成人国产综合 | 蜜月va乱码一区二区三区 | 国产精品一区二区三区久久久 | 亚洲一区二区三区四区五区中文 | 精品国产乱码久久久久久影片 | 日日射夜夜骑 | 97精品国产一区二区三区 | 中文字幕在线视频免费观看 | 久久一区二区三区电影 | 欧美精品1区2区3区 免费黄篇 | 色综合久久久久 | 欧美一级大片免费观看 | 2020亚洲天堂 | 国产成人一区二区三区久久久 | 国产欧美精品一区二区三区 | 91在线精品视频 | 成人免费视频 | 欧美炮房 | 成年免费大片黄在线观看岛国 | 亚洲精选一区二区 | 久久久www成人免费精品张筱雨 | 亚洲欧美一区二区三区情侣bbw | 日日爽| 天天综合久久 | 色.com| 国产精品国产成人国产三级 | 日韩在线播放第一页 | 欧美成人a | 国产精品久久久久久久毛片 | 成人免费观看网站 | 免费毛片网 | 成人精品一区亚洲午夜久久久 |