You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSP中<jsp:include>能否异步/在其他HTML渲染完成后执行

核心结论

<jsp:include> 是服务端执行的包含逻辑,会在服务端把所有引用的JSP内容拼接成完整HTML后才返回给浏览器,只要侧边栏JSP渲染耗时长,整个响应都会被阻塞,浏览器没法优先渲染Welcome文本。要实现主内容优先展示,有两种成熟实现方案。

方案1:前端异步加载侧边栏(推荐,稳定性最高)

思路是主页面首屏只输出核心主内容,侧边栏预留空容器占位,等主内容渲染完成后,再通过异步请求拉取侧边栏内容注入页面,完全不阻塞主内容展示。

  • 改造后主页面代码:
<body class="nav-md">
    <div class="container body">
        <div class="main_container">
            <!-- 侧边栏占位容器 -->
            <div id="sideNavWrap"></div>

            <!-- 主内容区靠前放置,优先输出渲染 -->
            <div class="right_col" role="main">
                <div class="alert alert-success" style="margin-top: 60px;">Welcome</div>
            </div>

            <jsp:include page='_Footer_Note.jsp'></jsp:include>
        </div>
    </div>

    <script>
        // DOM解析完成(主内容已渲染)后加载侧边栏
        document.addEventListener('DOMContentLoaded', () => {
            fetch('_Side_Navigation.jsp')
                .then(resp => resp.text())
                .then(navHtml => {
                    document.getElementById('sideNavWrap').innerHTML = navHtml;
                    // 若侧边栏有交互初始化逻辑,在此处补充执行
                })
                .catch(err => console.error('侧边栏加载异常:', err));
        });
    </script>
</body>
  • 注意事项:
    • 侧边栏依赖的CSS、JS文件需要提前在主页面引入,避免内容注入后样式错乱、交互失效
    • 可以给侧边栏占位容器加固定高度和加载提示,减少布局跳动
方案2:服务端分块输出(无需写JS,兼容性一般)

思路是输出完主内容后,手动把已生成的响应内容推给浏览器,再继续渲染耗时较长的侧边栏,不需要改前端加载逻辑。

  • 改造后代码:
<body class="nav-md">
    <div class="container body">
        <div class="main_container">
            <div class="right_col" role="main">
                <div class="alert alert-success" style="margin-top: 60px;">Welcome</div>
            </div>
            <%
                // 将已渲染内容立即推送给浏览器
                response.flushBuffer();
            %>
            <!-- 后续渲染侧边栏时,主内容已经可以在浏览器展示 -->
            <jsp:include page='_Side_Navigation.jsp'></jsp:include>

            <jsp:include page='_Footer_Note.jsp'></jsp:include>
        </div>
    </div>
</body>
  • 注意事项:该方案稳定性受服务端配置影响,如果服务端开启了Gzip压缩、或者经过反向代理层缓存,flushBuffer() 可能失效,无法实现分块推送。

内容的提问来源于stack exchange,提问作者lauwis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.14 16:15:48