Play框架的启动有两种方式:
1、 原生启动方式:使用自己的Server直接启动
2、 包装启动方式:通过ServletWrapper在Servlet容器中。
值得说明的是,Play框架采用了Mina来实现嵌入的HTTP服务(更准确的讲,是异步地HTTP请求IO处理),相当于完全抛弃了Servlet,只这一点,我就为Play框架的魄力所折服,不知道目前有多少应用是直接用它来作为生产模式的。
不管用哪种方式,都是通过调用核心类Play.init()方法,来先初始化整个Play框架的。
Play.init()方法有两个参数,一个是File类型,用于指定应用程序根目录的;另一个是String类型,用于指定Play框架的id。
Play.init()里,主要干了三件事:
1、 初始框架配置:
a) 初始化静态资源:InitStaticStuff()
b) 读取版本信息
c) 初始化日志系统
d) 初始化目录位置,包括应用程序根目录、Play框架目录、临时文件目录等
e) 初始化运行模式,分dev开发模式和prod产品模式
2、 加载应用资源:
a) 加载应用Java源文件
b) 加载应用模板文件
c) 加载请求路由配置
d) 加载声明的外部模块,主要包括模块的Java源文件、模板文件和路由配置
e) 创建应用类加载器(ApplicationClassloader)
f) 加载声明的内置插件
3、 预编译代码和模板:
a) 最后如果是产品环境或指定“precomiler”环境变量,则对应用的Java源文件和页面模板进行预编译
在加载应用资源时,Play框架没有直接使用JavaIO里的File,而定义了一个宣称模拟VFS的虚拟文件类(VirtualFile),这在后面介绍动态编译和加载类时,将会介绍到。
另外,在调用Play.init()之前,Play框架其实还通过静态代码块,先初始化了一个重要组件,线程池对象:play.Invoker.executor。这个线程池的作用,后续文章也将进行详细说明。
liuu9@163.com
liuu.iteye.com
分享到:
相关推荐
Thank you for playing! Press any key to continue . . . Another Sample: CP1200 Guessing Game Written by Lindsay Ward Please enter your bet (up to $100.00): $-20 Your bet is $100.00 Guess a number ...
"StartPlaying"是一个基于JavaScript的项目,旨在帮助用户在新年前夜或者其他特殊时刻创建有特色的倒计时,为活动增添乐趣和仪式感。这个项目的名字"StartPlaying"寓意着通过播放精心挑选的剪辑或音乐来开启一个新的...
这部分将讲述羽毛球的发展历程以及国际羽毛球联合会(IFB)等组织的作用,使学生了解这项运动的文化背景和组织框架。 ### 十一、当前议题 **当前议题(第38页):** 可能涵盖了目前羽毛球界面临的挑战和热点话题,...
- **玩,踢**:play作为动词时,它可以指代各种游戏、活动或运动。例如,“She is playing with her toys”意味着她在玩玩具,而“He plays soccer every weekend”表示他每个周末都踢足球。 3. **play与乐器的...
CarPlay App编程指南是苹果开发者针对创建适用于CarPlay平台的应用程序的一份详细文档。这份指南旨在帮助开发者理解如何构建与车载系统无缝集成的iOS应用程序,提升驾驶者的安全性和用户体验。以下将详细阐述其中的...
<img id="playImg" src="images/play.png" style="display: block;"> <img id="pauseImg" src="images/pause.png" style="display: none;"> ``` 接下来,我们需要引入jQuery库。如果你的项目中还没有包含jQuery,...
Play.java for Simple Bridge Card Playing Programming. It's a main java file using javaFX
node-airplay是用于Apple的AirPlay远程播放协议的本机javascript客户端库。 安装 从npm: npm intall airplay-js 用法 // remote video var browser = require ( 'airplay-js' ) . createBrowser ( ) ; browser . ...
美菜笔试题 java 边玩边学 一组技术资源,让您可以通过玩游戏来学习新事物 基本原理 学习新事物不一定很无聊,尤其是在技术方面! 这个存储库试图收集一些有趣的资源,可以帮助您通过玩游戏获得一些新的技术技能。...
总结来说,MATLAB提供了一系列强大的工具来读取、处理和播放视频。通过VideoReader、VideoWriter、vision.VideoPlayer以及imshow函数,开发者能够轻松地完成从视频读取到输出播放的完整流程。结合给定的"read_and_...
:sparkles::shortcake::sparkles: 让我们跳过复制(对于脚本): $ em ' chocolate bar ' --no-copy:chocolate_bar: 让我们按颜色找到一些表情符号: $ em -s red:automobile: car:flower_playing_cards: flower
#Playing MultipartFormData 在 Play Framework 2.3.8 中处理和测试 MultipartFormData 请求的基本示例在 Web 应用程序中上传文件的标准方法是使用具有特殊 multipart/form-data 编码的表单,它允许您将标准表单数据...
信息安全_数据安全_Playing_to_Win:What_Makes_a_Winn 安全架构 web安全 移动安全 金融安全 web安全
- 当需要简化复杂的系统接口时,如大型软件项目、框架或库。 - 当希望为子系统提供一个简单的统一接口时,使客户代码更容易理解和使用。 - 在模块化开发中,每个模块都有自己的外观类,便于模块间的通信。 6. **...
与CSS框架集成(Twitter Bootstrap 3.1.1)。 Twitter Bootstrap需要与Play表单助手生成的默认布局不同的表单布局,因此此应用程序还提供了一个集成自定义表单输入构造函数的示例。 带有Twitter Bootstrap 3.1.1的...
正在播放的 Google Play 从谷歌播放音乐标签中提取信息
「网络安全」Playing_to_Win:What_Makes_a_Winning_Abstract - 安全集成 APT WEB应用防火墙 渗透测试 安全体系 漏洞分析
SPECIAL PROMO - request new equipment in your REVIEW and we'll add it! Run our WebGL demo in your browser now!... Our built-in editor will help you to customize your characters and play animations. You
while (outputDevice.PlaybackState == PlaybackState.Playing) { System.Threading.Thread.Sleep(100); } } } } } ``` 在NAudio中,WaveOutEvent是一个硬件输出设备,用于播放音频数据。你可以通过...
播放React流畅使用Slick 3.0构建React式Play应用程序###说明:- 如果尚未安装PostgreSQL,请安装它。 你可以从得到创建一个名为test的数据库如果尚未安装Typesafe Activator,请安装它。 您可以从这里获取: : 执行....