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:

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-8) was last changed on 14-Aug-2014 15:38 by jim