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

📄 webclient.java

📁 这是远程web服务调用的一个包,可以将JSP直接作为服务
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    public void addWindowListener( WebWindowListener listener ) {        synchronized (_windowListeners) {            if (listener != null && !_windowListeners.contains( listener )) _windowListeners.add( listener );        }    }    /**     * Removes a listener to watch for window openings and closings.     */    public void removeWindowListener( WebWindowListener listener ) {        synchronized (_windowListeners) {            _windowListeners.remove( listener );        }    }    /**     * Returns the next javascript alert without removing it from the queue.     */    public String getNextAlert() {        return _alerts.isEmpty() ? null : (String) _alerts.getFirst();    }    /**     * Returns the next javascript alert and removes it from the queue. If the queue is empty,     * will return an empty string.     */    public String popNextAlert() {        if (_alerts.isEmpty()) return "";        return (String) _alerts.removeFirst();    }    /**     * Specifies the object which will respond to all dialogs.     **/    public void setDialogResponder( DialogResponder responder ) {        _dialogResponder = responder;    }//------------------------------------------ protected members -----------------------------------    protected WebClient() {        _openWindows.add( _mainWindow );    }    /**     * Creates a web response object which represents the response to the specified web request.     * @param request the request to which the response should be generated     * @param targetFrame the frame in which the response should be stored     **/    abstract    protected WebResponse newResponse( WebRequest request, FrameSelector targetFrame ) throws MalformedURLException, IOException;    /**     * Writes the message body for the request.     **/    final protected void writeMessageBody( WebRequest request, OutputStream stream ) throws IOException {        request.writeMessageBody( stream );    }    /**     * Returns the value of all current header fields.     **/    protected Dictionary getHeaderFields( URL targetURL ) {        Hashtable result = (Hashtable) _headers.clone();        result.put( "User-Agent", getClientProperties().getUserAgent() );        if (getClientProperties().isAcceptGzip()) result.put( "Accept-Encoding", "gzip" );        AddHeaderIfNotNull( result, "Cookie", _cookieJar.getCookieHeaderField( targetURL ) );        AddHeaderIfNotNull( result, "Authorization", _authorizationString );        AddHeaderIfNotNull( result, "Proxy-Authorization", _proxyAuthorizationString );        return result;    }    private void AddHeaderIfNotNull( Hashtable result, final String headerName, final String headerValue ) {        if (headerValue != null) result.put( headerName, headerValue );    }    /**     * Updates this web client based on a received response. This includes updating     * cookies and frames.  This method is required by ServletUnit, which cannot call the updateWindow method directly.     **/    final    protected void updateMainWindow( FrameSelector frame, WebResponse response ) throws MalformedURLException, IOException, SAXException {        getMainWindow().updateWindow( frame.getName(), response, new RequestContext() );    }//------------------------------------------------- package members ----------------------------------------------------    void tellListeners( WebRequest request ) {        List listeners;        synchronized (_clientListeners) {            listeners = new ArrayList( _clientListeners );        }        for (Iterator i = listeners.iterator(); i.hasNext();) {            ((WebClientListener) i.next()).requestSent( this, request );        }    }    void tellListeners( WebResponse response ) {        List listeners;        synchronized (_clientListeners) {            listeners = new ArrayList( _clientListeners );        }        for (Iterator i = listeners.iterator(); i.hasNext();) {            ((WebClientListener) i.next()).responseReceived( this, response );        }    }    void updateClient( WebResponse response ) throws IOException {        if (getClientProperties().isAcceptCookies()) _cookieJar.updateCookies( response.getCookieJar() );        validateHeaders( response );    }    CookieJar getCookieJar() {        return _cookieJar;    }    void updateFrameContents( WebWindow requestWindow, String requestTarget, WebResponse response, RequestContext requestContext ) throws IOException, SAXException {        if (response.getFrame() == FrameSelector.NEW_FRAME) {            WebWindow window = new WebWindow( this, requestWindow.getCurrentPage() );            if (!WebRequest.NEW_WINDOW.equalsIgnoreCase( requestTarget )) window.setName( requestTarget );            response.setFrame( window.getTopFrame() );            window.updateFrameContents( response, requestContext );            _openWindows.add( window );            reportWindowOpened( window );        } else if (response.getFrame().getWindow() != null && response.getFrame().getWindow() != requestWindow) {            response.getFrame().getWindow().updateFrameContents( response, requestContext );        } else {            if (response.getFrame() == FrameSelector.TOP_FRAME) response.setFrame( requestWindow.getTopFrame() );            requestWindow.updateFrameContents( response, requestContext );        }    }    void close( WebWindow window ) {        if (!_openWindows.contains( window )) throw new IllegalStateException( "Window is already closed" );        _openWindows.remove( window );        if (_openWindows.isEmpty()) _openWindows.add( new WebWindow( this ) );        if (window.equals( _mainWindow )) _mainWindow = (WebWindow) _openWindows.get(0);        reportWindowClosed( window );    }    private void reportWindowOpened( WebWindow window ) {        List listeners;        synchronized (_windowListeners) {            listeners = new ArrayList( _windowListeners );        }        for (Iterator i = listeners.iterator(); i.hasNext();) {            ((WebWindowListener) i.next()).windowOpened( this, window );        }    }    private void reportWindowClosed( WebWindow window ) {        List listeners;        synchronized (_windowListeners) {            listeners = new ArrayList( _windowListeners );        }        for (Iterator i = listeners.iterator(); i.hasNext();) {            ((WebWindowListener) i.next()).windowClosed( this, window );        }    }//------------------------------------------ package members ------------------------------------    boolean getConfirmationResponse( String message ) {        return _dialogResponder.getConfirmation( message );    }    String getUserResponse( String message, String defaultResponse ) {        return _dialogResponder.getUserResponse( message, defaultResponse );    }    void postAlert( String message ) {        _alerts.addLast( message );    }//------------------------------------------ private members -------------------------------------    /** The list of alerts generated by JavaScript. **/    private LinkedList _alerts = new LinkedList();    /** The currently defined cookies. **/    private CookieJar _cookieJar = new CookieJar();    /** A map of header names to values. **/    private HeaderDictionary _headers = new HeaderDictionary();    private boolean _exceptionsThrownOnErrorStatus = HttpUnitOptions.getExceptionsThrownOnErrorStatus();    private List _clientListeners = new ArrayList();    private List _windowListeners = new ArrayList();    private DialogResponder _dialogResponder = new DialogAdapter();    private ClientProperties _clientProperties = ClientProperties.getDefaultProperties().cloneProperties();    /**     * Examines the headers in the response and throws an exception if appropriate.     **/    private void validateHeaders( WebResponse response ) throws HttpException {        if (!getExceptionsThrownOnErrorStatus()) return;        if (response.getHeaderField( "WWW-Authenticate" ) != null) {            throw new AuthorizationRequiredException( response.getHeaderField( "WWW-Authenticate" ) );        } else if (response.getResponseCode() == HttpURLConnection.HTTP_INTERNAL_ERROR) {            throw new HttpInternalErrorException( response.getURL() );        } else if (response.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {            throw new HttpNotFoundException( response.getResponseMessage(), response.getURL() );        } else if (response.getResponseCode() >= HttpURLConnection.HTTP_BAD_REQUEST) {            throw new HttpException( response.getResponseCode(), response.getResponseMessage(), response.getURL() );        }    }    FrameSelector findFrame( String target ) {        for (int i = 0; i < _openWindows.size(); i++) {            WebWindow webWindow = (WebWindow) _openWindows.get( i );            FrameSelector frame = webWindow.getFrame( target );            if (frame != null) return frame;        }        return null;    }//==================================================================================================    static public class HeaderDictionary extends Hashtable {        public void addEntries( Dictionary source ) {            for (Enumeration e = source.keys(); e.hasMoreElements(); ) {                Object key = e.nextElement();                put( key, source.get( key ) );            }        }        public boolean containsKey( Object key ) {            return super.containsKey( matchPreviousFieldName( key.toString() ) );        }        public Object get( Object fieldName ) {            return (String) super.get( matchPreviousFieldName( fieldName.toString() ) );        }        public Object put( Object fieldName, Object fieldValue ) {            fieldName = matchPreviousFieldName( fieldName.toString() );            Object oldValue = super.get( fieldName );            if (fieldValue == null) {                remove( fieldName );            } else {                super.put( fieldName, fieldValue );            }            return oldValue;        }        /**         * If a matching field name with different case is already known, returns the older name.         * Otherwise, returns the specified name.         **/        private String matchPreviousFieldName( String fieldName ) {            for (Enumeration e = keys(); e.hasMoreElements(); ) {                String key = (String) e.nextElement();                if (key.equalsIgnoreCase( fieldName )) return key;            }            return fieldName;        }    }}//==================================================================================================class RedirectWebRequest extends WebRequest {    RedirectWebRequest( WebResponse response ) throws MalformedURLException {        super( response.getURL(), response.getHeaderField( "Location" ), response.getFrame(), response.getFrameName() );        if (response.getReferer() != null) setHeaderField( "Referer", response.getReferer() );    }    /**     * Returns the HTTP method defined for this request.     **/    public String getMethod() {        return "GET";    }}

⌨️ 快捷键说明

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