JavaXT
|
|
CGI SupportThe javaxt-server library makes it easy to host CGI applications. In most cases, all you need to do is create a Servlet that extends the CgiServlet and set the path to the CGI executable in the constructor. Here's an example of a CGI Servlet based on UMN Mapserver. In this example, all you have to do is pass the path to the Mapserver executable and you're off. package www.kartographia.com; import javaxt.http.servlet.*; public class MapServer extends CgiServlet { public MapServer(){ super(new java.io.File("D:\\Software\\GDAL\\FWTools2.2.8\\bin\\mapserv.exe")); } }Here's a slightly more sophisticated example of a CGI Servlet based on UMN Mapserver. In this example, we are masking the "map" querystring parameter by overriding the getParameters() method. This example is useful because Mapserver expects a file path to a map file. However most admins really don't want to expose any information of the server's file system. package www.kartographia.com; import javaxt.http.servlet.*; import java.util.HashMap; //****************************************************************************** //** UMN MapServer //*****************************************************************************/ /** * CGI Servlet used to generate maps using the UMN Mapserver. * ******************************************************************************/ public class MapServer extends CgiServlet { private final static HashMap<String, String> maps = new HashMap<String, String>(); private final static String QUERY_STRING = "QUERY_STRING="; //************************************************************************** //** Constructor //*************************************************************************/ /** Creates a new instance of this class. */ public MapServer(){ super(new java.io.File("D:\\Software\\GDAL\\FWTools2.2.8\\bin\\mapserv.exe")); maps.put("world.map", "D:\\Maps\\world.map"); //<--Remember to update the "wms_onlineresource" to point to the right URL! } //************************************************************************** //** getParameters //*************************************************************************/ /** Overrides the native getParameters() method by updating the "map" * parameter found in the requested URL. This allows us to hide the * physical location of the map file. */ protected java.util.ArrayList<String> getParameters(HttpServletRequest request){ java.util.ArrayList<String> params = super.getParameters(request); //Find querystring in the list of CGI parameters String queryString = null; for (String param : params){ if (param.startsWith(QUERY_STRING)){ queryString = param.substring(QUERY_STRING.length()); break; } } //Set the "map" variable javaxt.utils.URL url = new javaxt.utils.URL("http://test?" + queryString); url.setParameter("map", maps.get("world.map")); //Update the CGI parameters params.remove(QUERY_STRING + queryString); params.add(QUERY_STRING + url.getQueryString()); return params; } } |