當前位置:首頁 » 網頁前端 » scalaweb
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

scalaweb

發布時間: 2022-02-11 04:28:28

Ⅰ Scala語言的主要應用領域與作用

Scala的特性
1.面向對象特性
Scala是一種純面向對象的語言,每一個值都是對象。對象的數據類型以及行為由類和特徵(Trait)描述。類抽象機制的擴展有兩種途徑。一種途徑是子類繼承,另一種途徑是靈活的混入(Mixin)機制。這兩種途徑能避免多重繼承的種種問題。

2.函數式編程
Scala也是一種函數式語言,其函數也能當成值來使用。Scala提供了輕量級的語法用以定義匿名函數,支持高階函數,允許嵌套多層函數,並支持柯里化。Scala的CaseClass及其內置的模式匹配相當於函數式編程語言中常用的代數類型(AlgebraicType)。

更進一步,程序員可以利用Scala的模式匹配,編寫類似正則表達式的代碼處理XML數據。在這些情形中,順序容器的推導式(comprehension)功能對編寫公式化查詢非常有用。

由於JVM不支持尾部遞歸,Scala也不能完全支持尾部遞歸優化。不過,在簡單的情況下,Scala編譯器可以把尾部遞歸優化成循環。

4.靜態類型
Scala是具備類型系統,通過編譯時的檢查,保證代碼的安全性和一致性。類型系統具體支持以下特性:

泛型類,型變注釋(VarianceAnnotation),類型繼承結構的上限和下限,把類別和抽象類型作為對象成員,復合類型,引用自己時顯式指定類型,視圖,多態方法。

5.擴展性
Scala的設計承認一個事實,即在實踐中,某個領域特定的應用程序開發往往需要特定於該領域的語言擴展。Scala提供了許多獨特的語言機制,可以以庫的形式輕易無縫添加新的語言結構:

任何方法可用作前綴或後綴操作符,可以根據預期類型自動構造閉包。聯合使用以上兩個特性,使你可以定義新的語句而無須擴展語法也無須使用宏之類的元編程特性。

5.使用Scala的框架
Lift是一個開源的Web應用框架,旨在提供類似RubyonRails的東西。因為Lift使用了Scala,所以Lift應用程序可以使用所有的Java庫和Web容器。

scala語言主要應用領域
cala運行於JVM之上,並且它可以訪問任何的java類庫並且與java框架進行互操作,scala也大量重用了java類型和類庫。

大數據的開發語言是Scala的原因:

1:大數據的本身是計算數據,而Scala即有面向對象組織項目工程的能力,又有計算數據的功能。

2:現在大數據事實上的計算標准框架Spark,它是用Scala開發的,因為計算數據,Scala它是函數式編程,它實現演算法非常簡潔優雅。

例:kafka,它是一個消息中間件,如果外部數據要流進大數據中心,我們一般都要用kafka作適配器,那如果大數據中心的數據流到外部,也是用kafka(如Spark計算的數據要交給HBASE或MySql,期間我們都會用kafka),很多的大數據組件都是用的Scala編寫的,所以,如果你想成為一個較高級的大數據開發高手,你一定要掌握Scala。

Ⅱ 誰能說說 scala 和 python 的區別,有木有必要學習 scala

學 Scala 可以發現更大的世界,之後會感覺其他語言的特性都不會太陌生,感覺尤其是函數式編程和類型系統。
不過身邊會 Scala 的都是搞 spark 的,或者曾經搞過 spark 的。
如果 Scala 都精通了,學 Python 也就是看下語法熟練下的事。
Scala 與函數式編程是信仰,如果面試遇到信仰相同的面試官可能有加分。

Ⅲ scala中web開發框架,哪一個能最後一統scala天下

1. 不支持j2ee
Play號稱基於nio的event驅動,自行實現了http協議,比之傳統j2ee應用性能高出無數雲雲,因此,使用Play,無需用到j2ee容器,也沒有servlet/jsp的概念,只需要jvm,然後run就可以了。看上去的確很美好,然後一個很基本的事實是,除了個人的玩具應用,有哪個企業的IT管理員會願意在已經熟悉的j2ee環境上在出現一個新的環境?更基本的事實是,從管理的角度來說,play提供的容器,能夠達到j2ee規范的高度嗎?更更基本的事實是,你能夠相信它的安全性嗎?雖然tomcat也會有安全漏洞,雖然jetty也不見得就真的安全,雖然websphere和weblogic都是要花錢的,但是比起他們來,你會更相信play的容器嗎?我相信99%的答案是No。
(當然,有一個第三方插件項目在試圖幫助Play部署war,但就其官方的態度而言,我是完全無法贊同的,而且,那個插件項目,遠未到成熟的地步,因為Play從根子上就沒有打算遵循j2ee規范)

2. 沒有服務端session
Play的口號是stateless,但我並不認為這個可以成為不提供服務端session的理由,現實生活中大部分的網站還是需要session的,你哪怕提供一個插件來提供session功能也好啊,可是很遺憾,沒有,官方的文檔上說,請自行處理。。。自行處理。。。這個世界上還有程序員有興趣去實現一個session管理嗎?

3. 編譯成函數的模板
Play認為這是它的優點,靜態編譯的模板,類型安全的參數傳遞。但我卻被它徹底的打敗了,為了向被各個頁面復用的page top傳遞幾個參數,我需要在每一個直接引用到它的模板,以及每一個間接引用到它的模板上添加所有的參數以便傳遞,因為,調用模板其實就是調用函數啊,我必須傳遞參數啊。。。當然,幸運的是,我們用的是scala,scala有implict參數定義,oh my God,我不需要傳遞參數了。。。可惜的是,我仍然需要在每一個層次的模板上聲明必須的參數,這是怎樣的一種精神,這是精神分裂的前兆。。。更加麻煩的是國際化與本地化處理,
Play提供了一個getmessage的函數讓我們可以取得本地化字元串並且填入參數,功能很簡單,當然,這並不妨礙我直接使用JDK的國際化API,因此這倒算不上它有多罪惡,然而,在表現層,或者說view層,當我希望根據locale選擇一個不同的模板文件的時候,問題就麻煩了,靜態編譯的模板,類型安全。。。似乎我需要用到反射才能夠根據locale選擇模板了。。。讓我去死吧。。。

4. Comet
Play內置Comet支持,看上去非常方便,然而當我終於搞明白它是如何實現comet的時候,我實在忍不住噴了滿屏的口水,再放聲大笑。。。這是整個Play框架中最富娛樂精神的實現,絕對可以入圍2012年度最佳編程娛樂獎的評選活動。通常Comet的實現有很多種辦法,典型的無非是ajax based long pulling, iframe based long pulling, websocket based server side pushing,你們還能想出其他的辦法嗎?Play給出了一個絕佳的方案,http chunk based server side pushing via iframe。不明白http chunk的同學請自行google,我簡單的解釋一下就是,在iframe中發起一個訪問,然後服務端不會關閉http連接,而是返回基於chunk的應答,這樣,客戶端瀏覽器就會意識到伺服器的應答沒有結束而一直保持連接,服務端如何有事件發生,就返回一個chunk,通常是一段javascript代碼,然後瀏覽器收到一個chunk,在等待下一個chunk的同時,執行javascript,實現了一個完美的server push機制。Wow,看上去非常perfect哈,不過請大家想像一個瀏覽器在處理一個長連接的時候會是怎樣的動作?答案是瀏覽器會顯示沙漏圖標提示網頁正在下載中,即使它是一個隱藏的iframe也是一樣,於是,你就會發現,你的瀏覽器上會有一個轉圈的圖標在不停的轉啊轉啊,然後像我這樣愚蠢的用戶就會手賤的點停止,嗯,很好,不轉了,整個世界清靜了,太清靜啦,瀏覽器不再接受服務端的response了,連接被關閉了,comet也over了。。。

5. 文檔支持
Play試圖提供一個完整的web開發的生態環境,可是如此偉大的目標,顯示不是官網上那點step by step性質的文檔可以支持的,可是我找不到更多的文檔了,官網提供的文檔足夠我開發一個玩具應用了,然而,也僅此而已了。

Ⅳ scala怎樣部署到idea中

一.環境配置:
1.1 安裝JDK,配置環境變數。

1.2下載Scala,並配置環境變數

1.3安裝playframe2框架:
下載play並配置環境變數
或者點擊browse all versions選擇更多版本,我安裝的是play2.2.4。
查看運行是否安裝成功,控制台下運play

二.下面嘗試新建一個工程
2.1控制台下play new firstweb(firstweb是你想建工程的文件名)

2.2輸入工程名firstweb

2.3 選擇開發語言1為scala, 2為java

2.4 創建成功,我們進入文件根目錄,可以看到創建的文件目錄。
app/ 包含應用核心:分為models,controllers和views目錄。
conf/包含應用的所有配置:application.conf應用主配置,routes定義url路由規 則,messages國際化用。
lib/ 包含應用依賴的標准.jar文件。
public/包含所有外部可訪問的資源:js,css和image。
test/包含所有應用的測試程序。

2.5 運行
進入firstweb目錄,輸入play run
在瀏覽器輸入http://localhost:9000/

Ⅳ v2ex 有用Scala做web開發的嗎

pp還會流行很長一段時間,但web將是最終的形態.
apple一向是著眼於現有技術逐步加以改進. 所以它們重點還是在當前流行的app形態上, web他們則只是在靜觀其變,等待時機.
google喜歡著眼於科幻一般的未來, 所以他們已經在試圖融合app和web的界面和體驗, 並最終讓web統一世界(Android L, chrome

Ⅵ 最近工作會用scala,請指條明路,該怎麼解決

學唄!

經常有人問應該怎樣學習Scala編程語言。通常的回答是看Scala的相關書籍,並學習Scala視頻課程。但是澄清一點,即使你最終學會了Scala編程,也並不意味著你是最高效地掌握了Scala。

1、Scala書籍

一提Scala編程書籍,最容易提到的是《Programming in Scala》,這本書是由Martin Odersky、Lex Spoon、Bill Venners三位作者合寫的書籍。其中,Martin Odersky是Scala語言的發明人。最近該書發布了第三版,內容覆蓋了Scala 2.12版的新特性,但是在內容上和第一版差別不大。盡管如此,這本書可能是有關Scala編程的最全面、最權威的指導書籍。在這本書中,Martin不僅講述了該如何使用,而且還有他在語言上會這么設計的解釋。這本書接近900頁,閱讀不算難,建議三周學完它。這本書主要聚焦於Scala的語言特性,並沒有深入到Scala的整個生態系統中。

這本書《Moder Web Development with Scala》就是基於以上觀點編寫的Scala學習書籍。作者Denis Kalinin。該書少量介紹了Scala語言本身,主要聚焦於怎樣使用Play框架構建Web應用,使用ScalikeJDBC庫訪問資料庫,使用Scala Future和Akka Actor執行非同步任務,使用MacWire連接依賴,使用BCrypt庫實現對用戶的授權認證,使用ScalaTest和Mockito測試自己的Scala代碼,還有使用Gradle和SBT構建和管理項目,最後講述了怎樣集成最新的前端工具,比如Webpack和React。

Ⅶ scala 交互模式 代碼怎麼提示

Scala提供了很多學習材料幫助你學習核心語言內容,有很多在線的教程、示例和項目可以去研究。但是Scala提供的最重要的一個工具是交互模式(REPL)。REPL是一個互動式解釋器,可以即時編譯、運行代碼並返回結果。假定你已經在機器上裝好了Scala,也設置了正確的路徑,那麼在命令行下運行scala命令就可以啟動Scala REPL。啟動Scala REPL後屏幕上會輸出如下內容:

請不要絕望。如我之前說過的,大部分構建工具可以讓你啟動一個針對你當前工程的Scala REPL。作為最後的手段,你可以在Scala文件里把玩那些高級概念,重編譯然後重啟REPL會話。

另外還有個工具叫做JRebel,它可以動態地在運行中的JVM里重載類文件。JRebel團隊非常慷慨地為Scala中的使用提供了免費許可。利用這工具結合某種形式的持續編譯—大部分Scala構建工具都提供的這一特性—你可以在修改工程文件後立刻在REPL會話里得到修改後的行為。對於maven-scala-plugin。Simple Build Tool提供了CC任務來做持續編譯。不管用哪種構建工具都必須和JRebel類載入器集成以便實現動態類重載。這個技巧有點過於細節,而且可能會變,所以如果需要幫助請參考你用的構建工具的文檔或者JRebel網站。

在嘗試創建大而復雜的系統前,你可以先利用REPL來實驗Scala代碼,獲得一些真實的感覺。軟體開發中,在開發一個新特性前,對當前系統得到一個稍微深入一些的理解(而不只是草草看過)往往是很重要的。Scala REPL可以讓你投入最少的時間達成對系統的理解,還可以提高你的開發技巧。本書全文穿插著很多REPL的例子,因為它是教學Scala的最好工具。我經常完全通過REPL運行示例,而不是採用Java開發時的標准做法,先寫main方法或者單元測試。

REPL也是開始學習面向表達式編程的極佳方法。

Ⅷ 如何看待reactive web框架Binding.scala

從我的角度來看,這東西只能是少數人的玩具吧,要想流行開來,極難!

這東西的目標人群應該是從Java轉到Scala的後端程序員,並且剛好又想做點前端的事情,感覺這個圈子太小了!

前端工程師基本不會投向Scala的懷抱。Scala本身後期的學習曲線就很陡峭,再加上JS也在進化,各種新特性慢慢能讓前端開發變得高效優雅,所以前端工程師不會有動力轉向Scala。

另外,這種東西要進入生產,還需要考慮很多問題,包括:

1、開發過程是否友好,是否方便debug。
2、轉換出來的JS代碼會不會臃腫。

沒仔細看過這個庫,只是憑自己兩年前玩過半年Scala的經歷來猜測的,有空再去瞻仰一下啦!

Ⅸ scala-sbt 項目如何做成web

創建項目文件夾

mkdirmyproject
cdmyproject

設置項目子文件夾結構

mkdirproject
mkdir-psrc/main/scala
mkdir-psrc/main/webapp/WEB-INF

配置sbt:

project/build.properties:

sbt.version=0.13.5

project/plugins.sbt:

addSbtPlugin("com.earldouglas"%"xsbt-web-plugin"%"1.0.0-M7")

build.sbt:

name:="myproject"
organization:="myorganization"
version:="0.1.0-SNAPSHOT"
scalaVersion:="2.10.4"
tomcat()
libraryDependencies+="javax.servlet"%"javax.servlet-api"%"3.0.1"%"provided"

添加一個servlet:

src/main/scala/servlets.scala:

packageservlets

importscala.xml.NodeSeq
importscala.xml.PrettyPrinter
importjavax.servlet.http.HttpServlet
importjavax.servlet.http.HttpServletRequest
importjavax.servlet.http.HttpServletResponse

{

overridedefdoGet(request:HttpServletRequest,response:HttpServletResponse){

response.setContentType("text/html")
response.setCharacterEncoding("UTF-8")

valresponseBody:NodeSeq=
<html>
<body>
<h1>Hello,world!</h1>
</body>
</html>

valprinter=newPrettyPrinter(80,2)

response.getWriter.write(printer.formatNodes(responseBody))

}

}

src/main/webapp/WEB-INF/web.xml:

<?xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns="

xmlns:xsi="

xsi:schemaLocation="version="3.0">

<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>servlets.MyServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

</web-app>

具體請參考 xsbt-web-plugin:傳送門https://github.com/earldouglas/xsbt-web-plugin

Ⅹ scala中web開發框架,哪一個能最後一統scala天下

最近研究了一下被很多人吹噓的Play Framework,當然,是它的最新版本2.0,完全基於Scala開發,Typesafe官方推薦,號稱scala開發web應用的不二選擇。我的基本感覺是,just like a toy。。。

1. 不支持j2ee
Play號稱基於nio的event驅動,自行實現了http協議,比之傳統j2ee應用性能高出無數雲雲,因此,使用Play,無需用到j2ee容器,也沒有servlet/jsp的概念,只需要jvm,然後run就可以了。看上去的確很美好,然後一個很基本的事實是,除了個人的玩具應用,有哪個企業的IT管理員會願意在已經熟悉的j2ee環境上在出現一個新的環境?更基本的事實是,從管理的角度來說,play提供的容器,能夠達到j2ee規范的高度嗎?更更基本的事實是,你能夠相信它的安全性嗎?雖然tomcat也會有安全漏洞,雖然jetty也不見得就真的安全,雖然websphere和weblogic都是要花錢的,但是比起他們來,你會更相信play的容器嗎?我相信99%的答案是No。
(當然,有一個第三方插件項目在試圖幫助Play部署war,但就其官方的態度而言,我是完全無法贊同的,而且,那個插件項目,遠未到成熟的地步,因為Play從根子上就沒有打算遵循j2ee規范)

2. 沒有服務端session
Play的口號是stateless,但我並不認為這個可以成為不提供服務端session的理由,現實生活中大部分的網站還是需要session的,你哪怕提供一個插件來提供session功能也好啊,可是很遺憾,沒有,官方的文檔上說,請自行處理。。。自行處理。。。這個世界上還有程序員有興趣去實現一個session管理嗎?

3. 編譯成函數的模板
Play認為這是它的優點,靜態編譯的模板,類型安全的參數傳遞。但我卻被它徹底的打敗了,為了向被各個頁面復用的page top傳遞幾個參數,我需要在每一個直接引用到它的模板,以及每一個間接引用到它的模板上添加所有的參數以便傳遞,因為,調用模板其實就是調用函數啊,我必須傳遞參數啊。。。當然,幸運的是,我們用的是scala,scala有implict參數定義,oh my God,我不需要傳遞參數了。。。可惜的是,我仍然需要在每一個層次的模板上聲明必須的參數,這是怎樣的一種精神,這是精神分裂的前兆。。。更加麻煩的是國際化與本地化處理,
Play提供了一個getmessage的函數讓我們可以取得本地化字元串並且填入參數,功能很簡單,當然,這並不妨礙我直接使用JDK的國際化API,因此這倒算不上它有多罪惡,然而,在表現層,或者說view層,當我希望根據locale選擇一個不同的模板文件的時候,問題就麻煩了,靜態編譯的模板,類型安全。。。似乎我需要用到反射才能夠根據locale選擇模板了。