Java 什么';使用JSP include指令包含文件、JSP include操作和使用JSP标记文件之间的区别是什么?
似乎有两种方法可以使用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
<%@ 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” />