Playing Play!系列之二:再见Servlet,Play框架的启动

Play框架的启动有两种方式:

1、  原生启动方式:使用自己的Server直接启动

2、  包装启动方式:通过ServletWrapperServlet容器中。

 

值得说明的是,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值