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

📄 defaultgethandler.java

📁 一套java版本的搜索引擎源码
💻 JAVA
字号:
/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.lucene.gdata.servlet.handler;import java.io.IOException;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.lucene.gdata.server.GDataRequestException;import org.apache.lucene.gdata.server.Service;import org.apache.lucene.gdata.server.ServiceException;import org.apache.lucene.gdata.server.GDataRequest.GDataRequestType;import org.apache.lucene.gdata.utils.DateFormater;import com.google.gdata.data.BaseEntry;import com.google.gdata.data.BaseFeed;/** * Default Handler implementation. This handler processes the incoming * {@link org.apache.lucene.gdata.server.GDataRequest} and retrieves the * requested feed from the underlying storage. * <p> * This hander also processes search queries and retrieves the search hits from * the underlying search component. The user query will be accessed via the * {@link org.apache.lucene.gdata.server.GDataRequest} instance passed to the * {@link Service} class. * </p> * <p> * The DefaultGetHandler supports HTTP Conditional GET. It set the Last-Modified * response header based upon the value of the <atom:updated> element in the * returned feed or entry. A client can send this value back as the value of the * If-Modified-Since request header to avoid retrieving the content again if it * hasn't changed. If the content hasn't changed since the If-Modified-Since * time, then the GData service returns a 304 (Not Modified) HTTP response.</p> *  *  * @author Simon Willnauer *  */public class DefaultGetHandler extends AbstractGdataRequestHandler {    private static final Log LOG = LogFactory.getLog(DefaultGetHandler.class);    /**     * @see org.apache.lucene.gdata.servlet.handler.AbstractGdataRequestHandler#processRequest(javax.servlet.http.HttpServletRequest,     *      javax.servlet.http.HttpServletResponse)     */    @Override    public void processRequest(HttpServletRequest request,            HttpServletResponse response) throws IOException, ServletException {        try {            initializeRequestHandler(request, response, GDataRequestType.GET);        } catch (GDataRequestException e) {            sendError();            return;        }        try {            String modifiedSince = this.feedRequest.getModifiedSince();            if (!checkIsModified(modifiedSince)) {                this.feedResponse                        .setStatus(HttpServletResponse.SC_NOT_MODIFIED);                return;            }            if (LOG.isInfoEnabled())                LOG.info("Requested output formate: "                        + this.feedRequest.getRequestedResponseFormat());            this.feedResponse.setOutputFormat(this.feedRequest                    .getRequestedResponseFormat());            if (this.feedRequest.isFeedRequested()) {                BaseFeed feed = this.service.getFeed(this.feedRequest,                        this.feedResponse);                this.feedResponse.sendResponse(feed, this.feedRequest                        .getConfigurator());            } else {                BaseEntry entry = this.service.getSingleEntry(this.feedRequest,                        this.feedResponse);                this.feedResponse.sendResponse(entry, this.feedRequest                        .getConfigurator());            }        } catch (ServiceException e) {            LOG.error("Could not process GetFeed request - " + e.getMessage(),                    e);            setError(e.getErrorCode());            sendError();        }finally{        closeService();        }    }    /**     *      * returns true if the resource has been modified since the specified     * request header value     */    protected boolean checkIsModified(String lastModified)            throws ServiceException {        if (lastModified == null)            return true;        try {            Date clientDate = DateFormater.parseDate(lastModified,DateFormater.HTTP_HEADER_DATE_FORMAT,DateFormater.HTTP_HEADER_DATE_FORMAT_TIME_OFFSET);            Date entityDate;            if (this.feedRequest.isFeedRequested())                entityDate = this.service.getFeedLastModified(this.feedRequest                        .getFeedId());            else                entityDate = this.service.getEntryLastModified(this.feedRequest                        .getEntryId(),this.feedRequest.getFeedId());            if(LOG.isInfoEnabled())                LOG.info("comparing date clientDate: "+clientDate+"; last modified: "+entityDate);            return (entityDate.getTime()-clientDate.getTime() > 1000);        } catch (java.text.ParseException e) {            LOG.info("Couldn't parse Last-Modified header -- "+lastModified,e);        }        return true;    }}

⌨️ 快捷键说明

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