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

📄 frameholder.java

📁 这是远程web服务调用的一个包,可以将JSP直接作为服务
💻 JAVA
字号:
package com.meterware.httpunit;/******************************************************************************************************************** * $Id: FrameHolder.java,v 1.15 2004/10/17 20:48:10 russgold Exp $ * * Copyright (c) 2002-2004, Russell Gold * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated * documentation files (the "Software"), to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and * to permit persons to whom the Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or substantial portions * of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * *******************************************************************************************************************/import java.io.IOException;import java.net.MalformedURLException;import java.util.*;import org.xml.sax.SAXException;/** * * @author <a href="mailto:russgold@httpunit.org">Russell Gold</a> **/class FrameHolder {    /** Map from a frame selector to its corresponding web response. **/    private Hashtable   _contents = new Hashtable();    /** Map from a frame selector to its subframe selectors. **/    private Hashtable   _subframes = new Hashtable();    /** The window which owns this frame holder. **/    private WebWindow _window;    /** The topmost frame in this frameholder. **/    private FrameSelector _topFrame;    FrameHolder( WebWindow window ) {        _window = window;        _topFrame = FrameSelector.newTopFrame( window );        DefaultWebResponse blankResponse = new DefaultWebResponse( window.getClient(), null, WebResponse.BLANK_HTML );        _contents.put( _topFrame, blankResponse );        HttpUnitOptions.getScriptingEngine().associate( blankResponse );    }    FrameSelector getTopFrame() {        return _topFrame;    }    WebResponse getFrameContents( FrameSelector targetFrame ) {        if (targetFrame == FrameSelector.TOP_FRAME) targetFrame = getTopFrame();        WebResponse response = get( targetFrame );        if (response == null) throw new NoSuchFrameException( targetFrame.getName() );        return response;    }    WebResponse getSubframeContents( FrameSelector frame, String subFrameName ) {        FrameSelector[] subframes = (FrameSelector[]) _subframes.get( frame );        if (subframes == null) throw new NoSuchFrameException( subFrameName );        for (int i = 0; i < subframes.length; i++) {            FrameSelector subframe = subframes[i];            if (subframe.getName().equalsIgnoreCase( subFrameName ) ) return get( subframe );        }        throw new NoSuchFrameException( subFrameName );    }    WebResponse getParentFrameContents( FrameSelector frame ) {        return get( frame.getParent() == null ? _topFrame : frame.getParent() );    }    WebResponse get( FrameSelector targetFrame ) {        return (WebResponse) _contents.get( targetFrame );    }    WebResponse get( String target ) {        FrameSelector frame = getFrame( _topFrame, target );        return frame == null ? null : (WebResponse) _contents.get( frame );    }    FrameSelector getFrame( String target ) {        return target.equals( _window.getName() ) ? _topFrame : getFrame( _topFrame, target );    }    private FrameSelector getFrame( FrameSelector rootFrame, String target ) {        if (target.equalsIgnoreCase( WebRequest.TOP_FRAME )) return _topFrame;        if (target.equalsIgnoreCase( rootFrame.getName() )) return rootFrame;        return lookupFrame( rootFrame, target );    }    private FrameSelector lookupFrame( FrameSelector rootFrame, String target ) {        FrameSelector result = getFromSubframe( rootFrame, target );        if (result != null) {            return result;        } else if (rootFrame.getName().equals( target )) {            return rootFrame;        } else if (rootFrame.getParent() != null) {            return lookupFrame( rootFrame.getParent(), target );        } else {            return null;        }    }    private FrameSelector getFromSubframe( FrameSelector rootFrame, String target ) {        FrameSelector[] subframes = (FrameSelector[]) _subframes.get( rootFrame );        if (subframes == null) return null;        for (int i = 0; i < subframes.length; i++) {            if (subframes[i].getName().equalsIgnoreCase( target )) return subframes[i];        }        for (int i = 0; i < subframes.length; i++) {            FrameSelector result = getFromSubframe( subframes[i], target );            if (result != null) return result;        }        return null;    }    List getActiveFrameNames() {        List result = new ArrayList();        for (Enumeration e = _contents.keys(); e.hasMoreElements();) {            result.add( ((FrameSelector) e.nextElement()).getName() );        }        return result;    }    /**     * Determines the frame in which the reply to a request will be stored.     */    FrameSelector getTargetFrame( WebRequest request ) {        if (WebRequest.NEW_WINDOW.equalsIgnoreCase( request.getTarget() )) {            return FrameSelector.NEW_FRAME;        } else if (WebRequest.TOP_FRAME.equalsIgnoreCase( request.getTarget() )) {            return _topFrame;        } else if (WebRequest.SAME_FRAME.equalsIgnoreCase( request.getTarget() )) {            return request.getSourceFrame();        } else if (WebRequest.PARENT_FRAME.equalsIgnoreCase( request.getTarget() )) {            return request.getSourceFrame().getParent() == null ? _topFrame : request.getSourceFrame().getParent();        } else if (request.getSourceFrame().getName().equalsIgnoreCase( request.getTarget() )) {            return request.getSourceFrame();        } else {            FrameSelector targetFrame = getFrame( request.getSourceFrame(), request.getTarget() );            if (targetFrame == null) targetFrame =_window.getClient().findFrame( request.getTarget() );            return (targetFrame != null) ? targetFrame : FrameSelector.NEW_FRAME;        }    }    void updateFrames( WebResponse response, FrameSelector frame, RequestContext requestContext ) throws MalformedURLException, IOException, SAXException {        removeSubFrames( frame );        _contents.put( frame, response );        if (response.isHTML()) {            HttpUnitOptions.getScriptingEngine().associate( response );            requestContext.addNewResponse( response );            WebRequest[] requests = response.getFrameRequests();            if (requests.length > 0) {                createSubFrames( frame, response.getFrameSelectors() );                for (int i = 0; i < requests.length; i++) {                    if (requests[i].getURLString().length() != 0) {                        response.getWindow().getSubframeResponse( requests[i], requestContext );                    }                }            }        }    }    private void removeSubFrames( FrameSelector frame ) {        FrameSelector[] subframes = (FrameSelector[]) _subframes.get( frame );        if (subframes == null) return;        _subframes.remove( frame );        for (int i = 0; i < subframes.length; i++) {            removeSubFrames( subframes[ i ] );            _contents.remove( subframes[ i ] );        }    }    private void createSubFrames( FrameSelector frame, FrameSelector[] subframes ) {        _subframes.put( frame, subframes );        for (int i = 0; i < subframes.length; i++) {            _contents.put( subframes[ i ], WebResponse.createBlankResponse() );        }    }    /**     * Given the qualified name of a frame and the name of a nested frame, returns the qualified name of the nested frame.     */    static FrameSelector newNestedFrame( FrameSelector parentFrame, final String relativeName ) {        if (relativeName == null || relativeName.length() == 0) return new FrameSelector();        return new FrameSelector( relativeName, parentFrame );    }}

⌨️ 快捷键说明

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