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

Scala語言中的Scala Servlet

開發 后端
本文介紹Scala語言中的Scala Servlet,即解釋 Scala 如何與核心 Servlet API 交互,甚至可能會對其進行一些改正。

為了讓一門語言適用于 “現實”,并且使其 “輝煌起來”,該語言必須能夠服務于現實環境和應用程序。在這一期的 面向 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 響應

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

用 Scala 編寫一個簡單的 servlet 來實現這個操作非常簡單,而且這個 servlet 與其相應的 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>")  

注意,我使用了一些適當的導入別名來縮短請求的類型名稱和相應類型;除此之外,這個 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

  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> 

從這里開始,我假設讀者會在必要時調整/修改部署描述符,因為這跟 Scala 沒有關系。

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

清單 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 的內聯表達式求值工具使用 XML 字面值,這意味著能夠輕松地使 servlet 更有趣。例如,將當前日期添加到消息中與將 Calendar 表達式添加到 XML 中一樣簡單,不過增加了幾行 { Text(java.util.Calendar.getInstance()。getTime()。toString() ) }.這似乎顯得有點冗長,如清單 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)  

實際上,Scala 編譯器與 XML 對象消息一起整合到一個 scala.xml.Node 中,然后在將它傳遞給響應的 Writer 的 print 方法時將其轉換為一個 String.

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

【編輯推薦】

  1. Servlet Context的范圍
  2. 淺析Servlet 3.0 API的概念
  3. Servlet注釋與部署描述符
  4. Java Servlet和Servlet 3.0的新特性
  5. Servlet和JSP潛在的隱患
責任編輯:佚名 來源: 中國IT實驗室
相關推薦

2020-10-31 17:33:18

Scala語言函數

2009-02-04 17:32:03

ibmdwJavaScala

2010-09-14 13:22:17

Scala編程指南Scala

2010-09-14 15:34:41

Scala

2009-07-08 14:51:10

2009-07-08 16:42:57

Scala語言設計

2010-08-18 08:53:53

Scala

2009-12-11 10:44:00

Scala講座函數 scala

2009-11-16 17:04:46

Inside Scal

2009-08-21 16:17:25

ScalaTwitter API

2009-09-28 11:01:39

從Java走進Scal

2009-02-06 09:08:04

Scala函數語言輕量級

2009-10-19 11:26:08

Scala循環數組

2009-12-09 09:15:47

從Java走進ScalTwitter API

2011-09-20 15:01:40

Scala語言

2020-12-29 06:44:18

GoScala編程語言

2009-06-16 17:54:38

Scala類語法語義

2021-07-09 06:48:30

語言Scala編程

2009-09-02 17:56:31

ScalaWeb 2.0

2009-09-09 10:50:55

Scala例子Scala與Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人影院 | 午夜私人影院在线观看 | 色综合久| 91精品国产91久久久久久最新 | 亚洲国产激情 | 毛片网在线观看 | 国产乱码精品一区二区三区中文 | 国产精品电影在线观看 | 欧美日韩精品久久久免费观看 | 久久久91 | 黄色网址在线播放 | 亚洲视频一区二区三区 | 久久久这里都是精品 | 精品一区二区在线观看 | 成人免费视频播放 | 国产精品久久国产精品久久 | 欧美专区在线 | 一区亚洲| 日韩欧美在线视频一区 | 国产精品久久久爽爽爽麻豆色哟哟 | 一区二区三区四区不卡 | 黄色网络在线观看 | 免费一区二区三区在线视频 | caoporn视频在线 | 一区在线观看 | 日本一区二区高清不卡 | 在线日韩中文字幕 | 日本精品视频一区二区三区四区 | 日韩一区二区三区在线观看 | 性高湖久久久久久久久 | 天天拍天天色 | 久久久久国产精品 | 色婷婷综合网 | 亚洲一区二区三区免费视频 | 男人亚洲天堂 | 国产午夜在线 | 亚洲高清在线观看 | 日韩欧美国产不卡 | 男人天堂网址 | 久久综合九九 | 欧美色综合天天久久综合精品 |