I am working on a project where I have running servlets packaged in a war that listen for requests and populate a foreign div on a separate page. An initial request is made to servlet (a) and if there is data to display, it renders that HTML. If there is NO data, it passes a query string to another servlet to handle the request and then renders a page with options to choose.
I am running Tomcat 6 with Windows Server 2008.
But I run into two problems:
- When I use redirect, I get no response from the servlet being
redirected to. I have some javascript alerts up that are never called by the (b)
servlet. I AM using relative paths and confirm the link is
correct in logs. - When I copy that link in step 1 in a new window, I see
the results. Just not when it’s embedded in another page that makes
the request. Why would that be? Is it possibly a limitation from the host page and not being able to render the response? - When I use a forward, I see the servlet response,
but then a new window opens. Thus taking the person away from the
original page. This would be great if the results render in the same page.
What’s the best practice to assure that I can “redirect” from an initial servlet call to another servlet using the response object from that first servlet?
A redirect returns a HTTP 302 response with the new URL in
Locationheader which the client needs to deal with. Basically, your JS code must check the response status code if it’s 302 and then extract theLocationheader and then re-send a new request on it. Repeat this until the response status code is 200.That it works when pasting the URL in browser’s address bar is because the browser already knows how to deal with 3nn responses properly. If you open up the network traffic tracker in browser’s webdeveloper toolset, then you’ll see that a second GET request is been fired on the new URL.
Another way, if the servlets run in the same container, is to just use
RequestDispatcher#forward()instead ofHttpServletResponse#sendRedirect().