我正在支持一个较旧的JSP系统,该系统可能正在使用包括类和函数在内的非标准方式。 这些类不是直接编写类文件并将其编译为jar文件,而是直接在“子” JSP中编写,然后包含在“父” JSP中。

我遇到的问题是,在JDeveloper中,即使IDE可以识别include语句中的文件,我也会收到未定义MyClass和ChildFunction()的错误消息。 当我将2个JSP放到服务器上时,该页面将加载并以预期结果运行。 结果,当我处理真实代码时,我有一个超过1000行的JSP,其中包含一百多个语法错误,因此,直到将其放在服务器上之前,我才能知道我的代码在语法上是否正确。 我希望它简单一些(/愚蠢),例如类加载器错误或配置错误,但我无法修复它。 任何帮助是极大的赞赏。

我在下面包括了两个存根文件:

MyClass.jsp文件:

<%@ page import="java.lang.*,java.net.*,java.text.*,javax.servlet.http.*" %>
<%!
class MyClass() {
  public MyClass() { super(); }
  private int it=0;
  public void setIt (int it) {this.it = it; }
  public int getIt () { return it; }
}
public String ChildFunction(){
    return " ChildFunction ";
}
%>

Parent.jsp文件:

<%@ page contentType="text/html;charset=WINDOWS-1252"%>
<%@ page language="java" session="true" import="java.lang.*,java.net.*,java.text.*,javax.servlet.http.*" %>
<HTML>
<HEAD><TITLE>Test page</TITLE></HEAD>
<BODY>
<%@ include file="./MyClass.jsp" %>
<br>Result of calling Child Function:<% out.print(ChildFunction()); %>
<br>Result of declaring MyClass:
<% 
MyClass mc = new MyClass();
out.print(mc.getIt());
 %>
</BODY>
</HTML>

在有人建议我将代码放在类文件中并使用EAR / WAR文件进行部署之前,这不是一种选择。 这是我需要能够支持的现有遗留系统。

===============>>#1 票数:0

不要将功能或子类放在希望在其他程序中使用它们的JSP中。 (毕竟,它们是该特定JSP下的类。)这是非常糟糕的设计。 在实际的.java文件中创建类,进行编译,然后从JSP中调用它们。 即使不特别推荐这样做(请参阅如何避免JSP文件中的Java代码 ),但是它更好,也更好。

如果有权访问文件系统,则无需将类放在EAR / WAR中。 只需将它们放在webapps/{theApp}/WEB-INF/classes/...下的文件系统中webapps/{theApp}/WEB-INF/classes/...

您甚至可以完全省去IDE,只需将所有.java文件保存在webapps/{theApp}/WEB-INF/classes/...打开控制台,CD到该目录,并对其进行javac 当然没有必要将类文件放在jar中。

当然,您确实必须随后重新启动应用程序。

  ask by dave translate from so

未解决问题?本站智能推荐: