【发布时间】:2013-04-29 03:22:49
【问题描述】:
我有一个过滤器,它处理给定的 servlet 映射并包含一个保存每个页面结构的 JSP。
servletContext.getRequestDispatcher( "/index.jsp" ).include( request, response );
在 jsp 内部,我有一个自定义 jstl 标记,它根据一系列规则处理父级中另一个 JSP 部分的包含(包含在“body”标记内完成:
pageContext.include( ProcessURI.getJSPLocation( request.getRequestURI() ) );
在最新包含的 JSP 中,我希望能够编写样式表并附加到响应中。我为此使用了一个标记库。
<taglib:head>
<link rel="stylesheet" href="some.css" >
</taglib:head>
由于最后一个 JSP 的内容包含在“body”标签中,我需要访问“head”并在最后一项之后插入 HTML(我无法在“body”标签内插入样式表)。
<head>
...
<!-- I want to insert here -->
<link rel="stylesheet" href="some.css" >
<head>
<body>
...
如何访问最后一个 taglib (taglib:head) 中的已处理响应,我可以在其中编辑其正文内容并将其插入到第一个包含的 jsp (/index.jsp) 中?
我想在给定的 taglib 调用之前可以访问已处理的响应,对吗?
我接受使用上述以外的其他技术实现相同结果的不同方式。
【问题讨论】:
-
也许有可能,但我宁愿不去想...在您的标签之前生成的内容可能已经流式传输到客户端(响应缓冲区大小)。
-
如何避免在评估 taglib 正文之前将内容流式传输到客户端?它应该是一种解决这个问题的方法,不会造成巨大的性能缺陷。
-
迟早会成为性能瓶颈(你的应用服务器必须缓存整个响应!)。我会考虑重新设计...
-
您对以其他方式达到相同结果的建议是什么?这里的目标是保留页面的头部和主体,这样我就可以专注于在主体内部进行开发。唯一的例外是样式表导入以及每个包含的一些自定义元标记。
标签: java jsp servlets jstl servlet-filters