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

📄 basepageservlet.java

📁 这个weblogging 设计得比较精巧
💻 JAVA
字号:
package org.roller.presentation.velocity;import java.io.IOException;import java.io.StringWriter;import java.util.Map;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspFactory;import javax.servlet.jsp.PageContext;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.velocity.Template;import org.apache.velocity.VelocityContext;import org.apache.velocity.context.Context;import org.apache.velocity.exception.ParseErrorException;import org.apache.velocity.exception.ResourceNotFoundException;import org.apache.velocity.servlet.VelocityServlet;import org.roller.RollerException;import org.roller.model.UserManager;import org.roller.pojos.PageData;import org.roller.pojos.UserData;import org.roller.pojos.WebsiteData;import org.roller.presentation.RollerRequest;/** * Base Servlet for Servlets that render user page templates. Loads the * Velocity context using the ContextLoader and runs the page template * selected by the request. * * @author llavandowska * @author David M Johnson */public abstract class BasePageServlet extends VelocityServlet{    private static Log mLogger =        LogFactory.getFactory().getInstance(BasePageServlet.class);	/**	 *  <p>Sets servletContext for WebappResourceLoader.</p>	 *	 * @param config servlet configuation	 */	public void init( ServletConfig config )		throws ServletException	{		super.init( config );		WebappResourceLoader.setServletContext( getServletContext() );	}    public Template handleRequest( HttpServletRequest request,                                   HttpServletResponse response,                                   Context ctx ) throws Exception    {        String pid = null;        Template outty = null;        Exception pageException = null;                try        {            PageContext pageContext =                JspFactory.getDefaultFactory().getPageContext(                    this, request, response,"", true, 8192, true);            // Needed to init request attributes, etc.            RollerRequest rreq = RollerRequest.getRollerRequest(pageContext);            UserManager userMgr = rreq.getRoller().getUserManager();                        WebsiteData wd = null;            if (request.getAttribute(RollerRequest.OWNING_USER) != null) {                UserData user = (UserData)                    request.getAttribute(RollerRequest.OWNING_USER);                wd = userMgr.getWebsite(user.getUserName());            }            else            {                wd = rreq.getWebsite();            }                        // If request specified the page, then go with that            PageData pd = null;            if (rreq.getPage() != null // RollerRequest does too much guess work                    && request.getAttribute(RollerRequest.OWNING_USER) == null)            {                pd = rreq.getPage();                pid = pd.getId();            }            // If page not available from request, then use website's default            else if (wd != null)            {                pd = userMgr.retrievePage(wd.getDefaultPageId());                pid = pd.getId();                rreq.setPage(pd);             }            // Still no page ID, then we have a problem            if ( pid == null )            {                throw new ResourceNotFoundException("Page not found");            }                        outty = prepareForPageExecution(ctx, rreq, response, pd);        }        catch( Exception e )        {	        pageException = e;            response.setStatus( HttpServletResponse.SC_INTERNAL_SERVER_ERROR);        }        if (pageException != null)        {            mLogger.error("EXCEPTION: in RollerServlet", pageException);            request.setAttribute("DisplayException", pageException);        }        return outty;    }    //------------------------------------------------------------------------    /**     * Try to load user-specified Decorator (if specified).  Failing that     * see if user has a _decorator Page, if not check for a _decorator     * in the Preview resource loader.  Finally, if none of those can     * be found fall back to the no-op decorator.     * @param object     * @return     */    private Template findDecorator(String decoratorName, UserManager userMgr, WebsiteData wd)         throws ResourceNotFoundException, ParseErrorException, RollerException, Exception    {        Template decorator = null;        PageData decoratorPage = null;        String decoratorId = null;                // check for user-specified decorator        if (decoratorName != null)        {                decoratorPage = userMgr.getPageByName(wd, decoratorName);            if (decoratorPage != null)             {                decoratorId = decoratorPage.getId();            }        }                // if no user-specified decorator try default page-name        if (decoratorPage == null)        {            decoratorPage = userMgr.getPageByName(wd, "_decorator");            if (decoratorPage != null)             {                decoratorId = decoratorPage.getId();            }            else            {                // could be in PreviewResourceLoader                decoratorId = "_decorator";            }        }        // try loading Template        if (decoratorId != null)         {            try            {                decorator = getTemplate(decoratorId, "UTF-8");            }            catch (Exception e)            {                // it may not exist, so this is okay            }        }                // couldn't find Template, load default "no-op" decorator        if (decorator == null)         {            decorator = getTemplate("/themes/noop_decorator.vm", "UTF-8");        }        return decorator;    }    /**      * Prepare for page execution be setting content type, populating context,     * and processing the page decorator if needed.     */    protected Template prepareForPageExecution(Context ctx, RollerRequest rreq,         HttpServletResponse response, PageData pd) throws Exception    {                            Template outty = null;        UserManager userMgr = rreq.getRoller().getUserManager();        WebsiteData wd = pd.getWebsite();                // if page has an extension - use that to set the contentType        String pageLink = pd.getLink();        String mimeType = getServletConfig().getServletContext().getMimeType(pageLink);        if(mimeType != null) {            // we found a match ... set the content type            response.setContentType(mimeType);        }                /* old way ... not as flexible -- Allen G        int period = pd.getLink().indexOf('.');        if (period > -1)         {            String extension = pd.getLink().substring(period+1);            if ("js".equals(extension))             {                extension = "javascript";            }            response.setContentType("text/" + extension);        }        */            // Made it this far, populate the Context        ContextLoader.setupContext( ctx, rreq, response );        // Get the page        outty =  getTemplate( pd.getId(), "UTF-8" );        /**         * User can define a Decorator Template.         */        if (wd != null)        {            // parse/merge Page template            StringWriter sw = new StringWriter();            outty.merge(ctx, sw);            ctx.put("decorator_body", sw.toString());            // replace outty with decorator Template            outty = findDecorator((String)ctx.get("decorator"), userMgr, wd);                        }        return outty;    }        //------------------------------------------------------------------------    /**     * Handle error in Velocity processing.     */    protected void error( HttpServletRequest req, HttpServletResponse res,        Exception e) throws ServletException, IOException    {        mLogger.warn("ERROR in VelocityServlet",e);    }       /**      * Override to prevent Velocity from putting "req" and "res" into the context.     * Allowing users access to the underlying Servlet objects is a security risk.     * If need access to request parameters, use $requestParameters.     */    protected Context createContext(            HttpServletRequest req,            HttpServletResponse res) {                VelocityContext context = new VelocityContext();        context.put(REQUEST, new RequestWrapper(req.getParameterMap()));        return context;            }        /** Provide access to request params only, not actual request */    public static class RequestWrapper    {        Map params = null;        public RequestWrapper(Map params)         {            this.params = params;        }        public String getParameter(String key)        {            String ret = null;            String[] array = (String[])params.get(key);            if (array != null && array.length > 0)            {                ret = array[0];            }            return ret;        }    }}

⌨️ 快捷键说明

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