如何从JSF中的其他应用程序访问servlet上下文

时间:2012-02-15 17:35:16

标签: java jsf

我们在不同的Tomcat服务器上部署了两个不同的应用程序。一个应用程序是使用JSF,Spring + hibernate技术开发的,另一个是使用普通Java EE Servlets技术开发的。

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);    
}

现在,使用以下方法在JSF页面中显示servlet响应:

<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 Data表中显示数据。但是我们需要从servlet响应中获取数据,以便JSF可以访问servlet应用程序上下文。

因此,我们可以将bean存储在servlet会话属性中,并在JSF应用程序中访问它以在JSF数据表中显示数据。这可能吗?我们如何在JSF应用程序中获取不同应用程序的上下文(即来自servlet)。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

您无法直接从其他服务器访问ServletContext。但是,您当然可以通过多种方式在另一个应用程序中公开对象:

  • 在“servlet app”中创建一个EJB,并使用远程接口从“JSF app”访问它。
  • 使用REST或SOAP等方法创建Web服务。如果您使用JAXB注释,则可以非常干净地完成。
  • 让servlet序列化对象,以与上面所做的相似的方式返回它们,并在JSF应用程序中反序列化它们。