2012-08-14 62 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