簡體   English   中英

向JSP發送請求並接收響應

[英]Send request to JSP and receive response

我有以下方案將第三方應用程序集成到我的Java應用程序中。 第三方應用程序在與我的java應用程序不同的上下文中運行。 它提供了一個JSP,需要使用某些參數調用,例如基於它生成cookie值的身份驗證信息,並在頭中設置它。 我需要從我的java應用程序調用此JSP,然后從響應中檢索帶有cookie值的標頭,並將其設置為將在我的應用程序中創建的新cookie。

我能夠使用調用JSP

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

authn.jsp能夠檢索發送身份驗證的所有值並生成cookie值。 它然后做了

response.setHeader(attr,val).

但是,我不知道如何在我的servlet中讀回這個響應頭。 request.sendRedirect是否有正確的方法來執行此操作? 我是否需要使用HTTPURLConnection類來實現此目的?

您需要使用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;
  }
}

如果您正在使用Tomcat並且兩個應用程序都部署到同一服務器實例中,那么您可以配置兩個servlet應用程序以接受來自彼此的傳入請求。 這是通過上下文配置中的crossContext屬性完成的。

然后,從您的servlet中,您可以對另一個Web應用程序使用RequestDispatcher

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容器具有配置交叉上下文功能的類似方法,您應該檢查容器的配置文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM