2011-02-07 13 views
1

서블릿을 사용하는 혼합 된 상황에서 작업하고 있습니다. & Struts2.ServletActionContext.getRequest()가 NULL을 반환합니다.

나는 HTTPServlet을 호출하고 있으며 데이터를 처리하고있다.

그런 다음 DB에 데이터를 삽입하기 위해 struts API를 호출해야합니다.

나는 HTTPSession도 사용하고 있습니다.

그래서 나는 HttpRequest를 얻으려면
ServletActionContext.getRequest() 

를 호출하고 다음 점에서 세션 액션 클래스를 스트럿.

서블릿에서 Struts Action 클래스를 호출 중입니다.

그러나

ServletActionContext.getRequest() 

는 항상 NULL을 반환한다.

웹에서 호출되지 않기 때문입니까?

답변

5

먼저 ServletActionContextActionContext은 모두 요청 및 응답과 같은 요청 개체를 저장하기 위해 ThreadLocal을 사용합니다. 이것은 Struts2에 의해 처리됩니다. 서블릿에서 요청을 시도하면 요청은 서블릿으로 라우팅되었으므로 null을 반환합니다. 따라서 Struts2는 요청에 대한 작업 컨텍스트를 만들지 않았습니다.

Struts2는 Servlet API보다 상위 레벨의 추상화입니다. 서블릿 내에서 Struts2 액션을 호출한다는 사실은 입니다. 실제로는입니다.

서블릿과 작업 모두에서 일반적인 프로세스를 수행해야하는 경우 프로세스를 처리하는 별도의 클래스를 만든 다음 (데이터베이스에 데이터 삽입) 서블릿과 작업 모두에서 해당 클래스를 호출하십시오 .

그럴 계획이 아니라면 서블릿 및 동작 코드의 예와 함께 자세한 내용을 제공해주십시오.

+0

안녕하세요. 스티븐 .. 제 개념을 명확히 해 주셔서 감사합니다. 서블릿에서 struts를 호출하는 이유를 시나리오로 게시하려고합니다. –

+0

나는 Smartgwt & Struts2에서 일하고있다. 내가 struts2 컨트롤러 및 smartgwt 프론트 엔드로 나는 동적 페이지를 생성 오전 사용하고 있습니다. 나는 abget 완료된 작업을 알리기 위해 클라이언트 브라우저에 응답을 생성해야하는 상황이 있습니다. 하지만 Struts2를 사용하여 리디렉션 할 수있는 페이지 이름이 없으므로 Struts2를 사용하여이를 수행 할 수 없습니다. 그래서 저는 Servlet을 사용하여 응답을 생성했습니다. –

+0

@HardikMishra struts2 httpheader 결과를 사용하면 머리글 만 반환 할 수 있으므로 페이지가 필요 없습니다. 난 항상 페이지를 반환하지 않는 내 아약스 요청에 사용합니다. http://struts.apache.org/release/2.3.x/docs/httpheader-result.html –

관련 문제