如何在运行时加载的 jsp 中包含 html 片段?
Posted
技术标签:
【中文标题】如何在运行时加载的 jsp 中包含 html 片段?【英文标题】:How to include an html fragment in a jsp that loads at run-time? 【发布时间】:2013-11-30 14:22:30 【问题描述】:我需要在 JSP 中包含内容不使用包含指令。
用<%@include file="includeMe.htm" %>
做一个服务器端包含很容易,但是includeMe.htm
的内容被添加到JSP 在 JSP 被容器转换为Servlet 之前。这意味着如果 includeMe.htm 被修改,更改不会反映在生成的.java
Servlet 文件中。我已经厌倦了进入 Tomcats 生成的文件目录手动删除生成的 java 和 class 文件,或者每次包含的文件更改时重新部署我的应用程序。
我是否需要编写一个代码块来逐行从文本文件中读取数据然后这样写?
<%
while( not done reading from file )
String line = scanner.nextLine();
response.getWriter().println(line);
%>
有没有更简单或更清洁的方法?
【问题讨论】:
您可以将.tag
文件用于可重复使用的内容,也可以使用<jsp:include>
(INCLUDE 调度)。但是Tomcat应该能够重新编译具有此类依赖项的JSP AFAIK ...也许是因为您使用了不正确的扩展名。尝试改用.jspf
(JSP 片段)。
正如我所想,Tomcat 应该能够处理包含片段中的更改 - tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html(检查包含页面更改时重新编译 JSP)。
如果您想在运行时包含 includeMe.htm 的内容而不是编译团队,那么请使用 jsp include 而不是 @include。它是否解决了您的问题?
@Pavel 出于某种原因,我认为这个简单的解决方案不起作用,因为未修改随附的 jsp 页面。请将您的评论更改为答案,以便其他人在搜索时更容易找到。
也许这是Tomcat的一个新特性。例如,下面的链接描述了我的假设:javapapers.com/jsp/… 不管怎样,我猜<jsp:include>
会起作用。
【参考方案1】:
看看答案here。
你也可以使用<c:import>
:
2)
<jsp:include>
标准动作<jsp:include page="header.jsp" />
动态:将页面属性值的内容在请求时添加到当前页面。更多用于动态 来自 JSP 的内容。
3)
<c:import>
JSTL 标签:<c:import url=”http://www.example.com/foo/bar.html” />
动态:将来自 URL 属性值的内容添加到当前页面,在请求时。它的工作原理很像
<jsp:include>
,但它更强大、更灵活:不像 其他两个包括,<c:import>
url 可以来自外部 网络容器!
关于将文件读入字符串。如果文件很小,就一行:
String content = new Scanner(new File("filename")).useDelimiter("\\Z").next();
【讨论】:
【参考方案2】:您可以将.tag
文件用于可重用内容或将<jsp:include>
(包含分派)到另一个 JSP。
然而Tomcat是able to re-compile JSPs when any of the included files got changed:
包含页面更改时重新编译 JSP - Jasper 2 现在可以检测 JSP 在编译时包含的页面何时发生更改,然后重新编译父 JSP。
另请注意,通常的做法是对通过<%@include %>
包含的文件使用.jspf
(JSP 片段)扩展名。
【讨论】:
以上是关于如何在运行时加载的 jsp 中包含 html 片段?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring MVC 在 JSP 中包含 js 和 CSS