使用 Java 包含 JSP 文件

Posted

技术标签:

【中文标题】使用 Java 包含 JSP 文件【英文标题】:Include JSP file with Java 【发布时间】:2011-08-03 06:04:14 【问题描述】:

我知道在 jsp 中包含和外部文件可以通过以下方式完成:

<%@ include file="banner.jsp" %>

但是有没有办法在 java 类/对象中做到这一点?

【问题讨论】:

你想在java clsas中包含jsp ????????????? @Jigar Joshi:包含来自 Servlet 的 jsp 视图是完全合理的做法。 @Jigar:通常我会嘲笑你那些问号,但在这种情况下,我觉得你是有道理的:) 请注意,@include 不能包含外部文件。该文件必须位于相同的网络内容中才能正常工作。 进一步@BalusC 的评论,来自JSTL 的&lt;c:import&gt; 能够包含外部文件,因此您可以使用它。 【参考方案1】:

没有办法:

<%@ include file="banner.jsp" %>

在 java 中,因为 - 你可以读到 here 这是一个静态 jsp 包含,它是在 JSP 编译时完成的, 我希望java中包含静态代码这样的东西。

【讨论】:

【参考方案2】:

在 Servlet 中你可以调用:

RequestDispatcher rd = request.getRequestDispatcher("include.jsp");
rd.include(request, response); 

【讨论】:

【参考方案3】:

您可以在 servlet(或任何有权访问当前请求的类)中通过RequestDispatcher

request.getRequestDispatcher("/banner.jsp").include(request, response);

请注意,您应该很少需要这样做。这意味着您正在从 servlet 输出视图内容,您应该主要在 jsp 中执行此操作。

【讨论】:

没错,但请注意,这不是最佳做法。在一个 servlet 中包含其他 servlet 是有意义的,但是在一个 servlet 中包含一个 JSP 就没有什么意义了。您宁愿将请求/响应转发给 JSP,而该 JSP 又包含其他 JSP。 @BalusC - 我刚刚添加了那个注释。 @BalusC 和@Bozho:我发现当我使用forward() 而不是include() 时,生成的jsp 页面会丢失客户端原始请求的上下文,如果我尝试使用该请求jsp页面中的对象来构造绝对url,我得到jsp页面的url而不是客户端请求的。前段时间,我在构建一个“mail-this-link-to-a-friend”功能时遇到了这个问题。 @Asaph:还有其他方法。 @BalusC:最好的方法是什么?

以上是关于使用 Java 包含 JSP 文件的主要内容,如果未能解决你的问题,请参考以下文章

java的文件包含漏洞

jsp的页面包含——静态包含动态包含

jsp使用include指令来包含txt文件时出现乱码

在JSp页面文件中嵌入java语言要素的几种方式

JSP中的include(静态包含文件)在包含html文件时,乱码问题的解决方法。

JSP运行过程 JSP脚本 静态动态包含 jsp指令 jsp内置对象jsp四大作用域 jsp动作元素 EL表达式 JSTL 设计模式 JSP开发模式 EL内置对象