我可以将该页面导入另一个页面,以便不再次重新编写代码,然后进行相应的更改. 你可以使用像这样的include指令将JSP页面合并到另一个页面中 –
<%@ include file="/path/to/yourfile.jsp" %>
或者使用< jsp:include>像这样的标准动作 –
<jsp:include page="/path/to/yourfile.jsp"/>
从上述两种方法中,第一种方法将导致yourfile.jsp的内容包含在页面翻译时.也就是说,当页面被翻译成一个完整的servlet类时,yourfile.jsp的内容将包含在servlet中.所以这种包含只会发生一次,页面翻译时间只在你的应用程序启动后第一个用户请求发生.
如果您使用第二种方法,那么在每个用户请求中,来自yourfile.jsp的响应将包含在运行时,而不是页面转换时.
使用include伪指令时,基本上将目标文件的内容复制并粘贴到主文件中.如果目标文件包含生成动态内容的任何标记或EL,那么它们也将成为主文件的一部分,它们将相应地执行并生成动态内容.没问题.
但这种方法有一些局限性.例如,使用include包含的页面无法更改响应状态代码或设置标题,这意味着您无法从yourfile.jsp调用addCookies()或其他一些标头设置方法.如果你这样做,你不会得到错误,你只是不会得到你所希望的.如果您使用< jsp:include>然后所有这些都可以在包含的页面中完成,它们将相应地工作.
这两种方法之间存在另一个重要区别.假设您要包含一个文件,该文件具有一些上下文相关的文本,这些文本会根据它们所包含的页面而发生变化.使用include方法,您将无法优雅地完成此任务.但是使用< jsp:include>方法,你可以这样做 –
<jsp:include page="/path/to/yourfile.jsp"> <jsp:param name="myContextSensitiveText" value="Context Sensitive!!" /> </jsp:include>
这意味着您要为yourfile.jsp指定一个新的请求参数,然后您可以从该文件中访问该参数并相应地呈现它 –
${param.myContextSensitiveText} - Context Insensitive Text!!
使用include方法,您将无法实现此目的.
您应该使用哪一个完全取决于您的设计选择.
你应该记住另一件事 – 这两种方法都会将目标文件的内容包含在主文件中,尽管方式不同.因此,如果它们都包含像< html>这样的html元素或者< body>,那么你最终会得到两个< html>和两个< body>最终渲染页面中的元素,这些元素无效.
有关更多信息,请查看here和here.
编辑
第三种方法是使用JSTL包含页面.您可以使用import
JSTL标记来实现此目的 –
<%-- 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" />
这种方法的工作方式与< jsp:include>完全相同,除了它更强大一些.您可以在应用程序目录之外的页面中包含内容,甚至也可以包含在容器外部!举个例子 –
<c:import url="http://www.google.com" />
此行将包含Google主页的HTML内容.
如果您需要将参数传递到包含的页面,例如< jsp:include>,那么您可以使用param
标记 –
<c:import url="/path/to/yourfile.jsp"> <c:param name="myContextSensitiveText" value="Context Sensitive!!" /> </c:import>
并以相同的方式访问它 –
${param.myContextSensitiveText} - Context Insensitive Text!!