2011-11-30 3 views
1

Groovy 클래스 인 MyRequest이 각 HTTP 요청을 처리하는 데 사용됩니다. 생성자에서이 클래스는 인스턴스 변수 _sessionrequest.getSession(true)의 값으로 설정합니다. 여기서 request은 현재 HttpServletRequest입니다.클래스 내 Groovlet 세션 객체를 설정 하시겠습니까?

내 Groovy 스크립트에 내가 수행하는 첫 번째 작업은 MyRequest의 인스턴스를 만드는 것입니다. 둘째, Groovlet session 개체의 특정 속성을 확인합니다. 스크립트에 대한 나의 첫 번째 요청과 함께,이 session 객체는 null이므로 null 객체 참조 오류가 발생합니다. 스크립트에 대한 두 번째 요청 인 session 개체가 정의되고 오류가 발생하지 않습니다. 내가 명시 적으로 내 스크립트에 그 존재를 확인 후 Groovlet의 session 객체를 설정하지 않았기 때문에

Groovlet documentation에 따르면,이 상황은 예상해야한다.

정말 내 스크립트 (및 향후 프로젝트의 모든 것들)에 붙여 넣기 코드를 추가해야합니다. 이것이 MyRequest 개체를 만든 이유 중 하나입니다. 개체를 인스턴스화하는 모든 스크립트에 대해 session 개체를 정의해야합니다. 그렇다면 MyRequest 클래스 내에서 내 Groovy 스크립트에 대해 session 객체를 어떻게 정의 할 수 있습니까? 어떤 방식 으로든 metaClass 개체를 사용할 수 있습니까?

답변

0

Groovlet은 즉시 사용할 수있는 세션 범위를 제공하므로 request.getSession()이 필요하지 않습니다.

스크립트에서 당신이 할 경우

new MyRequest(session) 

다음 실수, 형식화되지 않은 MyRequest 클래스과 같이 주어진 :

class MyRequest { 
    def _session 
    MyRequest(sess) { 
     _session = sess 
    } 

    def nullSafe() { 
     if(_sess?.notExist) // do something... 
    } 
} 

MyRequest 방법 안전하게 세션을 참조 할 수 있습니다 (단, 당신이 안전 끝내 널 (null)을 사용하여 (?) 운영자). Groovlets에서 벗어났습니다. 그러나 Groovy 전문가는 세션, 요청, 응답 등을 객체에 전달할 때 Thread Locals를 사용하여 객체를 제안했습니다 ...

+0

HttpServletRequest I에서 이미 전달하고 있으므로 세션도 통과하지 못하도록하고 싶었습니다. 나는 그것이 작동해야 할 것 같아요. 고맙습니다. –

+0

죄송합니다, 나는 대답을 받아 들일 수 밖에 없었습니다. 나는 그것을 완전히 생각하지 않고 그것을 받아 들였다. 이 답변은 필자가 피하려고하는 문제를 실제로 해결하지 못한다. 프로젝트에서 작성한 모든 스크립트에서 세션 객체를 초기화한다. –

+0

@jsumners 문제는 없지만 동일한 문제가 있었지만 대상 객체에 groovlet 세션, 요청, 응답 등을 전달한 게이트웨이 스크립트를 사용하여 해결했습니다. 스크립트가 여러 개인 경우 GrooveServlet을 la Gaelyk 확장하고 MOP를 통해 세션을 "MyRequest"클래스에 주입해야 할 수도 있습니다. 또한 missingMethod, PropertyAccessInterceptor 또는 다른 MOP 도구를 사용하여 세션 상태를 가져 오거나 설정할 수 있습니다. Grails를 살펴 보자. 세션이 컨트롤러에 주입된다. 실제로 Grails를 사용하지 않는 이유에 대해 궁금한 점이 있습니까? – virtualeyes

관련 문제