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

📄 ajp12connectionhandler.java

📁 这是一个法律事务所系统源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		    // need to be fixed.		    //		if(contextPath!=null && contextPath.length() >0 )		    //		    lookupPath=requestURI.substring( contextPath.length() + 1 );		    if( doLog ) log("AJP: URI: " + requestURI + " CP:" + contextPath + " LP: " + lookupPath);		    		    dummy = ajpin.readString(null);                   //script filename		    //		System.out.println("AJP: Script filen=" + dummy);		    		    dummy = ajpin.readString(null);                   //script name		    //		System.out.println("AJP: Script name=" + dummy);		    serverName = ajpin.readString("");                //server name		    if( doLog ) log("AJP: serverName=" + serverName );		    try {			serverPort = Integer.parseInt(ajpin.readString("80")); //server port			if (serverPort == 443) {				setScheme("https");			}		    } catch (Exception any) {			serverPort = 80;		    }		    dummy = ajpin.readString("");                     //server protocol		    //		System.out.println("AJP: Server proto=" + dummy);		    dummy = ajpin.readString("");                     //server signature		    //		System.out.println("AJP: Server sign=" + dummy);		    dummy = ajpin.readString("");                     //server software		    //		System.out.println("AJP: Server softw=" + dummy);		    jvmRoute = ajpin.readString("");                     //JSERV ROUTE		    if(jvmRoute.length() == 0) {			jvmRoute = null;		    }		    if( doLog ) log("AJP: Server jvmRoute=" + jvmRoute);                    /**                     * The two following lines are commented out because we don't                     * want to depend on unreleased versions of the jserv module.                     *                                            - costin                     * The two following lines are uncommented because JServ 1.1 final                     * is far behind.                     * NB: you need a recent mod_jserv to use the latest protocol version.                     * Theses env vars are simply ignored. (just here for compatibility)                     *                                            - jluc                     */                     dummy = ajpin.readString("");                     dummy = ajpin.readString("");		    // XXX all dummy fields will be used after core is changed to make use		    // of them!		    break;                    /**                     * Marker = 5 will be used by mod_jserv to send environment vars                     * as key+value (dynamically configurable).                     * can be considered as "reserved", and safely ignored by other connectors.                     * env_vars is (above in this  code) commented out for performance issues.                     * so theses env vars are simply ignored. (just here for compatibility)                     * but it is where mod_jserv would place SSL_* env vars (by exemple)                     * See the new parameter for mod_jserv (version > 1.1):                     * ApJServEnvVar localname remotename                     *                                            - jluc                     */                case 5: // Environment vars                    token1 = ajpin.readString(null);                    token2 = ajpin.readString("");                    /*                     * Env variables should go into the request attributes                     * table. 					 *					 * Also, if one of the request attributes is HTTPS=on                     * assume that there is an SSL connection.					 */                    attributes.put(token1, token2);                    if(token1.equals("HTTPS") && token2.equals("on")) {                        setScheme("https");                    }                    break;		case 3: // Header		    token1 = ajpin.readString(null);		    token2 = ajpin.readString("");		    headers.putHeader(token1.toLowerCase(), token2);		    break;		case 254: // Signal		    signal = ajpin.read();		    if (signal == 0) { // PING implemented as signal			try {			    // close the socket connection after we send reply			    socket.getOutputStream().write(0); // PING reply			    sin.close();			} catch (IOException ignored) {			    System.err.println(ignored);			}                        isPing = true;                        return;		    } else {			try {			    // close the socket connection before handling any signal			    // but get the addresses first so they are not corrupted			    InetAddress serverAddr = socket.getLocalAddress();			    InetAddress clientAddr = socket.getInetAddress();			    sin.close();			    if ( (signal== 15) &&				 isSameAddress(serverAddr, clientAddr) ) {				// Shutdown - probably apache was stoped with apachectl stop				contextM.stop();				// same behavior as in past, because it seems that				// stopping everything doesn't work - need to figure				// out what happens with the threads ( XXX )				System.exit(0);				shutdown=true;				return;			    }			} catch (Exception ignored) {			    System.err.println(ignored);			}			System.err.println("Signal ignored: " + signal);		    }		    return;		    		case 4:		case 255:		    more=false;		    break;		    		case -1:		    throw new java.io.IOException("Stream closed prematurely");		    		    		default:		    throw new java.io.IOException("Stream broken");		    		    		} // switch            } // while	} catch (IOException ioe) {	    throw ioe;        } catch (Exception e) {	    System.err.println("Uncaught exception" + e);	    e.printStackTrace();        }		// REQUEST_URI includes query string	int indexQ=requestURI.indexOf("?");	int rLen=requestURI.length();	if ( (indexQ >-1) && ( indexQ  < rLen) ) {	    if(doLog) log("Orig QS " + queryString );	    queryString = requestURI.substring(indexQ + 1, requestURI.length());	    if(doLog) log("New QS " + queryString );	    requestURI = requestURI.substring(0, indexQ);	} 		if( doLog ) log("Request: " + requestURI );	if( doLog ) log ("Query: " + queryString );	// System.out.println("ENV: " + env_vars );	// 	System.out.println("HEADERS: " + headers_in );	// 	System.out.println("PARAMETERS: " + parameters );		//processCookies();	contentLength = headers.getIntHeader("content-length");	contentType = headers.getHeader("content-type");	// XXX	// detect for real whether or not we have more requests	// coming	// XXX	// Support persistent connection in AJP21	//moreRequests = false;    }    /**     * Return <code>true</code> if the specified client and server addresses     * are the same.  This method works around a bug in the IBM 1.1.8 JVM on     * Linux, where the address bytes are returned reversed in some     * circumstances.     *     * @param server The server's InetAddress     * @param client The client's InetAddress     */    private boolean isSameAddress(InetAddress server, InetAddress client) {	// Compare the byte array versions of the two addresses	byte serverAddr[] = server.getAddress();	byte clientAddr[] = client.getAddress();	if (serverAddr.length != clientAddr.length)	    return (false);	boolean match = true;	for (int i = 0; i < serverAddr.length; i++) {	    if (serverAddr[i] != clientAddr[i]) {		match = false;		break;	    }	}	if (match)	    return (true);	// Compare the reversed form of the two addresses	for (int i = 0; i < serverAddr.length; i++) {	    if (serverAddr[i] != clientAddr[(serverAddr.length-1)-i])		return (false);	}	return (true);    }}// Ajp use Status: instead of Statusclass AJP12ResponseAdapter extends HttpResponseAdapter {    /** Override setStatus     */    protected void sendStatus( int status, String message)  throws IOException {	printHead("Status: " );	printHead( String.valueOf( status ));	printHead( " " );	printHead( message );	printHead("\r\n");	// We set it here because we extend HttpResponseAdapter, and this is the	// method that is different. 		// Servlet Engine header will be set per/adapter - smarter adapters will	// not send it every time ( have it in C side ), and we may also want	// to add informations about the adapter used 	if( request.getContext() != null)	    setHeader("Servlet-Engine", request.getContext().getEngineHeader());    }}class Ajpv12InputStream extends BufferedInputStream {    // UTF8 is a strict superset of ASCII.    final static String CHARSET = "UTF8";    public Ajpv12InputStream(InputStream in) {        super(in);    }    public Ajpv12InputStream(InputStream in, int bufsize) {        super(in,bufsize);    }    public int readWord() throws java.io.IOException {        int b1 = read();        if( b1 == -1)            return -1;        int b2 = read();        if ( b2==-1)            return -1;        return ((int)((b1 << 8) | b2)) & 0xffff;    }    public String readString(String def) throws java.io.IOException {        int len = readWord();        if( len == 0xffff)            return def;        if( len == -1)            throw new java.io.IOException("Stream broken");        byte[] b = new byte[len];        int p = 0;        int r;        while(p<len) {            r = read(b,p, len - p);            if( r< 0) {                throw new java.io.IOException("Stream broken, couldn't demarshal string :"+len+":"+p);            }            p = p+r;        }        return new String(b, CHARSET);    }}

⌨️ 快捷键说明

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