Permanent and Temporary Redirects in Java (Servlet/JSP)
Posted 2008-11-08 in Java by Johann.
Redirects in Servlets
To perform a permanent or temporary redirect in a Servlet, set the status property of the HttpServletResponse object to either SC_MOVED_PERMANENTLY (301) or SC_MOVED_TEMPORARILY (302) and set the Location header to the target URL.
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", "https://johannburkard.de/");
While the HttpServletResponse object already has a sendRedirect method, the specification says that it sends…
…a temporary redirect response to the client using the specified redirect location URL.
This is why I select the HTTP status code manually.
Redirects in JSPs
JSPs obviously take the same code as Servlets. Here is a sample redirection in a JSP.
<%@ page import="javax.servlet.http.*"><%
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", "https://johannburkard.de/"); %>
Redirects using Refresh header
Some web analytics packages do not analyze URL parameters if the HTTP status code is not 200. In this scenario, a redirect using the Refresh header can also be used.
String target = "https://johannburkard.de";
response.setContentType("text/html");
response.setContentLength(13);
response.addHeader("Refresh",
new StringBuilder(target.length() + 5).append("0;url=").
append(target).toString());
ServletOutputStream out = response.getOutputStream();
out.print("<html></html>");
This code is taken from my ReDirector servlet which uses XML files for redirection targets.
Debugging Redirection
wget is the Swiss army knife of HTTP tools and I frequently use its debug mode (-d) to solve HTTP problems.
> wget -d http://127.0.0.1:8081/servlet/com.eaio.TestServlet
DEBUG output created by Wget 1.10.2 on Windows.
--10:15:54-- http://127.0.0.1:8081/servlet/com.eaio.TestServlet
=> `com.eaio.TestServlet'
Connecting to 127.0.0.1:8081... seconds 0.00, connected.
Created socket 1952.
Releasing 0x003a49a8 (new refcount 0).
Deleting unused 0x003a49a8.
---request begin---
GET /servlet/com.eaio.TestServlet HTTP/1.0
User-Agent: Wget/1.10.2
Accept: */*
Host: 127.0.0.1:8081
Connection: Keep-Alive
---request end---
HTTP request sent, awaiting response...
---response begin---
HTTP/1.1 301 Moved Permanently
Date: Sat, 08 Nov 2008 09:15:56 GMT
Server: Orion/2.0.7
Connection: Close
Content-Type: text/plain
Location: https://johannburkard.de/
---response end---
Subscribe
RSS 2.0, Atom or subscribe by Email.
Top Posts
- DynaCloud - a dynamic JavaScript tag/keyword cloud with jQuery
- 6 fast jQuery Tips: More basic Snippets
- xslt.js version 3.2 released
- xslt.js version 3.0 released XML XSLT now with jQuery plugin
- Forum Scanners - prevent forum abuse
- Automate JavaScript compression with YUI Compressor and /packer/