2011-11-02 3 views
0

두 개의 WAR 응용 프로그램이 있으며 두 응용 프로그램 간의 통신 모드는 서블릿을 통해 이루어집니다.RequestDispatcher가 무한 루프로 끝납니다.

내 응용 프로그램 (WAR A)은 다른 WAR에 서블릿 URL이있는 하위 창을 엽니 다 (WAR B라고 말하면 됨).

서블릿 (WAR B)은 데이터를 처리하므로 처리 된 데이터를 원래 애플리케이션의 서블릿 (예 : WAR A의 서블릿)으로 보내야합니다.

그러나이 프로세스는 무한 루프로 끝나며 WAR-A에서 보낸 URL 매개 변수도 null입니다.

아래 스크립트는 WAR가-B는 일부 URL의 매개 변수를 전달에서 서블릿의 URL과 자식 창을 엽니 다 : 여기

는 코드입니다. 다음은
function invokePlugin(invokeURL, custValJSON, meaCompPartJSON) { 
    window.open(invokeURL + '?custValJSON=' + custValJSON,''); 
} 

private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String custValJSON = request.getParameter("custValJSON"); 
    System.out.println("custValJSON : " + custValJSON); 

    CustomValues custVal = gson.fromJson(custValJSON, CustomValues.class); 

    if(custVal != null) { 
     System.out.println("Cust val details : " + custVal.getName()); 
     custVal.setValue("Satya"); 
    } 

    String destination = "/testPlannerPluginResult"; 

    RequestDispatcher reqDispatch = request.getRequestDispatcher(destination); 
    request.setAttribute("custValJSON", gson.toJson(custVal)); 

    if(reqDispatch != null) { 
     reqDispatch.forward(request, response); 
    } 
} 

는 누구의 아이디어가 있습니까 ... URL 매개 변수를 추출하고 데이터를 처리하고 다시 WAR-A의 서블릿에 다시 요청을 보내 WAR-B에서 서블릿 코드 이?

감사합니다,

사티 후 그냥 서블릿이 기본적으로 매번 자신을 호출하는 것을 의미

답변

1

. 지금까지 제공된 정보에서 원인을 즉시 보지 못했지만 분명히 getRequestDispatcher()에 전달 된 URL이 서블릿 자체의 URL과 일치합니다. (읽기 : 다른 WAR)를

RequestDispatcher reqDispatch = request.getRequestDispatcher(destination); 
request.setAttribute("custValJSON", gson.toJson(custVal)); 

극단적으로 다른 서블릿 컨텍스트에서 실행되는 서블릿을 호출 할 수 있습니다

나는 그러나 여기에 큰 실수를 참조하십시오. 먼저 다른 서블릿 컨텍스트를 얻고 ServletContext#getRequestDispatcher()을 사용하여 거기에 요청을 보내려면 ServletContext#getContext()이 필요합니다.

ServletContext otherServletContext = getServletContext().getContext("/otherContextPath"); 
RequestDispatcher dispatcher = otherServletContext.getRequestDispatcher(destination); 

이 경우에만 공유를 위해 컨텍스트가 표시되도록 두 개의 WAR이 모두 구성되어 있어야합니다. 예를 들어 Tomcat의 경우 crossContext="true"<Context>에 추가하여 수행해야합니다.

+0

web.xml 정의가 좋지 않은 스타일입니다. web.xml은 '/ *'와 같이 url-pattern을 가지므로 서블릿은 StackOverfow에서 반복적으로 호출됩니다. :) – Satya

관련 문제