- From: Jeff Dripps <jeff@macalot.com>
- Date: Fri, 9 Aug 1996 14:38:39 -0400
- To: www-jigsaw@w3.org
Hi folks, I wrote a really simple filter that I thought would be great for end users configuring Jigsaw. It's purpose was to eliminate having to hand type many of the admin URLs discussed in the configuration tutorials. It's goal was to replace embedded tags with the users actual host name and port number in any html document the filter was applied to. For example in the configuration.html example below, the tag <!--your.host.name--> is replaced, resulting in the ability to just click the link to configure rather than copy/paste it in. Point your favorite browser to <A HREF="http://<!--your.host.name-->/Admin/PropertiesEditor">/Admin/Properties Editor</A>. This brings up a form, containing a number of fields. Below are three more links: The below filter works, but the problem is, it only replaces the first instance of the found tag in the document and skips subsequent tags. Could someone please explain to me what I am doing wrong. Many thanks! sinc, -jeff /* * @(#)HostURLFilter.java 0.01 9 Aug. 96 Jeff Dripps * */ package w3c.jigsaw.contrib; import w3c.jigsaw.http.*; import w3c.jigsaw.resources.*; import java.io.*; import java.lang.*; import java.util.*; import java.net.*; /** * The target is to replace a tag in an html document with the host name and port number. * * @version 0.01 9 Aug 1996 * @author Jeff Dripps */ public class HostURLFilter extends ResourceFilter { protected final static String URL_TAG = "<!--your.host.name-->"; // tag to replace static { Attribute a = null ; Class cls = null ; try { cls = Class.forName("w3c.jigsaw.contrib.HostURLFilter") ; } catch (Exception ex) { ex.printStackTrace() ; System.exit(1) ; } } /** * @param request The request being processed. */ public synchronized int ingoingFilter(Request request) { return CallOutgoing ; } /** * Take the input stream and re-create a new stream for reply * with replace of <!--your.host.name--> tag with host info. * * @param request The request being processed. * @param reply Reply to send to client */ public Reply outgoingFilter(Request request, Reply reply) throws HTTPException { // Open the original stream InputStream in = reply.openStream() ; if ( in == null ) { // System.out.println("InputStream == null"); return reply ; } // create a DataInputStream for reading document lines DataInputStream ds = new DataInputStream(in); if (ds == null) { // System.out.println("DataInputStream == null"); return reply; } String strTmp; StringBuffer buffer = new StringBuffer(); int nPos = -1; try { // Read the lines while ((strTmp = ds.readLine()) != null) { // System.out.println(strTmp); // test if the line contains URL_TAG if ((nPos = strTmp.indexOf(URL_TAG)) != -1) { System.out.println("host tag found"); // replace the tag with host info strTmp = insertURL(request, strTmp, nPos); } buffer.append(strTmp).append("\n"); } } catch (IOException e) { } // create a new stream StringBufferInputStream strIS = new StringBufferInputStream(buffer.toString()); // set the replay stream reply.setStream(strIS); return reply; } /** * Replace the tag with the host name and port number * * @param strIn String in input * @param nPos start position of tag * @return String replaced */ protected String insertURL(Request request, String strIn, int nPos) { String host = null; StringBuffer strOut = new StringBuffer(strIn.substring(0, nPos)); httpd server = request.getClient().getServer() ; String port = new Integer (server.getLocalPort()).toString(); InetAddress sadr = server.getInetAddress() ; try { host = sadr.getLocalHost().getHostName() ; } catch (UnknownHostException e) { host = null ; } strOut.append(host); strOut.append(":"); strOut.append(port); strOut.append(strIn.substring(nPos + URL_TAG.length())); return strOut.toString(); } }
Received on Friday, 9 August 1996 14:39:22 UTC