- From: Brian Millett <bpm@techapp.com>
- Date: Fri, 14 Mar 1997 17:53:05 -0600
- To: www-jigsaw@w3.org
Anselm, I am trying to have a resource generate a multipart mime replace page. The general idea is I want a mime type generated of MimeType.APPLICATION_X_JAVA_AGENT sent with some information, then replace that part with a regular text/html Content-type. But I can not get the Content-type of the reply set! The part of my code: ourLocations = (DirectoryLocations)Naming.lookup( DirectoryLocations.REGISTERED_NAME ); Vector vector = ourLocations.getDefaultList(); just returns a vector of host names where I have a Directory Service object running. Here is the code: (at the end is a trace of telnetting and GETing the page). When you look at the trace, you can see that the Content-Type is not being reset: "Content-Type: text/html" What am I doing wrong? Thanks // DirSvcLocator.java // $Id: DirSvcLocator.java,v 1.0 // (c) COPYRIGHT Technology Applications Inc, 1997. // Please first read the full copyright statement in file COPYRIGHT.html package w3c.jigsaw.dirsvc; import java.net.InetAddress; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.Remote; import java.rmi.RemoteException; import java.util.Enumeration; import java.util.Vector; import COM.techapp.dirSvc.server.DirectoryLocations; import w3c.tools.store.*; import w3c.www.http.HTTP; import w3c.jigsaw.http.*; import w3c.jigsaw.resources.*; import w3c.jigsaw.forms.*; import w3c.jigsaw.auth.*; import w3c.jigsaw.html.*; import w3c.www.mime.*; public class DirSvcBootStrap extends HTTPResource { // The client class application attribute protected static int ATTR_CLASSNAME = -1 ; // The directory where the DirSvcLocator app is attribute protected static int ATTR_DIRSVC_URL = -1 ; private DirectoryLocations ourLocations; static { Attribute a = null ; Class cls = null ; try { cls = Class.forName("w3c.jigsaw.dirsvc.DirSvcBootStrap"); } catch (Exception ex) { ex.printStackTrace() ; System.exit(1) ; } // Register the client class attribute: a = new StringAttribute("Client_Name", null, Attribute.EDITABLE); ATTR_CLASSNAME = AttributeRegistry.registerAttribute(cls, a) ; // Register the DirSvcLocator attribute: a = new StringAttribute("DirSvcLocator_URL", null, Attribute.EDITABLE); ATTR_DIRSVC_URL = AttributeRegistry.registerAttribute(cls, a) ; } // Get the client name attribute as a string public String getClassName() { return getString(ATTR_CLASSNAME, null); } // Get the URL of the bootstrap resource public String getURLofDirSvcLocator() { return getString(ATTR_DIRSVC_URL, null); } public Reply createMultiPartReply(Request request, int status) { Reply reply = super.createDefaultReply(request, status); try { MimeType multipart = new MimeType("multipart/x-mixed-replace;boundary=*BOUNDARY*"); reply.setNoStore(true); reply.setContentType(null); reply.setContentType(multipart); reply.addPragma("no-cache"); return reply; } catch ( Exception e ) { // We ignore this until the last time. HtmlGenerator g = new HtmlGenerator( "ERROR Dude!!" ); g.append("createMultiPartReply caught the Exception: " + e); g.append("Message is ", e.getMessage()); e.printStackTrace(); reply.setStream(g); return reply; } } /** * Handle a post & get request equally. * @param request The request to handle. * @param data The form decoded data. * @return An HTTP Reply instance. */ public Reply get(Request request) { Reply reply = createMultiPartReply(request, HTTP.OK); reply.setStream(makeBootStrapPage()); return reply; } public Reply post(Request request) { Reply reply = createMultiPartReply(request, HTTP.OK); reply.setStream(makeBootStrapPage()); return reply; } public HtmlGenerator makeBootStrapPage() { String clientName = getClassName(); String dirSvcLocator = getURLofDirSvcLocator(); HtmlGenerator g = new HtmlGenerator( "Start " + clientName + " Client Application" ); g.append( " This is a preamble that is ignored\n" ); g.append( "\n--*BOUNDARY*\n" ); g.append( "Content-Type: application/x-java-agent\n\n" ); try { ourLocations = (DirectoryLocations)Naming.lookup( DirectoryLocations.REGISTERED_NAME ); Vector vector = ourLocations.getDefaultList(); g.append( clientName + " -hosts " ); for ( Enumeration enumeration = vector.elements(); enumeration.hasMoreElements(); ) { InetAddress current = (InetAddress) enumeration.nextElement(); String aHost = current.getHostName(); g.append(aHost, " "); } g.append( "\n\n" ); g.append( "\n--*BOUNDARY*\n" ); g.append( "Content-Type: text/html\n\n" ); g.append( "<HTML><HEAD><TITLE>Start ", clientName, " Client Application</TITLE></HEAD><BODY>" ); g.append( "<h1>"+clientName+" Application Page</h1>" ); g.append( "\n--*BOUNDARY*--\n" ); return g; } catch ( Exception e ) { // We ignore this until the last time. g.append("findDirSvcLocations caught RemoteException: " + e); g.append("Message is ", e.getMessage()); e.printStackTrace(); return g; } } } -----TRACE---- vlad: telnet vlad 8001 Trying 204.233.138.15 ... Connected to vlad. Escape character is '^]'. GET /CGI/BootStrap HTTP/1.0 HTTP/1.0 200 OK Cache-Control: no-store Date: Fri, 14 Mar 1997 23:37:19 GMT Pragma: no-cache Content-Length: 476 Content-Type: text/html Last-Modified: Fri, 14 Mar 1997 23:30:44 GMT Server: Jigsaw/1.0alpha5 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Draft//EN"> <HTML><HEAD> <TITLE>Start Holiday Client Application</TITLE> </HEAD> <BODY> This is a preamble that is ignored --*BOUNDARY* Content-Type: application/x-java-agent Content-Transfer-Encoding: Quoted-printable Holiday -hosts vlad.terraweb.com --*BOUNDARY* Content-Type: text/html <HTML><HEAD><TITLE>Start Holiday Client Application</TITLE></HEAD> <BODY><h1>Holiday Application Page</h1> --*BOUNDARY*-- </BODY> </HTML>Connection closed by foreign host. vlad: -- Brian Millett Technology Applications Inc. "Heaven can not exist, (314) 530-1981 If the family is not eternal" bpm@techapp.com F. Ballard Washburn
Received on Friday, 14 March 1997 18:48:36 UTC