Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';使用JSP include指令包含文件、JSP include操作和使用JSP标记文件之间的区别是什么?_Java_Jsp_Include_Jsp Tags_Tagfile - Fatal编程技术网

Java 什么';使用JSP include指令包含文件、JSP include操作和使用JSP标记文件之间的区别是什么?

Java 什么';使用JSP include指令包含文件、JSP include操作和使用JSP标记文件之间的区别是什么?,java,jsp,include,jsp-tags,tagfile,Java,Jsp,Include,Jsp Tags,Tagfile,似乎有两种方法可以使用JSP进行模板化。包括带有以下语句之一的文件 <%@ include file="foo.html" %> <jsp:include page="foo.html" /> 或者使用JSP标记文件 // Save this as mytag.tag <%@ tag description="Description" pageEncoding="UTF-8"%> <html> <head> </head&g

似乎有两种方法可以使用JSP进行模板化。包括带有以下语句之一的文件

<%@ include file="foo.html" %>
<jsp:include page="foo.html" />

或者使用JSP标记文件

// Save this as mytag.tag
<%@ tag description="Description" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
    <jsp:doBody/>
</body>
</html>
//将其另存为mytag.tag
在另一个JSP页面中,使用

<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:mytag>
    <h1>Hello World</h1>
</t:mytag>

你好,世界
那么我应该使用哪种方法呢?一个现在被认为是不推荐的,还是它们都有效并且涵盖了不同的用例

编辑

使用此标记文件与使用include不一样吗

// Save this as product.tag
<%@ tag description="Product templage" pageEncoding="UTF-8"%>
<%@ tag import="com.myapp.Product" %>
<%@ attribute name="product" required="true" type="com.myapp.Product"%>

Product name: ${product.name} <br/>
Quantity: ${product.quantity} <br/>
//将此另存为product.tag
产品名称:${Product.name}
数量:${product.Quantity}
并在另一个JSP上使用

<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:product>
    <c:forEach items="${cart.products}" var="product">
        <t:product product="${product}"/>
    </c:forEach>
</t:product>

在我看来,这与使用include并向其传递参数非常相似。那么,标记文件是否与包含文件相同?

-指令标记指示JSP编译器在创建生成的servlet代码之前将包含文件的内容合并到JSP中。这相当于将包含页面中的文本剪切并粘贴到JSP中

  • 在运行时只执行一个servlet
  • 可以在包含的页面中访问父页面中声明的Scriptlet变量(请记住,它们是同一页面)
  • 包含的页面不需要编译为独立的JSP。它可以是代码片段或纯文本。包含的页面将永远不会编译为独立页面。包含的页面也可以有任何扩展名,不过.jspf已经成为一个常规使用的扩展名
  • 旧容器的一个缺点是,在更新父页面之前,对include页面的更改可能不会生效。Tomcat的最新版本将检查include页面是否有更新,并在更新后强制重新编译父级
  • 另一个缺点是,由于代码直接内联到生成的servlet的服务方法中,因此该方法可能会变得非常大。如果超过64KB,JSP编译可能会失败
-另一方面,JSP操作标记指示容器暂停此页面的执行,运行包含的页面,并将该页面的输出合并到此页面的输出中

  • 每个包含的页面在运行时作为单独的servlet执行
  • 可以在运行时有条件地包括页面。这对于模板化使用包含构建页面的框架通常很有用。父页面可以根据某些运行时条件确定要包括的页面(如果有)
  • scriptlet变量的值需要显式地传递到include页面
  • 包含的页面必须能够自行运行
  • 由于生成的servlet类超过了最大方法大小,因此不太可能出现编译错误
根据您的需要,您可以使用

相比,
的主要优点是:

允许传递参数

<jsp:include page="inclusion.jsp">
    <jsp:param name="menu" value="objectValue"/>
</jsp:include>

这在JSP语法元素概述中是不可能的 首先,为了让事情更清楚,以下是对以下内容的简要概述:

  • :这些将JSP页面作为 全部
  • :这些是Java编码元素,例如 声明、表达式、脚本和注释
  • :JSP对象可以显式创建,也可以直接创建 隐式和可在给定范围内访问,例如从 JSP页面或会话中的任意位置
  • :这些将创建对象或影响JSP中的输出流 回应(或两者兼而有之)

内容如何包含在JSP中 有几种机制可以重用JSP文件中的内容

以下4种将内容包含在JSP中的机制可归类为直接重用
(前3种机制引用自)

1) 该指令包括:

静态:在翻译时将文件属性值中的内容添加到当前页面。指令是 最初用于静态布局模板,如HTML标题

2)
标准操作:

动态:在请求时将页面属性值中的内容添加到当前页面。更倾向于动态 内容来自JSP

3)
JSTL标记:

动态:在请求时将URL属性值中的内容添加到当前页面。它的工作原理很像
,但它更强大、更灵活:与 另外两个包括,
url可以来自外部 web容器

4) 前奏曲和尾声: 静态:前奏曲和尾声只能应用于页面的开头和结尾
您可以隐式地包含前奏曲(也称为标题)和尾声 (也称为页脚)通过添加
元素分别位于 Web应用程序Web.xml部署描述符中的
元素。请在此处阅读更多信息:


标记文件是一种内容重用的间接方法,即封装可重用内容的方法。 标记文件是包含JSP代码片段的源文件,可作为自定义标记重用

包含文件和标记文件的用途不同

(JSP 2.0引入的概念)是创建自定义标记的选项之一。这是一种构建自定义标记的更快更简单的方法。 ,也称为标记扩展,是允许自定义逻辑的JSP元素
<%@ include file="header.html" %>
<jsp:include page="header.jsp" />
<c:import url=”http://www.example.com/foo/bar.html” />