简体   繁体   中英

Send request to JSP and receive response

I have the following scenario of integrating a third party application into my java application. The third party application is running in a different context than my java application. It provides a JSP which needs to be called with certain parameters such as authentication information based on which it generates a cookie value and sets it in the header. I need to call this JSP from my java application and then retrieve the headers from the response with the cookie value and set it to the new cookie that will be created in my application.

I was able to call the JSP using

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

The authn.jsp was able to retrieve all values sent authenticate and generate the cookie value. It then does the

response.setHeader(attr,val).

However, I am not sure how to read this response header back in my servlet. Is request.sendRedirect the correct way to do this? Do I need to use the HTTPURLConnection class to achieve this?

You need to use the HTTPURLConnection to read the headers. You cannot use response.sendRedirect(..) . Once you have received the headers, you can set response.setHeader(attr,val) in your code.

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

If your are using Tomcat and both applications are deployed into the same server instance then you could configure both servlet applications to accept incoming requests from each other. That's done by means of the crossContext attribute in the context configuration .

Then, from your servlet you could use a RequestDispatcher against the other web application:

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.
}

NOTE : Other servlet containers have similar ways of configuring the cross context feature, you should check your container's configuration documentation.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM