2012-01-20 5 views
0

기본적으로 사용자에게 일부 서비스를 보여주는 엔터프라이즈 jsf 응용 프로그램이 있습니다.java.lang.IllegalStateException 두 Java EE 응용 프로그램 사이를 탐색하려고 할 때

엔터프라이즈 호스트의 서로 다른 부서는 하나의 웹 서버에있는 서로 다른 응용 프로그램과 링크를 응용 프로그램에 제공하여 액세스합니다.

나는이 난 다음 다른 applications.The에 대한 모든 요청을 리디렉션하고이를 통해 내 응용 프로그램에 RedirectServlet라는 Servlet 내 redirectservlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     LOGGER.debug("In doGet()"); 
     try{ 
      if(request.getParameter("URL") != null){ 
       LOGGER.debug("URL Found redirecting forward"); 
       String redirectUrl = request.getParameter("URL"); 
       response.sendRedirect(redirectUrl); 
      } 
     }catch(NullPointerException e){ 
      LOGGER.debug("URL not found setting new session parameters & redirecting forward"); 
      HttpSession session = request.getSession(true); 
      try { 
       response.sendRedirect(properties.getProperty(REDIRECTURL, true)); 
      } catch (Exception e1) { 
       LOGGER.debug("Expcetion with propertiesfile: ",e1); 
      } 
     } 
    } 

링크를 클릭 할 경우 어떻게 내가 이상 할 것은 (URL 매개 변수입니다 현재 있음) 특정 응용 프로그램으로 리디렉션합니다. 그렇지 않으면 응용 프로그램의 새 세션을 만들고 응용 프로그램 홈 페이지로 리디렉션합니다. 다른 응용 프로그램에서 사용자 logsout, 난 내 응용 프로그램 로 다시 리디렉션하고 때

이 내가 내 응용 프로그램을 다시 리디렉션하고 어떻게

public void Logout(){ 
     LOGGER.debug("In LogOut"); 
     try 
     { 
      HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
      HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse(); 
      HttpSession session = req.getSession(false); 
      LOGGER.debug("report session id:" + session.getId()); 
      res.sendRedirect(REDIRECTURL); 
      session.invalidate(); 
     }catch(IllegalStateException e){ 
      LOGGER.debug("Exception in LogOut", e); 
     } 
     catch (IOException e){ 
      LOGGER.debug("Exception in LogOut", e); 
     } 
    } 

난에 res.sendRedirect 줄에 다음 서버 오류 메시지가 무엇입니까 위의 코드는

HTTP Status 500 - 

type Exception report 

message 

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

javax.servlet.ServletException: Cannot forward after response has been committed 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:221) 
root cause 

java.lang.IllegalStateException: Cannot forward after response has been committed 
    org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:368) 
    org.apache.myfaces.trinidad.context.ExternalContextDecorator.dispatch(ExternalContextDecorator.java:44) 
    org.apache.myfaces.trinidad.context.ExternalContextDecorator.dispatch(ExternalContextDecorator.java:44) 
    org.apache.myfaces.trinidadinternal.context.FacesContextFactoryImpl$OverrideDispatch.dispatch(FacesContextFactoryImpl.java:267) 
    org.apache.myfaces.view.jsp.JspViewDeclarationLanguage.buildView(JspViewDeclarationLanguage.java:94) 
    org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:66) 
    org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:191) 

이것은 우리가 응용 프로그램을

사이의 세션을 관리하는 방법입니다 사용자가 처음으로 응용 프로그램에 로그인하면 DB의 일부 세부 정보에 저장되고 모든 응용 프로그램은 해당 세부 정보를 DB에서 확인합니다.

누군가가 이걸 해결하는 방법에 도움이 JSF 1.2아파치 트리니다드를 사용하는

두 응용 프로그램 중요한 시간입니다하시기 바랍니다.

+0

http://stackoverflow.com/ 질문/2123514/java-lang-illegalstateexception- 응답 후 전달할 수 없습니다 –

답변

2

상기 예외가 없어 내 변성 아웃() 메소드

public void Logout(){ 
     LOGGER.debug("In LogOut"); 
     try 
     { 
      HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
      HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse(); 
      HttpSession session = req.getSession(false); 
      LOGGER.debug("report session id:" + session.getId()); 
      session.invalidate(); 
      res.sendRedirect(REDIRECTURL); 
      FacesContext.getCurrentInstance().responseComplete(); 
     }catch(IllegalStateException e){ 
      LOGGER.debug("Exception in LogOut", e); 
     } 
     catch (IOException e){ 
      LOGGER.debug("Exception in LogOut", e); 
     } 
    } 
0
session.invalidate(); 
res.sendRedirect(REDIRECTURL); 

그것은 당신의 문제를 해결할 수 있습니다. 난() 메소드

여기
FacesContext.getCurrentInstance().responseComplete(); 

상기 아웃에 다음 라인을 추가 할 때

+0

응답 해 주셔서 감사합니다. 시도했습니다. 여전히 문제는 지속된다. – Sreeram

관련 문제