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

📄 ajp13processor.java

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        ajp13.setLogger(new org.apache.ajp.Logger() {                public void log(String msg) {                    logger.log("[Ajp13] " + msg);                }                                public void log(String msg, Throwable t) {                    logger.log("[Ajp13] " + msg, t);                }            });        Ajp13InputStream input = new Ajp13InputStream(ajp13);        Ajp13OutputStream output = new Ajp13OutputStream(ajp13);        response.setAjp13(ajp13);        try {            ajp13.setSocket(socket);        } catch (IOException e) {            logger.log("process: ajp13.setSocket", e);        }        boolean moreRequests = true;        String expectedSecret=connector.getSecret();                boolean needAuth= ( expectedSecret != null );                while (moreRequests && !stopped.value()) {                        int status = 0;            try {                if (debug > 0) {                    logger.log("waiting on next request...");                }                                status = ajp13.receiveNextRequest(ajpRequest);                                if (debug > 0) {                    logger.log("received next request, status=" + status);                }            } catch (IOException e) {                logger.log("process: ajp13.receiveNextRequest", e);            }            if( needAuth ) {                String connSecret=ajp13.getSecret();                if( connSecret == null ) {                    logger.log( "Connection without password, " +                                "tomcat is configured to require one" );                    break;                }                if( ! connSecret.equals(expectedSecret) ) {                    logger.log( "Connection with wrong password" );                    break;                }                                needAuth=false;            }                        if (stopped.value()) {                if (debug > 0) {                    logger.log("process:  received request, but we're stopped");                }                break;            }                        if( status==-2) {                // special case - shutdown                // XXX need better communication, refactor it//                  if( !doShutdown(socket.getLocalAddress(),//                                  socket.getInetAddress())) {//                      moreRequests = false;//                      continue;//                  }                break;            }                        if( status != 200 )                break;            try {                // set flag                handlingRequest.set(true);                boolean bad_request = false;                // set up request                try {                    request.setAjpRequest(ajpRequest);                } catch (IllegalArgumentException e) {                    bad_request = true;                }                request.setResponse(response);                request.setStream(input);                                // setup response                response.setRequest(request);                response.setStream(output);                                if (debug > 0) {                    logger.log("invoking...");                }                if (!bad_request) {                    try {                        connector.getContainer().invoke(request, response);                    } catch (IOException ioe) {                        // Pass the IOException through                        throw ioe;                    } catch (Throwable e) {                        // A throwable here could be caused by a Valve,                        // Filter, or other component in the chain.                        // Processing of the request failed, return an                        // Internal Server Error                        logger.log("process: invoke", e);                        response.sendError                            (HttpServletResponse.SC_INTERNAL_SERVER_ERROR);                    }                } else {                    response.sendError                        (HttpServletResponse.SC_BAD_REQUEST);                }                if (debug > 0) {                    logger.log("done invoking, finishing request/response....");                }                response.finishResponse();                request.finishRequest();                if (debug > 0) {                    logger.log("finished handling request.");                }            } catch (IOException ioe) {                // Normally this catches a socket Broken Pipe caused by the                // remote client aborting the request. Don't print the stack                // trace in this case. Then let the Processor recycle.                logger.log("process: IOException " + ioe.getMessage());                moreRequests = false;            } catch (Throwable e) {                // Processing the request and sending the response failed.                // We don't know what the state of the Ajp Connector socket                // is in. Bail out and recycle the Processor.                logger.log("process: finish", e);                moreRequests = false;            }            // Recycling the request and the response objects            if (debug > 0) {                logger.log("recyling objects ...");            }                        ajpRequest.recycle();            request.recycle();            response.recycle();            // recycle ajp13 object            ajp13.recycle();            // reset flag            handlingRequest.set(false);        }        	try {            if (debug > 0) {                logger.log("closing ajp13 object...");            }            ajp13.close();            if (debug > 0) {                logger.log("ajp13 object closed.");            }	} catch (IOException e) {	    logger.log("process: ajp13.close", e);	}	try {            if (debug > 0) {                logger.log("closing socket...");            }            socket.close();            if (debug > 0) {                logger.log("socket closed.");            }	} catch (IOException e) {	    logger.log("process: socket.close", e);	}	socket = null;        if (debug > 0) {            logger.log("process:  done");        }    }    // ---------------------------------------------- Background Thread Methods    /**     * The background thread that listens for incoming TCP/IP connections and     * hands them off to an appropriate processor.     */    public void run() {        // Process requests until we receive a shutdown signal	while (!stopped.value()) {	    // Wait for the next socket to be assigned            if (debug > 0) {                logger.log("waiting for next socket to be assigned...");            }	    Socket socket = await();	    if (socket == null)		continue;            if (debug > 0) {                logger.log("socket assigned.");            }	    // Process the request from this socket	    process(socket);	    // Finish up this request            if (debug > 0) {                logger.log("recycling myself ...");            }	    connector.recycle(this);	}	// Tell threadStop() we have shut ourselves down successfully	synchronized (threadSync) {	    threadSync.notifyAll();	}    }    /**     * Start the background processing thread.     */    private void threadStart() {	logger.log(sm.getString("ajp13Processor.starting"));        stopped.set(false);	thread = new Thread(threadGroup, this, threadName);	thread.setDaemon(true);	thread.start();	if (debug > 0)	    logger.log(" Background thread has been started");    }    /**     * Stop the background processing thread.     */    private void threadStop() {	logger.log(sm.getString("ajp13Processor.stopping"));	stopped.set(true);        assign(null);	synchronized (threadSync) {	    try {                if (handlingRequest.value()) {                    if (debug > 0) {                        logger.log                            ("currentling handling a request, so waiting....");                    }                    threadSync.wait(5000);                } else {                    if (debug > 0) {                        logger.log                            ("not currently handling a request, not waiting.");                    }                }	    } catch (InterruptedException e) {		;	    }	}	thread = null;    }    // ------------------------------------------------------ Lifecycle Methods    /**     * Add a lifecycle event listener to this component.     *     * @param listener The listener to add     */    public void addLifecycleListener(LifecycleListener listener) {	lifecycle.addLifecycleListener(listener);    }    /**     * Get the lifecycle listeners associated with this lifecycle. If this     * Lifecycle has no listeners registered, a zero-length array is returned.     */    public LifecycleListener[] findLifecycleListeners() {        return null; // FIXME: lifecycle.findLifecycleListeners();    }    /**     * Remove a lifecycle event listener from this component.     *     * @param listener The listener to add     */    public void removeLifecycleListener(LifecycleListener listener) {	lifecycle.removeLifecycleListener(listener);    }    /**     * Start the background thread we will use for request processing.     *     * @exception LifecycleException if a fatal startup error occurs     */    public void start() throws LifecycleException {	if (started)	    throw new LifecycleException		(sm.getString("ajp13Processor.alreadyStarted"));	lifecycle.fireLifecycleEvent(START_EVENT, null);	started = true;	threadStart();    }    /**     * Stop the background thread we will use for request processing.     *     * @exception LifecycleException if a fatal shutdown error occurs     */    public void stop() throws LifecycleException {	if (!started)	    throw new LifecycleException		(sm.getString("ajp13Processor.notStarted"));	lifecycle.fireLifecycleEvent(STOP_EVENT, null);	started = false;	threadStop();    }}

⌨️ 快捷键说明

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