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用起来。

(待续,想到了在写)

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