在JSP'中重复;s包括指令
这段代码不是真实的,但更简单,并显示了问题所在 假设我有第一个名为 Base.jsp在JSP'中重复;s包括指令,jsp,methods,include,multiple-instances,Jsp,Methods,Include,Multiple Instances,这段代码不是真实的,但更简单,并显示了问题所在 假设我有第一个名为 Base.jsp <%! class Base { public String Parm0 = ""; public String Parm1 = ""; Base () { PrintMessage("Base Created!!"); } } javax.servlet.jsp.JspWriter Out; void SetJspWriter(javax.s
<%!
class Base {
public String Parm0 = "";
public String Parm1 = "";
Base () {
PrintMessage("Base Created!!");
}
}
javax.servlet.jsp.JspWriter Out;
void SetJspWriter(javax.servlet.jsp.JspWriter out) {
Out = out;
}
void PrintMessage(String Msg) {
try {
Out.print("<P style=\"color:rgb(255,0,0)\">"+Msg+"</P>");
}
catch (Exception e) {}
}
%>
<%@ include file="Base.jsp" %>
<%!
class File0 {
public Base MyBase;
File0 () {
MyBase = new Base();
PrintMessage("Based Used!!");
}
}
%>
<%@ include file="Base.jsp" %>
<%@ include file="Fil0.jsp" %>
<%!
class File1 {
public Base MyBase;
public File0 MyFil0;
File1 () {
MyBase = new Base();
MyFil0 = new File0();
PrintMessage("Based and Fil0 Created!!");
}
}
%>
<%
SetJspWriter(out);
File1 MyFil1 = new File1();
%>
现在我有了第二个使用基本文件的文件:
Fil0.jsp
<%!
class Base {
public String Parm0 = "";
public String Parm1 = "";
Base () {
PrintMessage("Base Created!!");
}
}
javax.servlet.jsp.JspWriter Out;
void SetJspWriter(javax.servlet.jsp.JspWriter out) {
Out = out;
}
void PrintMessage(String Msg) {
try {
Out.print("<P style=\"color:rgb(255,0,0)\">"+Msg+"</P>");
}
catch (Exception e) {}
}
%>
<%@ include file="Base.jsp" %>
<%!
class File0 {
public Base MyBase;
File0 () {
MyBase = new Base();
PrintMessage("Based Used!!");
}
}
%>
<%@ include file="Base.jsp" %>
<%@ include file="Fil0.jsp" %>
<%!
class File1 {
public Base MyBase;
public File0 MyFil0;
File1 () {
MyBase = new Base();
MyFil0 = new File0();
PrintMessage("Based and Fil0 Created!!");
}
}
%>
<%
SetJspWriter(out);
File1 MyFil1 = new File1();
%>
现在我有了第三个使用基本文件的文件:
Fil1.jsp
<%!
class Base {
public String Parm0 = "";
public String Parm1 = "";
Base () {
PrintMessage("Base Created!!");
}
}
javax.servlet.jsp.JspWriter Out;
void SetJspWriter(javax.servlet.jsp.JspWriter out) {
Out = out;
}
void PrintMessage(String Msg) {
try {
Out.print("<P style=\"color:rgb(255,0,0)\">"+Msg+"</P>");
}
catch (Exception e) {}
}
%>
<%@ include file="Base.jsp" %>
<%!
class File0 {
public Base MyBase;
File0 () {
MyBase = new Base();
PrintMessage("Based Used!!");
}
}
%>
<%@ include file="Base.jsp" %>
<%@ include file="Fil0.jsp" %>
<%!
class File1 {
public Base MyBase;
public File0 MyFil0;
File1 () {
MyBase = new Base();
MyFil0 = new File0();
PrintMessage("Based and Fil0 Created!!");
}
}
%>
<%
SetJspWriter(out);
File1 MyFil1 = new File1();
%>
正如你所看到的。。。此代码将生成如下消息:
重复字段Fil1\u jsp.Out
在Fil1\u jsp类型中复制方法PrintMessage(字符串)
<%!
class Base {
public String Parm0 = "";
public String Parm1 = "";
Base () {
PrintMessage("Base Created!!");
}
}
javax.servlet.jsp.JspWriter Out;
void SetJspWriter(javax.servlet.jsp.JspWriter out) {
Out = out;
}
void PrintMessage(String Msg) {
try {
Out.print("<P style=\"color:rgb(255,0,0)\">"+Msg+"</P>");
}
catch (Exception e) {}
}
%>
<%@ include file="Base.jsp" %>
<%!
class File0 {
public Base MyBase;
File0 () {
MyBase = new Base();
PrintMessage("Based Used!!");
}
}
%>
<%@ include file="Base.jsp" %>
<%@ include file="Fil0.jsp" %>
<%!
class File1 {
public Base MyBase;
public File0 MyFil0;
File1 () {
MyBase = new Base();
MyFil0 = new File0();
PrintMessage("Based and Fil0 Created!!");
}
}
%>
<%
SetJspWriter(out);
File1 MyFil1 = new File1();
%>
如何解决这个错误
在此之前,我需要将Base包含在两个文件中:File0和File1。
和File1有Base和File0
编译器找到两个声明 尝试插入以下行:
javax.servlet.jsp.JspWriter Out
仅在最后一个文件Fil1.jsp
中,我认为使用includes实际上多次声明同一对象
另外,类File1
中有File0()
构造函数
此外,由于您在File0.jsp中包含Base.jsp,然后在File1.jsp中同时包含Base.jsp和File0.jsp,因此实际上您已经包含Base.jsp两次了
如果你想确切地看到发生了什么,请查找编译好的jsp:你的jsp文件被编译成
.java
,通常可以在tomcat/work
文件夹下找到,在linux中,它类似于:/usr/local/tomcat/work/Catalina/localhost/\uu/org/apache/jsp
/p>,这很好,因为这不是我真正的答案:)对不起,我正在寻找如何管理includes指令,也许还有其他替代方法,或者指出相同代码的多样性……@Anita我在上面的回答中包含了一条关于includes的评论。