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

📄 abstractwebdavservlet.java

📁 jsr170接口的java实现。是个apache的开源项目。
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            return;        }        long modSince = request.getDateHeader("If-Modified-Since");        if (modSince > IOUtil.UNDEFINED_TIME) {            long modTime = resource.getModificationTime();            // test if resource has been modified. note that formatted modification            // time lost the milli-second precision            if (modTime != IOUtil.UNDEFINED_TIME && (modTime / 1000 * 1000) <= modSince) {                // resource has not been modified since the time indicated in the                // 'If-Modified-Since' header.                response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);                return;            }        }        // spool resource properties and ev. resource content.        OutputStream out = (sendContent) ? response.getOutputStream() : null;        resource.spool(getOutputContext(response, out));        response.flushBuffer();    }    /**     * The PROPFIND method     *     * @param request     * @param response     * @param resource     * @throws IOException     */    protected void doPropFind(WebdavRequest request, WebdavResponse response,                              DavResource resource) throws IOException, DavException {        if (!resource.exists()) {            response.sendError(DavServletResponse.SC_NOT_FOUND);            return;        }        int depth = request.getDepth(DEPTH_INFINITY);        DavPropertyNameSet requestProperties = request.getPropFindProperties();        int propfindType = request.getPropFindType();        MultiStatus mstatus = new MultiStatus();        mstatus.addResourceProperties(resource, requestProperties, propfindType, depth);        response.sendMultiStatus(mstatus);    }    /**     * The PROPPATCH method     *     * @param request     * @param response     * @param resource     * @throws IOException     */    protected void doPropPatch(WebdavRequest request, WebdavResponse response,                               DavResource resource)            throws IOException, DavException {        List changeList = request.getPropPatchChangeList();        if (changeList.isEmpty()) {            response.sendError(DavServletResponse.SC_BAD_REQUEST);            return;        }        MultiStatus ms = new MultiStatus();        MultiStatusResponse msr = resource.alterProperties(changeList);        ms.addResponse(msr);        response.sendMultiStatus(ms);    }    /**     * The POST method. Delegate to PUT     *     * @param request     * @param response     * @param resource     * @throws IOException     * @throws DavException     */    protected void doPost(WebdavRequest request, WebdavResponse response,                          DavResource resource) throws IOException, DavException {        doPut(request, response, resource);    }    /**     * The PUT method     *     * @param request     * @param response     * @param resource     * @throws IOException     * @throws DavException     */    protected void doPut(WebdavRequest request, WebdavResponse response,                         DavResource resource) throws IOException, DavException {        DavResource parentResource = resource.getCollection();        if (parentResource == null || !parentResource.exists()) {            // parent does not exist            response.sendError(DavServletResponse.SC_CONFLICT);            return;        }        int status;        // test if resource already exists        if (resource.exists()) {            status = DavServletResponse.SC_NO_CONTENT;        } else {            status = DavServletResponse.SC_CREATED;        }        parentResource.addMember(resource, getInputContext(request, request.getInputStream()));        response.setStatus(status);    }    /**     * The MKCOL method     *     * @param request     * @param response     * @param resource     * @throws IOException     * @throws DavException     */    protected void doMkCol(WebdavRequest request, WebdavResponse response,                           DavResource resource) throws IOException, DavException {        DavResource parentResource = resource.getCollection();        if (parentResource == null || !parentResource.exists() || !parentResource.isCollection()) {            // parent does not exist or is not a collection            response.sendError(DavServletResponse.SC_CONFLICT);            return;        }        // shortcut: mkcol is only allowed on deleted/non-existing resources        if (resource.exists()) {            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);        }        if (request.getContentLength() > 0 || request.getHeader("Transfer-Encoding") != null) {            parentResource.addMember(resource, getInputContext(request, request.getInputStream()));        } else {            parentResource.addMember(resource, getInputContext(request, null));        }        response.setStatus(DavServletResponse.SC_CREATED);    }    /**     * The DELETE method     *     * @param request     * @param response     * @param resource     * @throws IOException     * @throws DavException     */    protected void doDelete(WebdavRequest request, WebdavResponse response,                            DavResource resource) throws IOException, DavException {        DavResource parent = resource.getCollection();        if (parent != null) {            parent.removeMember(resource);            response.setStatus(DavServletResponse.SC_NO_CONTENT);        } else {            response.sendError(DavServletResponse.SC_FORBIDDEN, "Cannot remove the root resource.");        }    }    /**     * The COPY method     *     * @param request     * @param response     * @param resource     * @throws IOException     * @throws DavException     */    protected void doCopy(WebdavRequest request, WebdavResponse response,                          DavResource resource) throws IOException, DavException {        // only depth 0 and infinity is allowed        int depth = request.getDepth(DEPTH_INFINITY);        if (!(depth == DEPTH_0 || depth == DEPTH_INFINITY)) {            response.sendError(DavServletResponse.SC_BAD_REQUEST);            return;        }        DavResource destResource = getResourceFactory().createResource(request.getDestinationLocator(), request, response);        int status = validateDestination(destResource, request);        if (status > DavServletResponse.SC_NO_CONTENT) {            response.sendError(status);            return;        }        resource.copy(destResource, depth == DEPTH_0);        response.setStatus(status);    }    /**     * The MOVE method     *     * @param request     * @param response     * @param resource     * @throws IOException     * @throws DavException     */    protected void doMove(WebdavRequest request, WebdavResponse response,                          DavResource resource) throws IOException, DavException {        DavResource destResource = getResourceFactory().createResource(request.getDestinationLocator(), request, response);        int status = validateDestination(destResource, request);        if (status > DavServletResponse.SC_NO_CONTENT) {            response.sendError(status);            return;        }        resource.move(destResource);        response.setStatus(status);    }    /**     * Validate the given destination resource and return the proper status     * code: Any return value greater/equal than {@link DavServletResponse#SC_NO_CONTENT}     * indicates an error.     *     * @param destResource destination resource to be validated.     * @param request     * @return status code indicating whether the destination is valid.     */    private int validateDestination(DavResource destResource, WebdavRequest request)            throws DavException {        String destHeader = request.getHeader(HEADER_DESTINATION);        if (destHeader == null || "".equals(destHeader)) {            return DavServletResponse.SC_BAD_REQUEST;        }        if (destResource.getLocator().equals(request.getRequestLocator())) {            return DavServletResponse.SC_FORBIDDEN;        }        int status;        if (destResource.exists()) {            if (request.isOverwrite()) {                // matching if-header required for existing resources                if (!request.matchesIfHeader(destResource)) {                    return DavServletResponse.SC_PRECONDITION_FAILED;                } else {                    // overwrite existing resource                    destResource.getCollection().removeMember(destResource);                    status = DavServletResponse.SC_NO_CONTENT;                }            } else {                // cannot copy/move to an existing item, if overwrite is not forced                return DavServletResponse.SC_PRECONDITION_FAILED;            }        } else {            // destination does not exist >> copy/move can be performed            status = DavServletResponse.SC_CREATED;        }        return status;    }    /**     * The LOCK method     *     * @param request     * @param response     * @param resource     * @throws IOException     * @throws DavException     */    protected void doLock(WebdavRequest request, WebdavResponse response,                          DavResource resource) throws IOException, DavException {        LockInfo lockInfo = request.getLockInfo();        if (lockInfo.isRefreshLock()) {            // refresh any matching existing locks            ActiveLock[] activeLocks = resource.getLocks();            List lList = new ArrayList();            for (int i = 0; i < activeLocks.length; i++) {                // adjust lockinfo with type/scope retrieved from the lock.                lockInfo.setType(activeLocks[i].getType());                lockInfo.setScope(activeLocks[i].getScope());                DavProperty etagProp = resource.getProperty(DavPropertyName.GETETAG);                String etag = etagProp != null ? String.valueOf(etagProp.getValue()) : "";                if (request.matchesIfHeader(resource.getHref(), activeLocks[i].getToken(), etag)) {                    lList.add(resource.refreshLock(lockInfo, activeLocks[i].getToken()));                }            }            if (lList.isEmpty()) {                throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED);            }            ActiveLock[] refreshedLocks = (ActiveLock[]) lList.toArray(new ActiveLock[lList.size()]);            response.sendRefreshLockResponse(refreshedLocks);        } else {            // create a new lock            ActiveLock lock = resource.lock(lockInfo);            response.sendLockResponse(lock);        }    }    /**     * The UNLOCK method     *     * @param request     * @param response     * @param resource     * @throws DavException     */    protected void doUnlock(WebdavRequest request, WebdavResponse response,                            DavResource resource) throws DavException {        // get lock token from header        String lockToken = request.getLockToken();        TransactionInfo tInfo = request.getTransactionInfo();        if (tInfo != null) {            ((TransactionResource) resource).unlock(lockToken, tInfo);        } else {            resource.unlock(lockToken);        }        response.setStatus(DavServletResponse.SC_NO_CONTENT);    }    /**     * The ORDERPATCH method     *     * @param request     * @param response     * @param resource     * @throws java.io.IOException     * @throws DavException     */    protected void doOrderPatch(WebdavRequest request,                                WebdavResponse response,                                DavResource resource)            throws IOException, DavException {        if (!(resource instanceof OrderingResource)) {            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);            return;        }        OrderPatch op = request.getOrderPatch();        if (op == null) {            response.sendError(DavServletResponse.SC_BAD_REQUEST);            return;        }        // perform reordering of internal members        ((OrderingResource) resource).orderMembers(op);        response.setStatus(DavServletResponse.SC_OK);    }    /**     * The SUBSCRIBE method     *     * @param request     * @param response     * @param resource     * @throws IOException     * @throws DavException     */    protected void doSubscribe(WebdavRequest request,                               WebdavResponse response,                               DavResource resource)            throws IOException, DavException {        if (!(resource instanceof ObservationResource)) {            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);            return;        }        SubscriptionInfo info = request.getSubscriptionInfo();        if (info == null) {            response.sendError(DavServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);            return;        }        Subscription subs = ((ObservationResource) resource).subscribe(info, request.getSubscriptionId());        response.sendSubscriptionResponse(subs);    }    /**     * The UNSUBSCRIBE method     *     * @param request     * @param response     * @param resource     * @throws IOException     * @throws DavException     */    protected void doUnsubscribe(WebdavRequest request,                                 WebdavResponse response,

⌨️ 快捷键说明

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