Play 2.2.2 (Scala),如何处理HttpServletRequests

man*_*ane 2 java servlets scala playframework-2.0

我对 Play 和 Scala 还很陌生,遇到了一个问题,就像:简单的解释,

www.somesite.com/redirectedFoo //points to below controller

def redirectedFoo = Action{
//The http request needs to be traced here,
//and it needs to be accessed by a Java API method

val obj=new SampleMethod(--need http request obj as argument--)

//my problem is Play request and Http request are totally different 'objects', 
//and the above method uses HttpServletRequest obj, how is this handled in Play
}
Run Code Online (Sandbox Code Playgroud)

对不起,我无法提供正确的解释,

DCK*_*ing 5

就您的目的而言,Play 是错误的地方。Play 被设计为能够在 Servlet 容器之外运行,因此为 HTTP 请求实现了一个完全不符合 Servlet API 的 API。

您有两个选择:

  1. 编写您自己的函数,将 a 转换play.api.mvc.Request为您自己的javax.servlet.http.HttpServletRequest. 虽然HttpServletRequest是一个相当大的接口,依赖于更大的类,但 Play 中包含的信息Request 应该足以构建一个HttpServletRequest. 根据您的使用情况,您可能会保留一些或大多数方法未实现以减少工作量。以这个类为例。

  2. 如果您从 Servlet 运行 Play 2 应用程序并且您的方法允许,您可以编写自己的 Servlet 应用程序,在 Play 应用程序之前运行。然后它会在需要时使用您需要的 Servlet API 调用方法,并在不需要时将请求转发到 Play 2 应用程序。

这些都非常hacky,但对于单个用例可能是可以接受的。如果您需要与 Servlet API 集成或依赖大量其他代码,那么您真的需要问问自己 Play 2 是否是正确的选择。Play 2 可以支持任何 Java EE 技术,但特别是 Servlet API 是它不能很好支持的东西。如果您想使用现代 Scala HTTP 框架中的 Servlet API,您可能需要查看Spray 及其 servlet 支持