!!!Moving the Wikis
So I moved my JSPWiki that was running Tomcat from port 9080 to running on port 80.
Now that alone might not have been so tough, but then I also had to change the DNS entries. So my mapping table was like:
* oldbaseurl = http://willeke.com:9080/wikildap/ maps to: newbaseurl = http://ldapwiki.willeke.com/
!Redirect All Traffic
Note as the idea was to redirect ALL traffic hitting this Tomcat Instance, this was installed at the ROOT server. The path would be: /.../tomcat/webapps/ROOT/WEB-INF
If you wanted to only redirect some traffic, you would need to change the code to NOT go to the defaulturl or install this in a specific application context container.
!!Resource File
The redirction is based on entries within the Redirect.properties file.
The file for mine looks like:
{{{
# properties
defaulturl=http://ldapwiki.willeke.com/
oldbaseurl1=http://willeke.com:9080/wikildap/
newbaseurl1=http://ldapwiki.willeke.com/
oldbaseurl2=http://willeke.com:9080/wikiwilleke/
newbaseurl2=http://wiki.willeke.com/
oldbaseurl3=http://willeke.com:9080/classof1968/
newbaseurl3=http://classof1968.willeke.com/
oldbaseurl4=http://willeke.com:9080/wikiwillekegenealogy/
newbaseurl4=http://genealogy.willeke.com/
oldbaseurl5=http://www.willeke.com:9080/wikildap/
newbaseurl5=http://ldapwiki.willeke.com/
oldbaseurl6=http://www.willeke.com:9080/wikiwilleke/
newbaseurl6=http://wiki.willeke.com/
oldbaseurl7=http://www.willeke.com:9080/classof1968/
newbaseurl7=http://classof1968.willeke.com/
oldbaseurl8=http://www.willeke.com:9080/wikiwillekegenealogy/
newbaseurl9=http://genealogy.willeke.com/
}}}
The "defaulturl" was used for anything that did not map.
!!!Query Strings
The URLs for the wiki provided some challenges.
A typical URL might be:
{{{http://willeke.com:9080/wikildap/Wiki.jsp?page=UsefullCommandsForEdirectory}}}
This URL would have to end up like:
{{{http://ldapwiki.willeke.com/Wiki.jsp?page=UsefullCommandsForEdirectory}}}
!!!Methodology
Not being one that wants to know all the bits and bytes of things; but being more interested in the concepts of how thing work.
The oldbaseURLs were put in a HashMap as the key to the newBaseURLs.!!!The Actual Java Code
I am sure there are some Java gurus that would cringe at this but it appears to work.
{{{
package com.willeke.web;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Redirect extends HttpServlet
{
/**
*
*/
private static final long serialVersionUID = 5503481944024425059L;
private static Logger log = Logger.getLogger(Redirect.class.getName());
private static final ResourceBundle bundle = ResourceBundle.getBundle("Redirect");
HashMap<String, String> urlList = new HashMap<String, String>();
private static String DEFAULTSITE = bundle.getString("defaulturl");
/**
* Constructor of the object.
*/
public Redirect()
{
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy()
{
log.info("destroy");
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
log.info("received a Get");
// inCommingUrl="http://willeke.com:9080/wikildap/Wiki.jsp?page=JimWillekeResume";
String site = parseURL(request);
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", site);
response.setContentType("text/html");
Enumeration enumer = request.getAttributeNames();
String query = request.getQueryString();
while (enumer.hasMoreElements())
{
String name = (String) enumer.nextElement();
String value = (String) request.getAttribute(name);
response.addHeader(name, value);
}
PrintWriter out = response.getWriter();
out.flush();
out.close();
}
/**
* The doPost method of the servlet. <br>
* This method is called when a form has its tag value method equals to
* post.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// InputStream is = request.getInputStream();
log.info("received a post");
// inCommingUrl="http://willeke.com:9080/wikildap/Wiki.jsp?page=JimWillekeResume";
String site = parseURL(request);
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", site);
response.setContentType("text/html");
Enumeration enumer = request.getAttributeNames();
while (enumer.hasMoreElements())
{
String name = (String) enumer.nextElement();
String value = (String) request.getAttribute(name);
response.addHeader(name, value);
}
PrintWriter out = response.getWriter();
out.flush();
out.close();
}
private String parseURL(HttpServletRequest request)
{
String requestURL = request.getRequestURL().toString();
String query = request.getQueryString();
log.info("reqURL = " + request.getRequestURL());
String site = DEFAULTSITE;
Set<String> keyset = urlList.keySet();
Iterator<String> it = keyset.iterator();
while (it.hasNext())
{
String testUrl = (String) it.next();
if (requestURL.startsWith(testUrl))
{
String prefix = (String) urlList.get(testUrl);
String postfix = request.getRequestURL().substring(testUrl.length());
if (postfix.length() > 0)
{
site = prefix + postfix;
} else
{
site = prefix;
}
if (!(query == null))
{
if (query.length() > 0)
{
log.info("queryString: " + query);
site = site + "?" + query;
}
}
}
}
log.info("Sent to : " + site);
return site;
}
/**
* Returns information about the servlet, such as author, version, and
* copyright.
*
* @return String information about this servlet
*/
public String getServletInfo()
{
return "This is my redirect servlet";
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException
* if an error occurs
*/
public void init() throws ServletException
{
log.info("Starting INIT");
/**
* http://willeke.com:9080/wikildap/ - http://ldapwiki.willeke.com/
* http://willeke.com:9080/wikiwilleke/ - http://wiki.willeke.com/
* http://willeke.com:9080/classof1968/ -
* http://classof1968.willeke.com/
* http://willeke.com:9080/wikiwillekegenealogy/ -->>
* http://genealogy.willeke.com/
*/
// HashMap urlList = new HashMap();
bundle.getString("defaulturl");
for (int i = 1; i < 10; i++)
{
String oldBaseUrl = "oldbaseurl" + i;
String newBaseUrl = "newbaseurl" + i;
try
{
String oldone = bundle.getString(oldBaseUrl);
String newone = bundle.getString(newBaseUrl);
log.info("Adding OLD URL: " + oldone);
log.info(" mapping to New URL: " + newone);
urlList.put(oldone, newone);
} catch (RuntimeException e)
{
break;
}
}
log.info("Leaving INIT");
// Put your code here
}
}
}}}
!! More Information
There might be more information for this subject on one of the following:
[{ReferringPagesPlugin before='*' after='\n' }]