Play! Framework 另一個web框架

Play框架是我在spring之外接觸的一個新的框架,這個框架基於scala語言,Scala也是運行在JVM上面的,他的字節碼因此可以和Java互通,因此,即使完全不明白Scala也是可以使用這個框架進行開發的,但是坑的確多。

創建和導入

首先下載Play框架的SDK,直接去play官網下載就行,然後下載好了解壓,路徑填入系統的環境變量,都是常規操作,沒啥說的,然後打開控制檯或者終端輸入play,如果出來了play的標誌,就是裝好了。

Play
就像這樣。

然後用new命令就可以初始化一個新的Play項目:

play new testapp

在這裏插入圖片描述就像這樣。
然後Play命令行會自動創建一堆東西,最終告訴你完事了,項目建好了,纔怪,信他纔有鬼呢。接下來需要進入工程的目錄,執行play,play命令行初始化之後,我們需要使用eclipse命令把工程變成eclipse工程或是idea命令把它變成intellijIDEA的工程,到此爲止,纔算是真正配置好了一個新項目。

在這裏插入圖片描述
配置爲IDEA項目
在這裏插入圖片描述
或者你可以使用eclipse
在這裏插入圖片描述
其實IDEA應該會更好些,因爲他有Play框架的插件,操作起來跟舒服,如果使用Eclipse,那麼我們需要額外配置Scala的插件,當然,這個插件裏面有Play框架的支持,可以直接使用他操作play,如果是Eclipse的話,有可能是需要手動從控制檯或者終端運行play的。

就像是這樣:
在這裏插入圖片描述

在使用安裝了Scala的Eclipse上面是可以導入Play工程的,但是,需要對play工程的一部分文件進行修改,否則Eclipse不認Play的Scala模板(*.scala.html文件),
在這裏插入圖片描述
在這個build.sbt中加入:

EclipseKeys.preTasks := Seq(compile in Compile)

然後進入project文件夾。
在這裏插入圖片描述
在project的plugins.sbt加入

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.1.0")

然後在工程的play控制檯中執行Eclipse纔可以。

至於idea嘛,裝好Scala插件之後直接導入就ok,跟着嚮導走總能導進去。

play裏面有幾個比較常用的命令,可以直接在控制檯中輸入運行:
clean - 清除編譯結果,下次運行重新編譯全部。

play裏面,尤其是表示UI的HTML模板,那是以Scala爲基礎的,還有一些其他的東西,如果他們的數量比較多,那麼編譯起來會很慢,非常慢,連續編譯個30分鐘都是沒問題的。其實也並不是每次都這麼慢,這是因爲play會只去編譯他認爲發生了變化的部分源碼,其餘部分繼續使用之前編譯好的,所以會顯得快一些。

但是這也常常帶來一些問題,通常的解決方式就是clean之後重編一次.

compile 編譯項目。
run 啓動項目,啓動後Ctrl + D可以結束項目返回控制檯。

controller和路由

controller是控制器,Play裏面控制器是Controller,繼承他就可以得到控制器了,控制器裏面可以定義各種方法,實例的,還有靜態的(不是廢話嗎…)。

當然,這兩個方式是有區別的,實例方法中,我們可以使用註解進行IoC注入,靜態的當然是不行的。控制器中映射到URL,用於處理請求的方法被稱爲Action方法,路由就定義在routers文件中,這個文件在conf文件夾裏面可以找到,同時這裏也會有一個Application.conf是web應用的主配置文件,如果要連接個數據庫什麼的就要在這裏配置。

routers文件遵循這個格式:
【HTTP方法】【URL路徑】【@ 如果你的Action是實例方法,需要此符號作爲前綴】【方法的全限定名】

最開始router中就給出了一個index作爲例子。

IoC注入

我也沒搞明白Play到底是要用Guice還是Spring,反正看他的buildPath裏面是有spring的。

如果需要注入,直接使用inject註解就行,指定單例的是singleton,都是Java的標準注入註解,看那些就OK。

整合Hibernate啓用JPA

修改conf文件夾內application.conf

db.default.driver=數據庫驅動
db.default.url=JDBC的URL,要加雙引號
db.default.jndiName=DefaultDS
db.default.user=數據庫的用戶名
db.default.password=數據庫密碼
jpa.default=defaultPersistenceUnit

在conf文件夾創建META-INF文件夾,編寫persistance.xml

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
         http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1">

    <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <non-jta-data-source>DefaultDS</non-jta-data-source>
        <properties>
            <property name="hibernate.dialect" 
            	value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>

</persistence>

工程下build.sbt的libraryDependencies內添加依賴:

javaJpa.exclude("org.hibernate.javax.persistence", "hibernate-jpa-2.0-api"),
"mysql" % "mysql-connector-java" % "5.1.34",
"org.hibernate" % "hibernate-entitymanager" % "4.3.11.Final"

好了,JPA和hibernate已經可以使用了。

Play提供了一個JPA的類,這個類提供了很多操作方法,通過查閱相應的API很容易就能把JPA用起來。

(待續,想到了在寫)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章