向JSP发送请求并接收响应

时间:2012-08-14 13:41:59

标签: java jsp servlets 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类来实现此目的?

2 个答案:

答案 0 :(得分: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;
  }
}

答案 1 :(得分:1)

如果您正在使用Tomcat并且两个应用程序都部署到同一服务器实例中,那么您可以配置两个servlet应用程序以接受来自彼此的传入请求。这是通过context configuration中的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容器具有类似的配置交叉上下文功能的方法,您应该检查容器的配置文档。