文档章节

play1.x 第一弹 :与play的初次邂逅(搭建,目录结构,生命周期)

星闪
 星闪
发布于 2017/08/07 11:57
字数 1565
阅读 5
收藏 0
点赞 0
评论 0

谨以此系列文章进行学习、记录、分享。

注:参考了play官方文档    https://www.playframework.com/documentation/1.2.x/home

前言

    与play的第一次邂逅,还是在来到这个公司的时候,这个项目应用的就是play项目,对于之前一直使用传统框架(例如:spring  springMVC mybaits  struts hibernate)的我,对这个框架还是满新奇的!

    play framework说他是一个框架 但是我认为他是一个基于JVM的可玩性很高的,开发平台,在这里你可以省去繁琐的关系抽象,省去繁杂的配置文件,更神奇的是,他解决了java的往常平台的一大问题重复和繁琐的编译包部署周期,可以直接线上改编代码,他更侧重于生产的速度,让你有更多的时间去想你要干什么,而不用为以后准备各种关系的抽象,和去重复重启项目。

    Play框架是由Web开发人员为Web开发人员编写的,这是一个非常规的定位,将Web的原则和约定放在第一位,Java是第二个。具体来说,这意味着Play框架更符合W3C的万维网体系结构,而不是Java Enterprise Edition(Java EE)约定。

    都说兴趣才是最后的学习方式,下边我们一起paly一下。

搭建及简单应用(配合eclipse)

    

    既然要play,首先我们要简单的搭建一下play,并简单运行它,其实play的搭建和运行非常的简单,只需要下载压缩包(这里是1.2.7版本),解压,并把路径配置到环境变量中即可,配置之后,我们可以在黑窗口(cmd)中 输入play命令,看看有没有效果,有的话 就是配置成功。

    既然配置成功了,那么我们就先建一个项目玩一下,首先我们进入黑窗口,进入到你想建项目的目录,输入命令play new <项目名>,Play会在当前路径下创建项目。

    那么既然要配合eclipse使用,我们就要把这个项目转换一下,输入play eclipsify <项目名>命令进行转换,之后再eclipse中进行导入项目即可。

    导入之后会在项目中产生一个eclipse文件夹,并在里边生成三个文件,我们可以在这三个文件上run as 和debug as ,

    直接运行Debug As 执行helloworld会报错,需要:打开helloworld.launch,找到

<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -Dplay.debug=yes -Dplay.id= -Dapplication.path  …/>

    将-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n 去掉。然后Debug As,即可成功启动调试。

    还有一个比较好的方法直接配置一下debug或run直接运行就好,这样很方便。

                                            

    之后访问http://localhost:9000/ 就可以到项目,到此项目搭建完成。

目录结构

项目搭建而完成了,那么我们应该了解一下他的目录结构了。

web_app                         根目录               

|   sbt                         SBT Unix 批处理脚本用于启动sbt-launch.jar

|   sbt.bat                     SBT Windows 批处理脚本用于启动sbt-launch.jar

|   sbt-launch.jar              SBT 启动的Java可执行类库

|

+---app                         Play Web 应用全部代码所在目录

|   |

|   +---models                  模型代码所在目录

|   |       Message.scala       留言板例程模型代码

|   |

|   +---controllers             控制器代码所在目录

|   |       Application.scala   默认控制器代码

|   |

|   \---views                   视图(Play Scala HTML模板) 代码所在目录

|           main.scala.html     主模板文件

|           index.scala.html    首页模板文件

|           msgboard.scala.html 留言板例程模板文件

|

+---conf                        Play 配置文件所在目录

|       application.conf        应用配置文件

|       routes                  应用入口路由文件,所有的HTTP请求将通过该文件转发到指定的Scala对象处理

|

+---logs                        日志目录

|       application.log         应用运行日志

|

+---project                     SBT工程文件

|       build.properties        保存所需的SBT版本信息,通常无需更改

|       Build.scala             主要的工程配置文件

|       plugins.sbt             告知SBT本工程所需要的插件以及下载位置

|

+---public                      存储一切直接发送给浏览器的资源文件

|   |

|   +---images                  图像文件,如JPEG、PNG、GIF等

|   |

|   +---javascripts             JavaScript脚本文件

|   |

|   \---stylesheets             CSS样式表文件

|

\---target                      存放编译后的可执行代码和编译时的中间代码

请求的生命周期

         其实了解一个框架,首先就应该了解他的请求是怎么传递的,他的传递过程是怎么样的,这样你才会对这个框架的走向有一个大体的概念,在了解请求的生命周期前我们先来看一下mvc模型,play是遵循MVC模型的。

    Play的MVC模型

  •    模型层:他对数据进行定义和处理,来返回我们所需要的数据。大多数应用程序使用持久存储机制(如数据库)来存储数据。MVC没有特别提及数据访问层,因为它被理解为在模型下面或由模型封装。
  •  视图层:其实他就是通常的用户界面的形式。为了不同的目的,单个模型可以存在多个视图。在Web应用程序中,视图通常以HTML,XML或JSON等“Web格式”呈现。然而,在某些情况下,视图可以以二进制形式表示,例如动态渲染的图表。
  •  控制器:它的作用是响应事件(通常为用户操作),并对其进行处理,并且还可以调用模型上的数据。在Web应用程序中,事件通常是HTTP请求:控制器侦听HTTP请求,从“事件”中提取相关数据,例如查询字符串参数,请求标头...并对底层模型对象应用操作。                                                                                  
  • 在Play应用程序中,这三个层在app目录中定义,每个层都在一个单独的Java包中。
  • 请求生命周期

    ·  框架接收到HTTP请求。

    ·  路由器组件尝试找到能够接受此请求的最具体路由。然后调用相应的动作方法。

    ·  执行应用程序代码。

    ·  如果需要生成复杂视图,则会呈现模板文件。

    ·  操作方法的结果(HTTP响应代码,内容)然后被写为HTTP响应。

    •                                     

 

© 著作权归作者所有

共有 人打赏支持
星闪
粉丝 0
博文 5
码字总数 5173
作品 0
高级程序员
让netbeans7.3 支持play 2.1.X

netbeans是一个很好的免费的 java IDE,也是所有IDE中,中文最好的。 当用netbeans开发play1.x的时候,只要用play netbeansify就可以了,然后用netbeans直接打开项目就可以开发了。 如果用n...

ln_bo ⋅ 2013/04/19 ⋅ 0

Play Framework 安装

记得有一次OSC高手问答是关于Play Framework的,那是我第一次听说Play Framework这个所谓的全堆栈式的java应用框架,当时也没有非常吸引我,但是它也算在我的脑海里留下了一定的印象,由于公...

beidao-ai ⋅ 2012/06/05 ⋅ 3

Play源码深入之六:数据库与事务管理

由前面的文章大致知道,Play的事务由过滤器中处理,这里理一下Play框架与数据库相关的部分。 主要是play.db包中的DBPlugin/DB类,与play.db.jpa包中的JPAPlugin/JPA类有关,前者管理数据源,...

刀狂剑痴 ⋅ 2015/08/27 ⋅ 0

play1.2.5公用model层问题

@javadeveloper 你好,想跟你请教个问题:您好,请问下你们是使用的play1.x。我想问下你们多个play项目怎么公用model呢。连接的库是一个库。

八十四亩地 ⋅ 2015/06/23 ⋅ 2

Play源码深入之七:Play的MVC实现

整体来说,Play1.x是一个较完善的框架,各种功能都一应俱全,有点像句老话“麻雀虽小五脏俱全”哈。虽没有Struts、SpringMVC的大名气,但是使用起来,相当顺手。本文将深入Play1.x的MVC,也整...

刀狂剑痴 ⋅ 2015/08/27 ⋅ 0

GitHug一步一步通关帖(一)

首先切到Terminal下 安装游戏 sudo gem install githug LiGuicaideMacBook-Pro:~ Guicai$ gem install githugFetching: mime-types-1.25.1.gem (100%)ERROR: While executing gem ... (Gem:......

萨斯辈的呼唤 ⋅ 2014/11/24 ⋅ 0

play!开发的CMS应用,框架结构如何搭建?

在用Play!(1.2.4版)开发CMS应用,其中涉及到模板和全站静态这两块问题,不知道从何着手搭建这个框架?初步搭建一个框架结构主要如下: |-app(应用程序) |-conf(配置文件) |-data(用户静态资源目录...

周烈庆 ⋅ 2012/05/05 ⋅ 3

golang: beego自动化部署

springboot: springboot+mongodb+docker实例 golang: beego自动化部署 数据库管理平台NetopGO简介 Go语言开发 Go语言圣经(中文版) Go语言(golang)开源项目大全 Go语言诞生5周年!10大Go语言...

d_watson ⋅ 2016/05/20 ⋅ 0

Play 1.x框架学习之七:多数据库切换与源码修改 ( Databases Switch And Modify Source Code)

在单数据源(单个ip)下的多库,可以使用use xxdb 命令进行切换,但是如果多个数据源的情况下,use命令就不行了。在play框架中,提供了多数据源多库的切换。本文不提供完全的例子,只提供部分...

刀狂剑痴 ⋅ 2015/08/27 ⋅ 0

Layer从入门到精通-01你好,layer!

引言 通过本节学习,您将收获以下知识点: 1, layer是什么! 2, 如何引入layer! 3, 如何使用layer! 我们结合实际操作,通过一个简单的案例,让您切实感受到:layer的学习既有趣又简单! 和我一...

lizisir ⋅ 2017/04/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA入门,配置文件的设置

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http......

码农屌丝 ⋅ 7分钟前 ⋅ 0

Java基础——面向对象和构造器

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 静态成员介绍 为什么要有静态成员?静态成员用来...

凯哥学堂 ⋅ 9分钟前 ⋅ 0

vmware中Centos 7 linux的LVM磁盘扩容

系统是RHEL7(centos7差不多一样) 关闭系统,在vmware、设置、硬盘、扩展、输入数字大于当前系统内存、点击扩展。 开机再查看磁盘信息 fdisk -l 注意:可以看出sda磁盘增加了,但是根目录还...

gugudu ⋅ 20分钟前 ⋅ 0

JAVA线程sleep和wait方法区别

昨天面试,突然被问到sleep 和 wait的区别,一下子有点蒙,在这里记一下,以示警戒。 首先说sleep,sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过去后,cpu...

徐玉强 ⋅ 22分钟前 ⋅ 0

vuex学习--模块

随着项目复杂性增加,共享状态也越来越多。需要对转态操作进行分组,分组后在进行分组编写。学习一下module:状态管理器的模块组操作。 首先是声明: const moduleA={ state,mutations,g...

大美琴 ⋅ 24分钟前 ⋅ 0

Selenium 简单入门

安装 pip install selenium 驱动下载 https://chromedriver.storage.googleapis.com/index.html 下载最新的驱动,放入path中,可以放入Python的scripts目录下,也可以放入Chrome安装目录,并...

阿豪boy ⋅ 25分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 56分钟前 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 今天 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部