在JSP'中重复;s包括指令

在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

这段代码不是真实的,但更简单,并显示了问题所在

假设我有第一个名为 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) {}
  }
%>
<%@ 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的评论。