Play是标准的Request-Response型框架,类似于Struts。
Play把HTTP请求封装为4个类:Header,Cookie,Request,Response。
和Servlet类似的是,他也是通过处理Request和Response两个对象来完成一次访问的处理。
和Servlet不同的是,在Servlet中你想获得ServletRequest/ServletResponse,你必须通过HttpServlet set到你的Object中。
而Play不这样做,通过Threadlocal机制,可以在程序的任何地方通过调用静态方法
Request.current.get()方法获得当前线程正在处理的Request.
这就相当于你不需要写set方法,你就可以在任何地方都取到当前的Request.
这是非常巧妙的做法,能做到这一点也和服务器本身的处理机制有关。
如果我们只用一个线程来处理所有的请求,那么Play这样的做法就行不通了。
Play整合Servlet API是这样的:
他有一个类叫做ServletWapper,ServletWapper继承了HTTPServlet.当一次请求进来,它首先把HttpServletRequest的内容拷贝到当前的Request中,等Play框架处理完以后,再把Response的内容拷贝到HttpServletResponse中。
这样Play和Servlet API就整合到一起了,非常的简单
可以发现,Play对Servlet API的入侵性很小,可以说它就是一个Servlet.
这只是一个Play的冰山一角,它的代码还有很多有趣的地方,可以用非主流来形容。
比如它使用抛异常的方式返回执行的结果等等,Play的代码阅读起来很简单,推荐有兴趣的朋友可以阅读。
这就是ServletWapper的service方法
@Override
protected void service(HttpServletRequest httpServletRequest, HttpServletResponse httpServletRespo
nse) throws ServletException, IOException {
Logger.trace("ServletWrapper>service " + httpServletRequest.getRequestURI());
Request request = null;
try {
request = parseRequest(httpServletRequest);
Logger.trace("ServletWrapper>service, request: " + request);
Response response = new Response();
Response.current.set(response);
response.out = new ByteArrayOutputStream();
boolean raw = false;
for (PlayPlugin plugin : Play.plugins) {
if (plugin.rawInvocation(request, response)) {
raw = true;
break;
}
}
if (raw) {
copyResponse(Request.current(), Response.current(), httpServletRequest, httpServletResponse);
} else {
Invoker.invokeInThread(new ServletInvocation(request, response, httpServletRequest, httpServletResponse));
}
} catch (NotFound e) {
Logger.trace("ServletWrapper>service, NotFound: " + e);
serve404(httpServletRequest, httpServletResponse, e);
return;
} catch (RenderStatic e) {
Logger.trace("ServletWrapper>service, RenderStatic: " + e);
serveStatic(httpServletResponse, httpServletRequest, e);
return;
} catch (Throwable e) {
throw new ServletException(e);
}
}
- 大小: 24.4 KB
分享到:
相关推荐
play framework api,play! framework api,play api
play-store-api, 在java中,Google Play 存储 protobuf API包装器 play-store-api java中的Google Play 存储protobuf包装器包括从 jitpack 获取它。 或者。单独生成git clone https://github.com/yeriom
play-services-measurement-sdk-api.properties
google-play-api, 将 Google Play scraper转换为 RESTful API google-play-api将 google-play-scraper 转换为 RESTful API 。 现在看它工作了 。要在本地运行:npm installnpm start要立即使用运行,请执行以
play2-war-plugin, 用于 Play Framework 2.x的WAR插件 用于 Play Framework 2.x的 WAR插件Current versions: Play 2.2.x : 1.2.1 Play 2.3.0 -> 2.3.1 : 1.3-beta1 (Scala 2.1
AWS Elastic Beanstalk 上的 Nginx + Playframework 最新的公共 AMI: ami-c0ae98a8 2015 年 4 月 1 日构建新自定义 AMI 的说明首先,在 Elastic Beanstalk 上创建一个 tomcat 应用程序。 然后通过 SSH 连接到创建的...
playframework-java-过滤器 关于如何将 play 的 Scala API 适配到 Java 的示例
TLeague_ A Framework for Competitive Self-Play basedDistributed Multi-Agent RL
[强烈推荐, 文档不多, 很快就可以看完, 看完了, 就会使用play了] 目录 MVC应用程序模型 - 7 - app/controllers - 8 - app/models - 8 - app/views - 8 - 请求生命周期 - 8 - 标准应用程序布局layout - 9 - app...
播放-json-api 该项目用于演示 Java 和 Scala 中的 JSON API。 它被用于。 用 Java 构建 JSON 使用 Scala 构建 JSON 使用 Java 使用 JSON(请求正文) ...= -1))验证 id != -1 显示带有Option[String]可选字
google-play-api 将转换为RESTful API。 要在本地运行: npm install npm start 要使用运行: npm install -g now now 与Docker一起玩 请求示例 每个端点的参数直接从google-play-scraper获取。 有关完整参考,...
play-services-cast-framework-9.2.0.jar play-services-clearcut-9.2.0.jar play-services-contextmanager-9.2.0.jar play-services-drive-9.2.0.jar play-services-fitness-9.2.0.jar play-services-games-9.2.0....
NULL 博文链接:https://shenbai.iteye.com/blog/1522718
play framework2.01上半部分。
Termux:API on Google Play When developing or packaging, note that this app needs to be signed with the same key as the main Termux app for permissions to work (only the main Termux app are allowed to...
1. Play Framework 介绍 2. 创建和发布 Play 应用 2.1 创建 Play 的工程 2.2 Play 常用指令 2.3 Play 应用的 JVM 调优 3. 如何读取静态资源 4. Play框架的配置文件 5. 使用 Play 框架开发 Java 应用 5.1 HTTP...
light-play-rest-api:该项目旨在作为参考,以使用Play Framework 2.4.x创建轻量级REST API。
Play Framework Cookbook.pdf
google-play-services版本15.0.1,依赖工程可直接引用到项目中,适用Eclipse及AndroidStudio开发环境,快捷方便,本人亲自整理,后续资源有问题可咨询。若后续google-play-services如需其他版本迭代,也可让我更进。
playframework javaweb playframework javaweb