我有一个Groovy类MyRequest,用于处理每个HTTP请求。在构造函数中,该类将实例变量_session设置为request.getSession(true)的值(其中request是当前的HttpServletRequest)。
在我的Groovy脚本中,我做的第一件事就是创建一个MyRequest实例。其次,我检查Groovlet session对象的一个特定属性。对于我对脚本的第一个请求,这个session对象是空的,所以我得到一个空对象引用错误。对于脚本的第二个请求,定义了session对象,没有发生错误。
根据Groovlet文档,这种情况应该是预期的,因为在我的脚本中检查Groovlet的session对象是否存在之后,我没有显式地设置它。
我真的不想增加更多的复制粘贴代码到我的脚本(和任何未来的项目)。这是我创建MyRequest对象的原因之一--为任何实例化它的脚本定义session对象。那么,如何在session类中为我的Groovy脚本定义MyRequest对象?我可以以某种方式使用metaClass对象吗?
发布于 2011-11-30 18:26:41
Groovlet免费为您提供会话范围,不需要request.getSession()。
如果从您的脚本中可以这样做:
new MyRequest(session)然后给出一个松散的、非类型化的MyRequest类,如下所示:
class MyRequest {
def _session
MyRequest(sess) {
_session = sess
}
def nullSafe() {
if(_sess?.notExist) // do something...
}
}MyRequest方法可以安全地引用会话(前提是使用groovy安全(?)(操作员)。我已经离开了Groovlet,但是当我在滚动自己的Groovy时,Groovy专家建议在将会话、请求、响应等从脚本作用域传递到对象时使用线程局部变量.
https://stackoverflow.com/questions/8327694
复制相似问题