⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 admincontext.java

📁 很棒的web服务器源代码
💻 JAVA
字号:
// AdminContext.java// $Id: AdminContext.java,v 1.10 2003/02/28 10:33:03 ylafon Exp $// (c) COPYRIGHT MIT and INRIA, 1996.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.jigsaw.admin;import java.io.BufferedInputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintStream;import java.util.Hashtable;import java.util.zip.GZIPInputStream;import java.net.URL;import org.w3c.www.mime.MimeType;import org.w3c.www.http.HTTP;import org.w3c.www.http.HttpCredential;import org.w3c.www.http.HttpEntityMessage;import org.w3c.www.http.HttpMessage;import org.w3c.www.http.HttpReplyMessage;import org.w3c.www.http.HttpRequestMessage;import org.w3c.www.protocol.http.HttpManager;import org.w3c.www.protocol.http.Reply;import org.w3c.www.protocol.http.Request;/** * The client side Admin context. */public class AdminContext {    public static final boolean debug = false;    public static MimeType conftype = null;    static {	try {	    conftype = 	     new MimeType("application/xml;type=jigsaw-config;charset=UTF-8");	} catch (Exception ex) {	    ex.printStackTrace();	    System.exit(1);	}    }    /**     * Cached attribute descriptions:     */    protected Hashtable cachedattrs = new Hashtable();    /**     * The root URL for the target admin serv(l)er     */    protected URL server = null;    /**     * The RemoteRoot resource for all administered servers.     */    protected RemoteResource root = null;    /**     * The HTTP manager used to access the remote admin server.     */    protected HttpManager http = null;    /**     * The Admin protocol decoder.     */    protected AdminReader reader = null;    /**     * The Admin protocol encoder.     */    protected AdminWriter writer = null;    /**     * The credential used for authentification     */    protected HttpCredential credential = null;    protected InputStream getInputStream(Reply reply) 	throws IOException    {	if (reply.hasTransferEncoding("gzip"))	    return new GZIPInputStream(reply.getInputStream());	else	    return reply.getInputStream();    }    protected String getContent(Reply reply) {	try {	    InputStream is = getInputStream(reply);	    if (is == null)		return null;	    BufferedInputStream bis = new BufferedInputStream( is );	    byte b[] = new byte[256];	    StringBuffer buffer = new StringBuffer();	    while ( (bis.read(b, 0, 256)) != -1)		buffer.append( new String(b) );	    bis.close();	    return new String(buffer);	} catch (IOException ex) {	    return null;	}    }    /**     * Run the given (tunneling) HTTP request.     * This method will check that the appropriate MIME types are used.     * @param request The request ti run.     * @return A Reply instance.     * @exception RemoteAccessException If some network error occurs.     */    protected Reply runRequest(Request request) 	throws RemoteAccessException    {	if(credential != null) {	    request.setAuthorization(credential);	}	try {	    Reply    reply = http.runRequest(request);	    MimeType type  = reply.getContentType();	    if( reply.getStatus() == HTTP.UNAUTHORIZED) {		    getInputStream(reply).close();		throw new RemoteAccessException("Unauthorized");	    }	    if ((type == null) || (type.match(conftype) < 0)) {	      String content = getContent(reply);	      if (content != null) 		throw new RemoteAccessException(content);	      throw new RemoteAccessException("invalid content type");	    }	    return reply;	} catch (RemoteAccessException ex) {	    throw ex;	} catch (Exception ex) {	    throw new RemoteAccessException(ex.getMessage());	}    }    /**     * Query the admin server for its main root resource.     * @exception RemoteAccessException If some network error occurs.     */    protected synchronized void loadRoot()	throws RemoteAccessException    {	try {	    // Prepare the HTTP request:	    Request req = http.createRequest();	    req.setMethod("LOAD-ROOT");	    req.setURL(server);	    req.setValue("TE","gzip");	    // Run that request:	    Reply rep = runRequest(req);	    // Decode the reply:	    root = reader.readResource(server, null, getInputStream(rep));	} catch (RemoteAccessException ex) {	    if (debug)		ex.printStackTrace();	    throw ex;	} catch (Exception ex) {	    root = null;	    if (debug)		ex.printStackTrace();	    throw new RemoteAccessException(ex.getMessage());	}    }    /**     * Get the root admin for all servers managed by target admin server.     * @return A RemoteResource instance.     * @exception RemoteAccessException If target server is unreachable.     */    public synchronized RemoteResource getAdminResource() 	throws RemoteAccessException    {	if ( root == null )	    loadRoot();	return root;    }    /**     * sets the credential to be used for authentification     */    public void setCredential(HttpCredential cr) {	credential = cr;    }    /**     * initialize the context     * @exception RemoteAccessException if a remote access error occurs.     */     public void initialize() 	throws RemoteAccessException    {	loadRoot();    }    /**     * Connect to the given admin server.     * @exception RemoteAccessException if a remote access error occurs.     */    public AdminContext(URL server) 	throws RemoteAccessException    {	this.server = server;	this.http   = HttpManager.getManager();	this.reader = new AdminReader(this);	this.writer = new AdminWriter();    }    public static void main(String args[]) {	try {	    AdminContext adm = new AdminContext(new URL(args[0]));	    adm.initialize();	    String       cmd = args[1];	    // Get the root resource:	    PlainRemoteResource root = (PlainRemoteResource) adm.root;	    // Lookup some child:	    RemoteResource child = root;	    for (int i = 2; i < args.length ; i++) 		child = child.loadResource(args[i]);	    // Perform a command:	    if ( cmd.equals("dump") ) {		((PlainRemoteResource) child).dump(System.out);	    } else if ( cmd.equals("list") ) {		if ( ! child.isContainer() ) {		    System.out.println("\tnot a container !");		} else {		    String e[] = child.enumerateResourceIdentifiers();		    for (int i = 0 ; i < e.length ; i++)			System.out.println("\t"+e[i]);		}	    }	} catch (Exception ex) {	    ex.printStackTrace();	}    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -