我对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
}
抱歉,我无法提供正确的解释,
答案 0 :(得分:4)
出于您的目的,Play是错误的地方。 Play旨在能够在Servlet容器之外运行,因此为不满足Servlet API的HTTP请求实现API。
您有两种选择:
编写您自己的函数,将play.api.mvc.Request
转换为您自己的javax.servlet.http.HttpServletRequest
实现。虽然HttpServletRequest
是一个非常大的接口,依赖于更大的类,但Play Request
中包含的信息应足以构建HttpServletRequest
。根据您的使用情况,您可能会保留一些或大多数未实现的方法以减少工作量。以this class为例。
如果您从Servlet运行Play 2应用程序并且您的方法允许,您可以编写自己的在Play应用程序前运行的Servlet应用程序。然后,它将在需要时使用您需要的Servlet API调用这些方法,并在不需要时将请求转发给Play 2应用程序。
这些都非常hacky,但对于单个用例可能是可接受的。如果您需要与Servlet API集成或依赖于许多其他代码,您真的需要问自己,Play 2是否是正确的选择。 Play 2可以支持任何Java EE技术,但Servlet API特别是它不能很好地支持。如果您想使用现代Scala HTTP框架中的Servlet API,您可能需要查看Spray and its servlet support。
答案 1 :(得分:0)
如果SampleMethod只使用一个小子集,例如只读取操作,那么实现一个将sevlet api桥接到播放请求的HttpServletRequest包装器可能是可行的。请注意,它们有很多种不同的方式,因此无法确定您是否能够连接所需的所有内容。如果它依赖于servlet API的大部分,那么我认为你运气不好。