Friday, October 17, 2008

Redirect from a JSP page (to another server)

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.

Is using response.sendRedirect(...) ok/best-practice?
The short answer, is it's fine. In summary, there are four approaches I can think of:

Approach #1: Scriptlet to sendRedirect


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

<c:redirect url=""/>

or scriptlets again:
<c:redirect url="<%=scriptlet logic%>"/>

Sure, it's 'pure' XML but you'll need the taglib definition 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.
  <meta http-equiv="Refresh" content="0; url=">

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.

Approach #4: Javascript

As above, you could get the JSP to produce a HTML page that contains javascript to perform the redirect.
<script type="text/javascript">
window.location = "";

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

So it saves you from 2 lines of servlet (or scriptlet) code:
response.setHeader("Location", "");

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.

Friday, October 10, 2008

Comments in JSON

comments JSON javascript

Can you have comments in JSON?

A discussion leading to the answer is on the Bytes IT forum.

Basically, though it's not defined in the JSON Grammar - on - you can use slash-star /* ... */ comments to get most(?) javascript engines to ignore the comment text.

For example:
<script type="text/javascript">
    var nested_arrays = {
        cities: [
            ["Sydney", "Melbourne", "Canberra"]  /* Australia */
          , ["London", "Birmingham"]             /* UK */
          , ["Los Angeles", "New York"]          /* US */