此代码不是真实的,但更简单并显示问题
假设我有第一个文件命名 的 Base.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) {}
}
%>
现在我有一个使用基本文件的第二个文件: 的 Fil0.jsp
<%@ include file="Base.jsp" %>
<%!
class File0 {
public Base MyBase;
File0 () {
MyBase = new Base();
PrintMessage("Based Used!!");
}
}
%>
现在我有一个使用基本文件的第三个文件: 的 Fil1.jsp
<%@ 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.Out
Fil1_jsp类型中的重复方法PrintMessage(String)
如何解决此错误 在我需要将Base包含在两个文件中之前:File0和File1。 File1有Base和File0 ......
编译器找到两个声明......
答案 0 :(得分:1)
尝试仅在最后一个文件javax.servlet.jsp.JspWriter Out;
中插入行Fil1.jsp
,我认为对于包含您实际上不止一次声明同一个对象的行。
此外,您在班级File0()
内有File1
个构造函数。
此外,由于你在File0.jsp中包含了Base.jsp,然后在File1.jsp中同时包含了Base.jsp和File0.jsp - 你实际上包含了两次Base.jsp!
如果你想查看到底发生了什么,请查看已编译的jsp:你的jsp文件被编译为.java
,通常可以在tomcat /work
文件夹下找到,在linux中它是这样的: /usr/local/tomcat/work/Catalina/localhost/_/org/apache/jsp