flavorservlet.java

来自「这个weblogging 设计得比较精巧」· Java 代码 · 共 132 行

JAVA
132
字号
package org.roller.presentation.velocity;import org.apache.commons.lang.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.velocity.Template;import org.apache.velocity.context.Context;import org.apache.velocity.servlet.VelocityServlet;import org.roller.RollerException;import org.roller.presentation.RollerRequest;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspFactory;import javax.servlet.jsp.PageContext;//////////////////////////////////////////////////////////////////////////////**  * <p>Responsible for rendering RSS feeds and other "flavors" of output for a  * weblog.</p>  *  * <p>If Servlet is mapped to <code>/rss</code> and user has defined  * an RSS override page (i.e. a page named "_rss"), then that Velocity  * template will be used for rendering.</p>  *  * <p>If there is a request parameter named "flavor", then the Velocity  * template specified by that parameter will be used for rendering. For  * example if the flavor is "rss092" then the template at classpath  * "/flavors/rss092.vm" will be used for rendering.</p>  *  * <p>Otherwise, the template /flavors/rss.vm" will be used for rendering.</p>  *  * <p>Assumes that If-Modified-Since has already been handled.</p>  *  * @author David M Johnson  *  * @web.servlet name="RssServlet"  * @web.servlet-mapping url-pattern="/rss/*"  * @web.servlet-mapping url-pattern="/flavor/*"  */public class FlavorServlet extends VelocityServlet{    static final long serialVersionUID = -2720532269434186051L;        private static Log mLogger = LogFactory.getFactory()                                           .getInstance(RollerRequest.class);    public Template handleRequest(HttpServletRequest request,                                  HttpServletResponse response, Context ctx)    {        RollerRequest rreq = null;        try        {            rreq = RollerRequest.getRollerRequest(request,getServletContext());                        // This is an ugly hack to fix the following bug:             // ROL-547: "Site wide RSS feed is your own if you are logged in"            String[] pathInfo = StringUtils.split(rreq.getPathInfo(),"/");             if (pathInfo.length < 1)             {                // If website not specified in URL, set it to null                rreq.setWebsite(null);            }        }        catch (RollerException e)        {            // An error initializing the request is considered to be a 404            if (mLogger.isDebugEnabled())            {                mLogger.debug("RollerRequest threw Exception", e);            }            try            {                response.sendError(HttpServletResponse.SC_NOT_FOUND);            }            catch (IOException e1)            {                if (mLogger.isDebugEnabled())                {                    mLogger.debug("IOException sending error", e);                }            }            return null;        }        try        {            // Needed to init request attributes, etc.            PageContext pageContext =                JspFactory.getDefaultFactory().getPageContext(                this, request,  response, "", true, 8192, true);            rreq.setPageContext(pageContext);            ContextLoader.setupContext(ctx, rreq, response);            final String useTemplate;            PageModel pageModel = (PageModel)ctx.get("pageModel");            if (    request.getServletPath().endsWith("rss")                 && pageModel.getPageByName("_rss") != null )            {                // If the request specified the "/rss" mapping and the                // user has defined an RSS override page, we will use that.                useTemplate = pageModel.getPageByName("_rss").getId();            }            else if (request.getParameter("flavor") != null)            {                // If request specifies a "flavor" then use that.                String flavor = request.getParameter("flavor");                useTemplate = "/flavors/" + flavor + ".vm";            }            else            {                // Fall through to default RSS page template.                useTemplate = "/flavors/rss.vm";            }            return getTemplate(useTemplate);        }        catch (Exception e)        {            mLogger.error("ERROR in RssServlet", e);        }        return null;    }    //------------------------------------------------------------------------    /**     * Handle error in Velocity processing.     */    protected void error( HttpServletRequest req, HttpServletResponse res,        Exception e) throws ServletException, IOException    {        mLogger.warn("ERROR in FlavorServlet",e);    }}

⌨️ 快捷键说明

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