2012-02-15 72 views
1

我們必須部署在不同的Tomcat服務器兩個不同的應用。一個應用程序是使用JSF,Spring + hibernate技術開發的,另一個是使用普通Java EE Servlets技術開發的。如何從不同的應用程序訪問servlet上下文JSF

JSF應用程序與Servlet應用獲取數據交互,使用從JSF應用程序通過以下方式調用這個servlet:使用以下方式

URL url = new URL(「urlofservlets」); // http://application.com/servletName 

URLConnection conn = url.openConnection(); 

BufferedReader in = null; 

try {  
    in = new BufferedReader(new InputStreamReader(conn.getInputStream()));  
    in.readLine();  
}  
catch(Exception ex) {  
    logger.error(ex);  
} 

現在servlet響應顯示在JSF頁面:

<rich:modalPanel id="report_preview_modal_panel" moveable="false" minWidth="1200" minHeight="450">  
    <iframe id="report_preview_iframe" frameborder="2" src="${(rportController.reportPreviewUrl == null) ? 'about:blank' : reportController.reportPreviewUrl}" style="width:100%;height:390px;"></iframe> 
</rich:modalPanel> 

的iFrame的標記將顯示從servlet的HTTP響應(使用servlet的URL即reportController.reportPreviewUrl包含servlet URL)。

現在我們要實現是什麼,而不是加載在iframe標記的servlet的HTTP響應數據,數據必須在JSF數據表中。但是我們需要從JSF可以訪問servlet應用程序上下文的方式獲取來自servlet響應的數據。

所以,我們可以存儲在Servlet會話屬性的bean並訪問相同的JSF應用程序在JSF數據表中顯示的數據。這可能嗎?我們如何在JSF應用程序中獲取不同應用程序的上下文(即來自servlet)。有沒有辦法做到這一點?

+0

「不同的應用」 是很曖昧。你在談論1個WAR文件還是2個WAR文件?如果有兩個WAR文件,它們是否部署到相同的servletcontainer? – BalusC 2012-02-15 18:06:11

+0

是的...這兩個應用程序有他們單獨的WAR文件。但部署在兩臺不同機器上的不同tomcat服務器上,並有兩個不同的容器。 JSF使用FacesContext和Servlet應用程序使用ServletContext – 2012-02-18 07:21:33

回答

1

你不能直接從其他服務器訪問ServletContext中。但是,可以肯定暴露在另一個應用程序的對象以各種不同的方式:

  • 從「JSF應用程序」使用遠程接口創建了「servlet應用程序」,並訪問它的EJB。
  • 使用類似REST或SOAP的方式創建Web服務。如果您使用JAXB註釋,則可以非常乾淨地完成。
  • 擁有的servlet序列化對象,以類似的方式歸還給你在上面做了什麼,而在JSF應用程序反序列化它們。
+0

感謝您的回覆Jeremiah ...我們將嘗試您提出的上述方法... – 2012-02-18 07:17:23

相關問題