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中的相同名称变量不';不会引起异常吗?_Java_Jsp_Include_Redefinition_Redefine - Fatal编程技术网

Java 为什么不同包含jsp中的相同名称变量不';不会引起异常吗?

Java 为什么不同包含jsp中的相同名称变量不';不会引起异常吗?,java,jsp,include,redefinition,redefine,Java,Jsp,Include,Redefinition,Redefine,我有一个index.jsp,其中包括header.jsp和frontpage.jsp,如下所示: <body> ... <%@ include file="include/header.jsp"%> ... <table>...<td> <%@ include file="include/frontpage.jsp"%></td>.... 在frontpage.jsp中: ... String __jspN

我有一个index.jsp,其中包括header.jsp和frontpage.jsp,如下所示:

<body>
...
    <%@ include file="include/header.jsp"%>
...
<table>...<td> <%@ include file="include/frontpage.jsp"%></td>....
在frontpage.jsp中:

...
    String __jspName = this.getClass().getSimpleName().replaceAll("_", ".");
    System.out.println("[frontpage.jsp] "front_url = " + fp_front_url);
...
事实上,这是一个意外,我忘记删除其中一个声明。但是当我在Tomcat6下运行index.jsp时。它在catalina.out中正常工作(注意:出于安全原因,我省略了front_url的值)


我的困惑是:“为什么JVM不报告‘变量重新定义’异常?”

您的两个JSP文件被JSP编译器编译成两个不同的servlet。在每种情况下,变量的作用域都是其各自的servlet类,因此这与在两个单独的Java类中声明具有相同名称的字段非常相似:不会发生冲突

这在代码中很明显,因为您依赖编译的JSP页面的类名来设置
\uu jspName
变量:

String __jspName = this.getClass().getSimpleName().replaceAll("_", ".");

这将为您的两个包含的文件生成
header.jsp
frontpage.jsp
,表明它们已编译为两个独立的类。

但我认为您所说的是jsp:include。我认为@include就像宏一样。如果没有,jsp:include和@include=之间有什么区别?
...
[header.jsp] used user quota = 0
[frontpage.jsp] front_url = ...
...
String __jspName = this.getClass().getSimpleName().replaceAll("_", ".");