Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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标记之间的区别之一_Java_Jsp_Servlets - Fatal编程技术网

Java JSP include指令和JSP include标记之间的区别之一

Java JSP include指令和JSP include标记之间的区别之一,java,jsp,servlets,Java,Jsp,Servlets,根据JSP规范: JSP容器可以包括一种机制,用于在 包括文件更改,因此容器可以重新编译JSP页面。 然而,JSP1.2规范没有一种指导方法 包含文件的JSP容器已更改 我在一个在线教程中发现了这一点: 如果包含的文件已更改,但包含它的JSP未更改 然后,只有当我们使用includeaction标记时,更改才会反映出来。这个 如果将include指令用作JSP,则不会反映更改 不会更改,因此不会对其进行翻译(仅在此阶段 当使用指令)进行请求处理时,会包含该文件 因此,这些变化不会反映 然后,我编

根据JSP规范:

JSP容器可以包括一种机制,用于在 包括文件更改,因此容器可以重新编译JSP页面。 然而,JSP1.2规范没有一种指导方法 包含文件的JSP容器已更改

我在一个在线教程中发现了这一点:

如果包含的文件已更改,但包含它的JSP未更改 然后,只有当我们使用includeaction标记时,更改才会反映出来。这个 如果将include指令用作JSP,则不会反映更改 不会更改,因此不会对其进行翻译(仅在此阶段 当使用指令)进行请求处理时,会包含该文件 因此,这些变化不会反映

然后,我编写了一个示例来尝试:A.jsp、B.jsp和C.jsp

A.jsp使用jsp include指令包含C.jsp:

<%@ include file="/jsp/C.jsp" %> 

B.jsp包含使用jsp包含标记的C.jsp:

<jsp:include page="/jsp/C.jsp" />

当我在borwser中访问A.jsp和B.jsp时,它们都会正常显示, 然后我更改了C.jsp,并引用了A.jsp和B.jsp,它们都可以显示C.jsp的更改。但是如果JSP规范为true,那么A.JSP不应该显示C.JSP的更改。 有什么问题吗?


<%@ include file="/jsp/C.jsp" %> 
动态插入内容, 假设您在
A.jsp
中包含
C.jsp
,那么如果您在
C.jsp
中声明了变量,那么您可以在编译和运行时在
A.jsp
中引用它

但是如果你已经这样做了

然后
C.jsp
的内容将进入
A.jsp
(类似于复制和粘贴)(仅在运行时)


在此之后,如果您更改了
C.jsp
的内容,那么您需要再次调用
A.jsp的刷新。

首先,我们将执行此操作

  • include指令将粘贴页面,因为它位于 使用此语句
  • 如果您在
    A.jsp
    C.jsp
    中对静态内容进行了更改,它将与您所做的更改一起呈现

  • 此include action标记用于插入静态或动态 内容
  • 因此,更改将按原样反映,即
    C.jsp
    将 通过将请求和响应对象传递给它来执行 将执行的页面包含在
    A.jsp
  • 编辑:

    比如说,

    B.jsp

    <c:out value="${value}"/>
    
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <c:set var="value" value="10"/>
    
    <span>From @include <%@include file="B.jsp" %></span>
    <span>From jsp:include <jsp:include page="B.jsp" /></span>
    
    加载页面时,它将

    From @include 10
    From jsp:include
    
    如果你检查看,它会像,

    <span>From @include 10</span>
    <span>From jsp:include <c:out value/></span>
    
    <span>From @include 10</span>
    <span>From jsp:include </span>
    
    如果您检查并看到呈现的页面,它将如下所示:

    <span>From @include 10</span>
    <span>From jsp:include <c:out value/></span>
    
    <span>From @include 10</span>
    <span>From jsp:include </span>
    
    From@include 10
    来自jsp:include
    
    变量
    value
    的作用域仅在
    A.jsp

    jsp:include

    范围是第页

    @中包含

    范围是请求


    JSP规范中关于此主题的实际文本为:

    JSP容器可以包含一种机制,用于在包含的文件发生更改时收到通知,因此容器可以重新编译JSP页面。但是,JSP1.2规范没有一种方法来指导包含文件的JSP容器发生更改

    同一文本在本规范的所有后续版本中与当前版本(在编写本规范时为2.3)保持不变(规范版本除外)


    大多数JSP容器都会检测到包含文件中的更改,并在下次请求包含文件时触发重新编译。

    您能给我举一个代码示例“如果您在a.JSP和C.JSP中都有scriptlet,并且如果您在C.JSP中进行了更改,则不会反映为源JSP(a.JSP)没有更改。”?非常感谢。该初始引用不是取自JSP规范。这似乎是从一个在线教程。