best practice tips JSP redirect XML
<jsp:forward> is not for redirecting to an external server (and the address you forward to will have access the request attributes and parameters, which may be desirable, see discussion here: when to use response redirect and jsp forward.
The short answer, is it's fine. In summary, there are four approaches I can think of:
Approach #1: Scriptlet to sendRedirect
<% response.sendRedirect("http://www.example.com"); %>
This has worked since the introduction of JSPs (see: Implementing a Redirect in a JSP Page) ... sometimes you need the servlet API in your JSP page either because there's other content (eg HTML) that makes it reasonable not to be a pure servlet. Other times it's just convenient to have a text file compiled on the fly.
Though there are many that would disagree (Sciptlet snobs? see How to redirect a page in JSP - I don't see why you'd get wound up about scriptlets. Why would you write a servlet when one line of code in a text file gives you the same result?).
Approach #2: Use Apache JSTL and the c:redirect tag
or scriptlets again:
<c:redirect url="<%=scriptlet logic%>"/>
Sure, it's 'pure' XML but you'll need the
taglibdefinition in the JSP file and include the JSTL jars in your web application - as discussed in the notes for a previous post.
Approach #3: Refresh meta tag
You could get the JSP to produce a HTML page that contains the Refresh meta tag.
<html> <head> <meta http-equiv="Refresh" content="0; url=http://www.example.com/"> </head> <body></body> </html>
Where 0 is the delay in seconds. If more than zero, you'd probably want to put some text on the page to explain what's happening.
You could use setTimeout to get the redirect to happen after a period of milliseconds.
Out of curiosity I checked TCP monitor for what the browser is actually receiving when you use Approach #1 or #2 (sendRedirect or c:redirect)
HTTP/1.1 302 Moved Temporarily Location: http://www.example.com
So it saves you from 2 lines of servlet (or scriptlet) code:
response.setStatus(302); response.setHeader("Location", "http://www.example.com");
So the difference to Approaches #3 & #4 isn't great or much more inefficient really, in all cases it's up to the browser to go to the specified address.