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

📄 abstractservicer.java

📁 欢迎使用 FastJsp 开发框架! 编译说明: * 若要生成Api Javadoc文档
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            service = createPageService();
            service.start();
            //Debug.debug("AbstractServicer.processPageService() Line:210....pageParams.pageName:" + pageParams.pageName);
            // Note:response.isCommitted() always return true in RESIN Server 2.x and 3.x
            if (!(response.isCommitted() || response.containsHeader(StringUtils.CONTENT_DISPOSITION))) {
                forward(pageParams.pageName);    //jsp页面                 
            }
        } finally {
            if (service != null)
                service.end();
        }
    }

    /**
     * 输出页面静态资源,主要是图片
     * 注意:此静态资源位于 模块模板路径下
     * 自 3.1 后,须在页面放入 base 标签指示相对路径资源(如图片)所在模板位置
     * 基于 base 标签的静态资源由 app server 处理
     *
     * @param pathInfo
     */
    private void renderContextReources(String pathInfo) {

        if (module.moduleServletPath == null)
            output(servlet.getServletContext().getResourceAsStream(
                    new StringBuffer().append('/').append(pathInfo).toString())
            );
        else
            output(servlet.getServletContext().getResourceAsStream(
                    new StringBuffer().append('/').append(module.pageTemplateBase).append(pathInfo).toString())
            );

    }


    private void renderFrameworkReources(String pathInfo) {
        byte[] buf = null;
        int index = pathInfo.lastIndexOf('/');
        String resourceName = pathInfo.substring(index);    //"FastJsp.js"
        if (pathInfo.startsWith(StringUtils.RESOURCE_JS)) {
            buf = (byte[]) frameworkResources.get(StringUtils.RESOURCE_JS);
            if (buf == null) {
                try {
                    resourceName = new StringBuffer().append(SCRITPS_PATH).append(resourceName).toString();
                    buf = ResourceResolver.getResourceAsBytes(resourceName);
                    frameworkResources.put(StringUtils.RESOURCE_JS, buf);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        if (buf != null) {
            output(new ByteArrayInputStream(buf));
        }
    }

    private final static String HEADER_LAST_MODIFIED = "Last-Modified:";
    private final static String HEADER_EXPIRES = "Expires:";

    private void output(InputStream in) {
        if (in == null)
            return;
        OutputStream out = null;
        try {
            response.setHeader(HEADER_LAST_MODIFIED, new Date().toString());
            response.setDateHeader(HEADER_EXPIRES, System.currentTimeMillis() + Constants.MONTH);
            response.setContentLength(in.available());
            out = response.getOutputStream();
            byte[] buf = new byte[SystemUtils.IS_OS_SOLARIS ? 16384 : 2048];
            int len = 0;
            while ((len = in.read(buf)) != -1) {
                out.write(buf, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null)
                    in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (out != null)
                    out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 处理服务中产生的各类错误
     *
     * @param exeption 包括从程序和页面跑出的任何错误
     * @throws IOException
     * @throws ServletException
     */
    private void handleException(Exception exeption) throws IOException, ServletException {
        pageParams.layoutModule.getExceptionHandler().handle(exeption, this);
    }

    public FastJspServlet getServlet() {
        return servlet;
    }

    public HttpServletRequest getRequest() {
        return request;
    }

    public HttpServletResponse getResponse() {
        return response;
    }

    public PageService getPageService() {
        return (PageService) request.getAttribute(FastJsp.PAGE_SERVICE);
    }

    /**
     * 激活指定表现页面
     * 注:该页面是同一布局或模板目录下的页面
     *
     * @param pageName 如:"index","admin/login"
     * @throws IOException
     * @throws ServletException
     */
    public void forward(String pageName) throws IOException, ServletException {
        servlet.getServletContext().getRequestDispatcher(pageParams.getForwardingTemplateFile(pageName)).forward(request, response);
    }


    /**
     * 取得对模板“布局”位置的相对定位
     * 目的:用于布局范围的模板位置再定位
     *
     * @return 如:"","red","red/a1"
     */
    public String getTemplateChild() {
        return StringUtils.EMPTY;
    }


    protected PageParams getPageParams() {
        return pageParams;
    }


    /**
     * 生成当前page service
     *
     * @return
     */
    private AbstractPageService createPageService() {
        AbstractPageService o = (AbstractPageService) request.getAttribute(FastJsp.PAGE_SERVICE);
        if (o == null) {
            o = (AbstractPageService) module.getPageServiceFactory().createPageService(this);
            o.initialize();
            request.setAttribute(FastJsp.PAGE_SERVICE, o);
        }
        return o;
    }

    /**
     * 取得当前模块
     *
     * @return
     */
    public Module getModule() {
        return module;
    }


    public String getServletContextPath() {
        return servletContextPath;
    }

    protected StateURL getURLState() {
        return new StateURL() {
            public void encodeBeforeUrlBuild(Link link) {
            }

            public String encodeAfterUrlBuild(String url) {
                return response.encodeURL(url);
            }

            public String decodeBeforeDataBuild(String uri) {
                return uri;
            }

            public void decodeAfterDataBuild(PageData data) {
            }
        };
    }


    /**
     * 当前模块所包含的布局列表
     *
     * @return
     * @since 3.1
     */
    protected abstract PageModule[] getLayoutModules();

    /**
     * 取得缺省布局
     * 在url未包含布局信息时将应用此布局
     *
     * @return 空值表示无布局信息
     * @since 3.1
     */
    protected abstract PageModule getDefaultLayoutModule();

    /**
     * 取得欢迎页面
     * 配置有效时,在以 servlet path 如 "/forums[/]" 访问时将提交此页面访问
     * 注意:单布局不支持 welcomePage 因为 appserver 的 default 页面是"/index.html",而缺省布局页面也是 "index.html",情况过于复杂且无太大意义。
     * 虽可以改进单独让 welcome 页面不是 index ,但在单布局情况下没有太大意义,要么就只能就配置web.xml的 servletPath为"/forums"等情况
     *
     * @return null 表示无欢迎页面,直接跳转到缺省布局
     * @see PageParamsImpl
     */
    protected PageModule getWelcomePageModule() {
        return null;
    }


}

⌨️ 快捷键说明

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