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

📄 atomservlet.java

📁 这个weblogging 设计得比较精巧
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * Copyright 2005 David M Johnson (For RSS and Atom In Action) * * Licensed 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.roller.presentation.atomapi;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.Reader;import java.io.Writer;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;import org.jdom.output.Format;import org.jdom.output.XMLOutputter;import org.roller.util.Utilities;import com.sun.syndication.feed.atom.Entry;import com.sun.syndication.feed.atom.Feed;import com.sun.syndication.feed.atom.Link;import com.sun.syndication.io.FeedException;import com.sun.syndication.io.WireFeedInput;import com.sun.syndication.io.WireFeedOutput;/** * Atom Servlet implements Atom by calling a Roller independent handler. * @web.servlet name="AtomServlet" * @web.servlet-mapping url-pattern="/atom/*" * @author David M Johnson */public class AtomServlet extends HttpServlet{    /** We use Rome to parse/generate Atom feeds and it does Atom format 0.3 */    public static final String FEED_TYPE = "atom_0.3";         private static Log mLogger =         LogFactory.getFactory().getInstance(AtomServlet.class);    //-----------------------------------------------------------------------------    /**     * Create an Atom request handler.     * TODO: make AtomRequestHandler implementation configurable.     */    private AtomHandler createAtomRequestHandler(HttpServletRequest request)    {        return new RollerAtomHandler(request);       }        //-----------------------------------------------------------------------------    /**     * Handles an Atom GET by calling handler and writing results to response.     */    protected void doGet(HttpServletRequest req, HttpServletResponse res)        throws ServletException, IOException    {        AtomHandler handler = createAtomRequestHandler(req);        String userName = handler.getAuthenticatedUsername();        if (userName != null)         {            String[] pathInfo = getPathInfo(req);            try            {                if (handler.isIntrospectionURI(pathInfo))                 {                    // return an Atom Service document                    AtomService service = handler.getIntrospection(pathInfo);                                       Document doc = AtomService.serviceToDocument(service);                    Writer writer = res.getWriter();                    XMLOutputter outputter = new XMLOutputter();                    outputter.setFormat(Format.getPrettyFormat());                    outputter.output(doc, writer);                    writer.close();                    res.setStatus(HttpServletResponse.SC_OK);                }                else if (handler.isCollectionURI(pathInfo))                {                    // return a collection                    String ranges = req.getHeader("Range");                    if (ranges == null) req.getParameter("Range");                    AtomCollection col = null;                    if (ranges != null)                     {                        AtomCollection.Range range =                             AtomCollection.parseRange(req.getHeader("Range"));                        int offset = 0;                        String offsetString = req.getParameter("offset");                        if (offsetString != null)                         {                            offset = Integer.parseInt(offsetString);                        }                        col= handler.getCollection(                            pathInfo, range.start, range.end, offset);                    }                    else                     {                        col= handler.getCollection(pathInfo);                    }                    Document doc = AtomCollection.collectionToDocument(col);                    Writer writer = res.getWriter();                    XMLOutputter outputter = new XMLOutputter();                    outputter.setFormat(Format.getPrettyFormat());                    outputter.output(doc, writer);                    writer.close();                    res.setStatus(HttpServletResponse.SC_OK);                }                else if (handler.isEntryURI(pathInfo))                 {                    // return an entry                    Entry entry = handler.getEntry(pathInfo);                                        Writer writer = res.getWriter();                     serializeEntry(entry, writer);                                        writer.close();                }                else if (handler.isResourceURI(pathInfo))                {                    // return a resource                    String absPath = handler.getResourceFilePath(pathInfo);                    String type = getServletContext().getMimeType(absPath);                    res.setContentType(type);                    Utilities.copyInputToOutput(                        new FileInputStream(absPath), res.getOutputStream());                }                else                {                    res.setStatus(HttpServletResponse.SC_NOT_FOUND);                }            }            catch (Exception e)            {                res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);                e.printStackTrace(res.getWriter());                mLogger.error(e);            }        }        else         {            res.setStatus(HttpServletResponse.SC_UNAUTHORIZED);        }    }        //-----------------------------------------------------------------------------      /**     * Handles an Atom POST by calling handler to identify URI, reading/parsing     * data, calling handler and writing results to response.     */    protected void doPost(HttpServletRequest req, HttpServletResponse res)        throws ServletException, IOException    {        AtomHandler handler = createAtomRequestHandler(req);        String userName = handler.getAuthenticatedUsername();        if (userName != null)         {            String[] pathInfo = getPathInfo(req);            try            {                if (handler.isEntryCollectionURI(pathInfo))                 {                    // parse incoming entry                    Entry unsavedEntry = parseEntry(                        new InputStreamReader(req.getInputStream()));                                        // call handler to post it                    Entry savedEntry = handler.postEntry(pathInfo, unsavedEntry);                    Iterator links = savedEntry.getAlternateLinks().iterator();                    while (links.hasNext()) {                        Link link = (Link) links.next();                        if (link.getRel().equals("alternate")) {                            res.addHeader("Location", link.getHref());                            break;                        }

⌨️ 快捷键说明

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