2012-08-14 31 views
1

我有以下場景將第三方應用程序集成到我的Java應用程序中。第三方應用程序運行在與我的Java應用程序不同的上下文中。它提供了一個需要使用特定參數調用的JSP,例如基於它生成cookie值的認證信息並將其設置在標題中。我需要從我的Java應用程序中調用此JSP,然後使用cookie值從響應中檢索標題,並將其設置爲將在我的應用程序中創建的新Cookie。發送請求到JSP並收到回覆

我能夠使用

response.sendRedirect("http://<host>:<port>/<context>/authn.jsp"). 

的authn.jsp能夠檢索發送認證所有值併產生cookie的值來調用JSP。然後它是

response.setHeader(attr,val). 

但是,我不知道如何讀取我的servlet迴應這個響應頭。是request.sendRedirect正確的方法來做到這一點?我是否需要使用HTTPURLConnection類來實現此目的?

回答

2

您需要使用HTTPURLConnection才能閱讀標題。你不能使用response.sendRedirect(..)。一旦收到標題,您可以在代碼中設置response.setHeader(attr,val)

URL url = new URL("JSPURL"); 
URLConnection conn = url.openConnection(); 
for (int i = 0;; i++) { 
    String headerName = conn.getHeaderFieldKey(i); 
    String headerValue = conn.getHeaderField(i); 
    System.out.println(headerName + "==="); 
    System.out.println(headerValue); 
    if (headerName == null && headerValue == null) { 
    break; 
    } 
} 
+0

請求如何使用URLConnection從JSP傳回到我的servlet? – 2012-08-16 22:46:29

+0

'request'始終在您的應用程序或'servlet'中。你正在建立一個http連接並從那裏讀取'headers',並在你的應用程序或servlet中設置你需要的頭文件。 – 2012-08-17 13:33:52

+0

我能夠成功打開到JSP的連接並接收響應頭。但是,我無法檢索在JSP中設置的標頭。我可以列出其他標題,例如服務器,日期,內容類型等,但不包括使用cookie值設置的標題。我在這裏錯過了什麼? – 2012-08-20 19:15:50

1

如果您正在使用Tomcat和兩個應用程序部署到同一服務器實例,那麼你可以兩者servlet應用程序配置爲接受來自對方傳入的請求。這是通過context configuration中的crossContext屬性完成的。

然後,從你的servlet,你可以使用一個RequestDispatcher對其他Web應用程序:

RequestDispather dispatcher = request.getRequestDispatcher("/<context>/authn.jsp"); 
dispatcher.forward(request, response); 
// Process the headers 
Enumeration<String> headerNames = response.getHeaderNames(); 
while(headerNames.hasMoreElements()) { 
    Collection<String> values = response.getHeaders(headerNames.nextElement()); 
    // do whatever with the header values. 
} 

注意:其他servlet容器具有配置跨語境特徵的類似的方式,你應該檢查你的容器的配置文檔。

+0

這兩個應用程序都部署在同一臺服務器上。我可以使用getRequestDispatcher並將請求從servlet轉發到JSP,但是一旦請求被傳遞給JSP,響應就不會回到我的servlet。 JSP處理它並設置標題,但由於請求沒有返回到我的servlet,我無法讀回它。我如何獲得迴應到我的servlet。由於它是由第三方公司交付的,我無法修改JSP。 – 2012-08-16 22:42:51

+0

您的servlet中的執行流應該在「forward」調用之後繼續,除非調用該目標JSP時引發異常。 – 2012-08-16 22:51:40

+0

目標JSP沒有拋出任何異常。成功消息在頁面末尾引發,這就是瀏覽器上顯示的內容。 – 2012-08-17 01:25:49