我可以将自己的jsp页面导入另一个jsp页面吗?

Pra*_*ful 3 jsp jspinclude

我已经使用netbeans准备了一个静态html页面.我可以将该页面导入另一个页面,以便不再次重新编写代码,然后进行相应的更改.

MD *_*med 15

您可以使用这样的include指令将JSP页面合并到另一个页面中-

<%@ include file="/path/to/yourfile.jsp" %>
Run Code Online (Sandbox Code Playgroud)

或者使用<jsp:include>像这样的标准动作 -

<jsp:include page="/path/to/yourfile.jsp"/>
Run Code Online (Sandbox Code Playgroud)

从上述两种方法中,第一种方法将使yourfile.jsp页面翻译时包含内容.也就是说,当页面被翻译成一个完整的servlet类时,内容yourfile.jsp将包含在servlet中.因此,这种包含只会在页面翻译时发生一次,该时间仅在应用程序启动后的第一个用户请求中发生.

如果您使用第二种方法,那么在每个用户请求中,来自的响应yourfile.jsp都将包含在运行时,而不是页面转换时.

使用include指令时,基本上将目标文件的内容复制并粘贴到主文件中.如果目标文件包含生成动态内容的任何标记或EL,那么它们也将成为主文件的一部分,它们将相应地执行并生成动态内容.没问题.

但这种方法有一些局限性.例如,使用的页面include无法更改响应状态代码或设置标题,这意味着您无法调用addCookies()或其他一些标题设置方法yourfile.jsp.如果你这样做,你不会得到错误,你只是不会得到你所希望的.如果您使用,<jsp:include>那么所有这些都可以在包含的页面中完成,它们将相应地工作.

这两种方法之间存在另一个重要区别.假设您要包含一个文件,该文件具有一些上下文相关的文本,这些文本会根据所包含的页面而变化.通过这种include方法,您将无法优雅地完成此任务.但是通过这种<jsp:include>方法,你可以做到这一点 -

<jsp:include page="/path/to/yourfile.jsp">
    <jsp:param name="myContextSensitiveText" value="Context Sensitive!!" />
</jsp:include>
Run Code Online (Sandbox Code Playgroud)

这意味着您要为其指定一个新的请求参数yourfile.jsp,然后您可以从该文件中访问该参数并相应地呈现它 -

${param.myContextSensitiveText} - Context Insensitive Text!!
Run Code Online (Sandbox Code Playgroud)

采用这种include方法,你将无法做到这一点.

您应该使用哪一个完全取决于您的设计选择.

您应该记住另一件事 - 这两种方法都将目标文件的内容包含在主文件中,尽管方式不同.因此,如果它们都包含类似<html>or的html元素<body>,那么最终呈现的页面中最终会有两个<html>和两个<body>元素,这些元素将无效.

有关更多信息,您可以在这里这里查看.

编辑

第三种方法是使用JSTL包含页面.您可以使用importJSTL标记来实现此目的 -

<%-- You need to declare this at the top of your jsp page--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...............
...............

<c:import url="/path/to/yourfile.jsp" />
Run Code Online (Sandbox Code Playgroud)

这种方法的工作方式完全相同<jsp:include>,只是它的功能更强大.您可以在应用程序目录之外的页面中包含内容,甚至也可以包含在容器外部!举个例子 -

<c:import url="http://www.google.com" />
Run Code Online (Sandbox Code Playgroud)

这一行将包含谷歌主页的HTML内容.

如果您需要将参数传递给包含的页面<jsp:include>,那么您可以使用param标签 -

<c:import url="/path/to/yourfile.jsp">
    <c:param name="myContextSensitiveText" value="Context Sensitive!!" />
</c:import>
Run Code Online (Sandbox Code Playgroud)

并以相同的方式访问它 -

${param.myContextSensitiveText} - Context Insensitive Text!!
Run Code Online (Sandbox Code Playgroud)


小智 0

是的,您可以将jsp页面导入到另一个jsp中。

      <jsp:include page="/jsp/old.jsp"/>
Run Code Online (Sandbox Code Playgroud)

在 JSP 页面中包含内容