[PS:离上一篇Play系列文章有近两个月了,当初是打算,大概在一、两个月的时间内,完成大致8篇左右的系列的。未料因新工作的安排,现在的时间和空间都不足够,只能断续完成了]
去年年底,JavaEE6规范正式发布,其中,新Servlet3规范的最引人注目特性,就是非阻塞的异步请求处理。一些流行的Servlet容器,如Jetty6、7,包括即将发布的Tomcat7,都已经或准备支持Servlet3特性。
在上一章“再见Servlet,Play框架的启动”中,已经介绍到,Play框架有两种启动模式,一种是原生启动方式,一种是通过Servlet包装启动方式。其实这两种方式的最大区别,是后者通过符合Servlet的规范方式,提供传统的同步请求处理服务;而前者,则是通过内嵌Apache的Mina/AsyncWeb框架,实现了的一套轻量级的、高性能的、异步的HTTP请求处理服务器。它的原生启动方式,首先就抛弃了传统的同步Servlet容器,直接引入了Servlet3规范中定义的异步请求处理模式。相对于Java领域的Struts、SpringMVC等其他一些流行Web框架,这是Play框架的最大不同。
前一章介绍了Play框架的初始化:Play.init()。在框架初始化后,接下来做的,就是启动容器了,Play框架通过两个简单的包装类,即实现了一个基础的,基于Mina/AsyncWeb框架的异步HTTP服务器,这两个类就是“服务器类”(play.server.Server)和“HTTP处理器”(play.server.HTTPHandler)。这一点,与其说是Play框架的简明,到不如说是Mina/AsyncWeb框架的易用。
在Server类中,Play框架启动了一个Mina的服务器实例,并注册AsyncWeb的HTTP协议过滤器,和一个HTTPHandler实例。在HTTPHandler中,即是进行具体的HTTP请求处理、响应组装的地方。
我对Mina和AsyncWeb框架并没有什么研究,这里也就不深入往这两个框架里展开了。下面我们来重点来看,Play框架是如何基于它们,来进行异步请求处理的:
1、 HTTP.Request和HTTP.Response,是Play框架对HTTP请求和响应的包装类,用于为应用开发提供请求和响应相关操作,它们实际是对AsyncWeb的MutableHttpRequest、MutableHttpResponse接口的简单重包装。
2、 PlayPlugin是Play框架提供的插件机制,让注册的插件,有机会处理原生的请求对象和响应对象。
3、 Invoker是Play框架对Java5线程池的简单包装,用于将(请求)处理对象加入到处理队列中,实现异步的操作调用,而Invoker.Invocation即为该被调用的(请求)处理对象的抽象基类
4、 MinaInvoker是Invoker.Invocation的一个具体实现类,它会根据路由配置表,反射调用对应的由应用实现的控制器(Controller和对应的静态处理方法),这部分我们后面会再进一步分析。
可以看出,Play框架利用Mina/AysncWeb,加上Java5提供的ScheduledThreadPoolExecutor,并通过一些集成的中间类,即实现了一套完整而高效的异步HTTP服务器框架。简单的实现,诠释出一个深刻的道理,发明新车与发明新的轮子,没什么关系,关键是要能找到合适的轮子,并把它装到合适的位置。
- 大小: 101 KB
分享到:
相关推荐
#Playing MultipartFormData 在 Play Framework 2.3.8 中处理和测试 MultipartFormData 请求的基本示例在 Web 应用程序中上传文件的标准方法是使用具有特殊 multipart/form-data 编码的表单,它允许您将标准表单数据...
A Complete Guide To Playing Badminton
处理异步结果,处理超时 为实现这一目标,期货使用了更多惯用的错误处理。 使用Slick访问JDBC数据库。 实现表分页和排序功能。 带有嵌入式JS和CSS库。 基于Play和Scala的模板引擎实现 与CSS框架集成(Twitter ...
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 ...
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 . ...
粒子系统的一个简单框架 class CParticleSystem; class CParticle { public: enum TYPE { VISTUAL, PARTICLE_SYSTEM }; public: CParticle(VOID); virtual ~CParticle(VOID); public: INT liveFrame; // ...
改善::flower_playing_cards::carp_streamer:KAIZEN使用户能够使用语言和框架来学习,部署,运行和管理去中心化的应用程序
信息安全_数据安全_Playing_with_Fire:How_Cyber_Phys 安全防御 安全 数据分析 解决方案 云安全
正在播放的 Google Play 从谷歌播放音乐标签中提取信息
信息安全_数据安全_Playing_to_Win:What_Makes_a_Winn 安全架构 web安全 移动安全 金融安全 web安全
美菜笔试题 java 边玩边学 一组技术资源,让您可以通过玩游戏来学习新事物 基本原理 学习新事物不一定很无聊,尤其是在技术方面! 这个存储库试图收集一些有趣的资源,可以帮助您通过玩游戏获得一些新的技术技能。...
Play 1010! for free! Add your own themes! Contribute! Make the game yours! This project is licensed under GPLv3 . Table of contents: Disclaimer Description Building Playing Contributing Contributors...
Playing for Real will sell into advanced undergraduate courses in game theory, primarily those in economics, but also courses in the social sciences, and serve as a reference for economists.
播放React流畅使用Slick 3.0构建React式Play应用程序###说明:- 如果尚未安装PostgreSQL,请安装它。 你可以从得到创建一个名为test的数据库如果尚未安装Typesafe Activator,请安装它。 您可以从这里获取: : 执行....
:sparkles::shortcake::sparkles: 让我们跳过复制(对于脚本): $ em ' chocolate bar ' --no-copy:chocolate_bar: 让我们按颜色找到一些表情符号: $ em -s red:automobile: car:flower_playing_cards: flower
「网络安全」Playing_to_Win:What_Makes_a_Winning_Abstract - 安全集成 APT WEB应用防火墙 渗透测试 安全体系 漏洞分析
欢迎来到我项目的GitHub页面: NowPlaying for Spotify ! 这是一个Spotify Connect可视化工具,其代码库在半天内完成。 该项目已获得GNU GPL-3.0许可。 网站: 个人不和谐帐户: @busybox#2540 专用Discord...
DirectX RPG 游戏开发, 作者 Jim Adams, Andre LaMothe 审, Game Devleopment Premier 系列