当前位置:首页 » 网页前端 » 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选择模板了。