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

📄 classfileserver.java

📁 jdk-6u10-docs java开发宝典
💻 JAVA
字号:
/* * @(#)ClassFileServer.java	1.5 01/05/10 * * Copyright 1994-2004 Sun Microsystems, Inc. All Rights Reserved.  * * Redistribution and use in source and binary forms, with or  * without modification, are permitted provided that the following  * conditions are met:  *  * -Redistribution of source code must retain the above copyright  * notice, this list of conditions and the following disclaimer. *  * Redistribution in binary form must reproduce the above copyright  * notice, this list of conditions and the following disclaimer in  * the documentation and/or other materials provided with the  * distribution.  *  * Neither the name of Sun Microsystems, Inc. or the names of  * contributors may be used to endorse or promote products derived  * from this software without specific prior written permission. *  * This software is provided "AS IS," without a warranty of any  * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY  * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL  * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT  * OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS  * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR  * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,  * SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF  * THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS  * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  *  * You acknowledge that this software is not designed, licensed or  * intended for use in the design, construction, operation or  * maintenance of any nuclear facility.  */import java.io.*;import java.net.*;import java.security.KeyStore;import javax.net.*;import javax.net.ssl.*;import javax.security.cert.X509Certificate;/* ClassFileServer.java -- a simple file server that can server * Http get request in both clear and secure channel * * The ClassFileServer implements a ClassServer that * reads files from the file system. See the * doc for the "Main" method for how to run this * server. */public class ClassFileServer extends ClassServer {    private String docroot;    private static int DefaultServerPort = 2001;    /**     * Constructs a ClassFileServer.     *     * @param path the path where the server locates files     */    public ClassFileServer(ServerSocket ss, String docroot) throws IOException    {	super(ss);	this.docroot = docroot;    }    /**     * Returns an array of bytes containing the bytes for     * the file represented by the argument <b>path</b>.     *     * @return the bytes for the file     * @exception FileNotFoundException if the file corresponding     * to <b>path</b> could not be loaded.     */    public byte[] getBytes(String path)	throws IOException    {	System.out.println("reading: " + path);	File f = new File(docroot + File.separator + path);	int length = (int)(f.length());	if (length == 0) {	    throw new IOException("File length is zero: " + path);	} else {	    FileInputStream fin = new FileInputStream(f);	    DataInputStream in = new DataInputStream(fin);	    byte[] bytecodes = new byte[length];	    in.readFully(bytecodes);	    return bytecodes;	}    }    /**     * Main method to create the class server that reads     * files. This takes two command line arguments, the     * port on which the server accepts requests and the     * root of the path. To start up the server: <br><br>     *     * <code>   java ClassFileServer <port> <path>     * </code><br><br>     *     * <code>   new ClassFileServer(port, docroot);     * </code>     */    public static void main(String args[])    {	System.out.println(	    "USAGE: java ClassFileServer port docroot [TLS [true]]");	System.out.println("");	System.out.println(	    "If the third argument is TLS, it will start as\n" +	    "a TLS/SSL file server, otherwise, it will be\n" +	    "an ordinary file server. \n" +	    "If the fourth argument is true,it will require\n" +	    "client authentication as well.");	int port = DefaultServerPort;	String docroot = "";	if (args.length >= 1) {	    port = Integer.parseInt(args[0]);	}	if (args.length >= 2) {	    docroot = args[1];	}	String type = "PlainSocket";	if (args.length >= 3) {	    type = args[2];	}	try {	    ServerSocketFactory ssf =		ClassFileServer.getServerSocketFactory(type);	    ServerSocket ss = ssf.createServerSocket(port);	    if (args.length >= 4 && args[3].equals("true")) {		((SSLServerSocket)ss).setNeedClientAuth(true);	    }	    new ClassFileServer(ss, docroot);	} catch (IOException e) {	    System.out.println("Unable to start ClassServer: " +			       e.getMessage());	    e.printStackTrace();	}    }    private static ServerSocketFactory getServerSocketFactory(String type) {	if (type.equals("TLS")) {	    SSLServerSocketFactory ssf = null;	    try {		// set up key manager to do server authentication		SSLContext ctx;		KeyManagerFactory kmf;		KeyStore ks;		char[] passphrase = "passphrase".toCharArray();		ctx = SSLContext.getInstance("TLS");		kmf = KeyManagerFactory.getInstance("SunX509");		ks = KeyStore.getInstance("JKS");		ks.load(new FileInputStream("testkeys"), passphrase);		kmf.init(ks, passphrase);		ctx.init(kmf.getKeyManagers(), null, null);		ssf = ctx.getServerSocketFactory();		return ssf;	    } catch (Exception e) {		e.printStackTrace();	    }	} else {	    return ServerSocketFactory.getDefault();	}	return null;    }}

⌨️ 快捷键说明

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