WEBAPP开发教程从零开始使用SBT搭建Lift框架下的WebApp
凌雪 2018-11-08 来源 :网络 阅读 869 评论 0

摘要:本文将带你了解WEBAPP开发教程从零开始使用SBT搭建Lift框架下的WebApp,希望本文对大家学WEBAPP有所帮助。

本文将带你了解WEBAPP开发教程从零开始使用SBT搭建Lift框架下的WebApp,希望本文对大家学WEBAPP有所帮助。


            最近研究Scala的Lift框架,想要利用Lift取代拿手的Java来开发web应用。Lift是一个Scala的Web框架,类似Spring之于Java,能够极大地便利Scala的Web应用开发。但是,由于Scala本身是一门比较新潮的语言,Lift也是一个新型的Web框架,二者都处在一个上升期,版本更新比较快,因此在具体应用时就会碰到诸多麻烦。笔者以实际经历,分享一些使用Lift框架搭建Web应用的一些经验和体会。对于那些还不了解Scala为何物的人,建议先去Scala的官网做一个了解。
              几乎任何一门编译型语言都有自己的御用部署管理工具,比如Java的Maven、Groovy的Gradle等,Scala也不例外。Scala的御用部署管理工具是SBT(Simple   Build   Tool),这是一个专为Scala而生的管理工具,类似于Gradle,同时具备脚本执行和命令行交互式执行的方式,可以直接使用Scala自定义工程部署。此外,在第三方依赖的管理方面,SBT使用了Ivy作为管理工具,因此在使用SBT管理依赖的同时,也在使用Ivy。诚然,编写Scala程序当然可以使用Maven等主流的传统工具,但是有很多理由都鼓励我们放弃Maven这些Java领域的工具而使用SBT(详见《Lift
     in   Action》)。SBT的具体使用方法在此不做赘述,详情参阅SBT官网即可。下面就进入本文的正题了。
    一、运行环境
    Scala版本:2.10.4
    SBT版本:0.13.5
    Lift版本:2.6-M4
              说明:截止本文完稿(2014.7.18),Scala的最新版本为2.11.1,笔者的机器装的也是这个版本,但是Lift的最新版本2.6支持的是2.10的Scala,所以在搭建Web应用的时候使用了2.10的Scala。此外,2.11的Scala相较以前的几个版本有诸多变化,比如Scala对XML的解析支持从自身的library包中被分离成为独立的包,因此想要解析XML文件就必须手动引入相关依赖。同时,之前由于SBT在0.7之后的几个版本变化都比较大,因此使用类似0.9之类的版本的SBT编写的自动化脚本很难与0.7以及0.10之后的版本兼容,但是SBT开发团队宣称已经改善了这个问题,但是笔者依旧认为使用最新的版本是比较保险的,因为诸如0.7版本中的processor机制,在0.13中已经不存在了,而用于支持Lift应用开发的Lifty插件也已经退出历史舞台,因此任何想使用Lifty来构建Lift应用的举措现在都是徒劳。
    二、项目结构
              首先,构建Lift项目的骨架结构。在系统的任意一处新建一个文件夹,比如在Windows的E盘新建ScratchLift文件夹,以此作为项目的根目录。然后依次建立如下所示的文件结构:
    ScratchLift
    --------src
    ----------------main
    ------------------------scala
    --------------------------------bootstrap
    ----------------------------------------Boot.scala
    --------------------------------code
    ----------------------------------------comet
    ----------------------------------------model
    ----------------------------------------snippet
    ----------------------------------------view
    ------------------------webapp
    --------------------------------WEB-INF
    ----------------------------------------web.xml
    --------------------------------index.html
    --------project
    ----------------build.properties
    ----------------plugins.sbt
    --------build.sbt
              这是最基本的Lift应用的项目骨架(并未包括test文件夹),src文件夹存放项目核心代码,project文件夹存放项目相关的配置信息(比如插件等),build.sbt存放项目的配置信息(比如项目的名称、第三方依赖等,类似Maven的POM文件)。bootstrap文件夹存放项目的启动信息,Boot.scala以程序代码的形式配置项目的启动信息。code文件夹存放业务代码,comet、model、snippet以及view分别代表四种类型的Scala代码,并不都是必须的,这里只是体现一下Lift的构建思路,Lift并不是纯粹的MVC架构的web框架,而是使用了一种称为MVV架构的模式(Model-View-ViewModel),具体介绍可以参考网络。webapp文件夹存放与web相关的文件资料,WEB-INF文件夹中的web.xml存放网站的配置信息,而index.html文件则是网站的欢迎页面。project文件夹中的build.properties文件定义了用于SBT执行的属性信息,plugins.sbt则提供了插件的相关信息。
    三、项目配置
            在plugins.sbt文件中加入以下代码:
    addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" %   "0.9.0")
   
    addSbtPlugin("com.github.mpeltonen" % "sbt-idea" %   "1.6.0")
      第一个引入xsbt这个插件,用于构建web项目;第二个引入sbt-idea插件用于后期将项目转变成IntelliJ项目(可以不加)。注意,两句之间必须空一行,这是sbt文件的规定,空行表示语句的分隔,后面的sbt文件也是如此。
   
    在build.sbt文件中加入以下代码:
   
    organization := "org.lyndon"name :=   "ScratchLift"version := "0.1-SNAPSHOT"scalaVersion :=   "2.10.4"seq(webSettings :_*)libraryDependencies ++= {val   liftVersion = "2.6-M4"Seq("net.liftweb" %   "lift-webkit_2.10" % liftVersion %   "compile","org.eclipse.jetty" % "jetty-webapp"   % "9.2.1.v20140609" % "container,test","org.eclipse.jetty.orbit"   % "javax.servlet" % "3.0.0.v201112011016" %   "container,compile" artifacts Artifact("javax.servlet",   "jar", "jar"))}
    前三个分别定义了项目的组织名、构件名以及版本信息,可以自定。scalaVersion定义了项目编译要使用的Scala版本,seq(webSettings   :_*)表示引入webSettings对象中的所有元素。该对象存在于xsbt-web-plugin插件中。最后一个代码块定义了项目要用到的第三方依赖,总共引入了三个依赖,并定义了相应的适用范围,第一个依赖即是Lift的核心程序包(相关依赖的即时信息可以从Maven中央仓库中查询,SBT也使用Maven的中央仓库)。后两个依赖均与Jetty服务器相关,因为Web应用必须在放置在某一个容器中才能运行,而Jetty恰恰是最合适的一个轻量级Servlet容器。
    build.properties中加入一行sbt.version =   0.13.5即可,尽管不是必须的,但是明确SBT的版本能够为后期的维护省去不少麻烦。
    打开web.xml文件,加入以下代码:
    <!DOCTYPE web-app SYSTEM   "//java.sun.com/dtd/web-app_2_3.dtd"><web-app><filter><filter-name>LiftFilter</filter-name><display-name>Lift   Filter</display-name><description>The Filter that intercepts Lift   calls</description><filter-class>net.liftweb.http.LiftFilter</filter-class></filter><filter-mapping><filter-name>LiftFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
    web.xml配置项目启动时使用LiftFilter作为过滤器,拦截所有客户端请求,这对于Java Web开发者而言再熟悉不过了。
   
    四、关键代码
    打开Boot.scala文件,加入以下代码:
    package bootstrap.liftweb
    import net.liftweb.http.{Html5Properties, LiftRules, Req}import   net.liftweb.sitemap.{Menu, SiteMap}class Boot {def boot   {LiftRules.addToPackages("org.lyndon.ScratchLift.code")def sitemap():   SiteMap =   SiteMap(Menu.i("Home")/"index")LiftRules.htmlProperties.default.set((r:   Req) => new Html5Properties(r.userAgent))}}
      以上代码完成了Lift的基本启动配置,红色字体部分指明了Lift搜索业务代码的包路径,将在后面用到。
    <!DOCTYPE html>
    <html>
    <head>
    <title>Lift From Scratch</title>
    </head>
    <body>
    <h1>Welcome to Lift!</h1><div   data-lift="Hello.currentTime"></div>
    </body>
    </html>
              这是项目的欢迎页面。红色字体部分中的data-lift属性表示该标签的内容由Lift框架调用Hello类的currentTime方法来解析并填充。这是Lift的独有机制,通过这种方法,页面可以轻松完成与后台的简单交互,不必再添加其它代码。下面来看Hello类的代码内容。
    在snippet文件夹下新建一个Hello.scala文件,加入以下代码:
    package org.lyndon.hello.code.snippet
    import scala.xml.NodeSeq
    import java.util.Date
    class Hello {def currentTime(xhtml: NodeSeq): NodeSeq = {xhtml ++   <span>{(new Date).toString}</span>}
    }
    package是包声明语句,声明Hello类存放在项目的snippet文件夹下。接着,在Hello类中定义了一个currentTime方法,其参数是NodeSeq对象,返回一个html格式的字符串供浏览器解析。这个返回的串将被Lift加入调用该方法的标签中。完成以上步骤之后,就算大功告成了,接下去就是启动Jetty服务器。
   
      打开命令行终端,切换到项目根目录,执行sbt命令进入交互式界面(需要有恰当的环境变量设定),键入container:start启动Jetty服务器。Jetty默认在本机的8080端口监听,如果一切顺利,就会在命令行中看到success字样,接着打开浏览器,在地址栏输入localhost:8080并回车,就可以看到类似下图的界面了。
   
   
      如果你确实看到了以上内容,那么恭喜,你的第一个Lift应用搭建成功了!OK,以上就是本文的主要内容。你当然可以使用SBT将上述过程自动化来构建Lift项目,或者直接从Lift的官网下载Lift包,使用其中的模板搭建自己的Lift环境,但是手动搭建的过程无疑能够让我们学到更多,学得更透彻,并且能避免一些兼容性的问题。但是在实际开发中,使用脚本执行自动化搭建是有必要的。如果不使用SBT,也可以使用Maven的Lift模板搭建Maven架构的Lift项目,但笔者认为脱离了SBT的Scala项目在后期维护上是要付出较大的成本的。
              众所周知,Scala是一门运行在JVM上的现代化语言,同时具备了Java跨平台的优点以及函数式语言的优势,类似Tweeter的高新技术团体对Scala的成功应用及其优秀的工程表现,使我们有理由相信Scala以及它的相关应用框架将会是未来的趋势。
            文章最后推荐两本书籍,首先是《Lift   Cookbook》,这是目前为止最新的介绍Lift框架的书本资料,以问答的形式解决常见的问题。其次是《Lift in   Action》,这本书详细介绍了Lift的工作原理和应用方法,但是使用的Lift版本较老,在工程应用上存在问题,但是对于了解Lift框架而言,笔者认为这本书优于Cookbook。想要了解最新的Lift信息,当然还是去Lift官网了。    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之WebApp频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程