我支持可能使用非标准方式包含类和函数的旧JSP系统。这些类直接写在" child"而不是编写类文件并将它们编译成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文件进行部署之前,这不是一个选项。这是我需要能够支持的现有遗留系统。
答案 0 :(得分:0)
不要将函数或子类放在JSP中,以期在其他JSP中使用它们。 (毕竟,这就是那个特定JSP下的 sub 类。)这是非常糟糕的设计。在实际的.java文件中创建类,编译它们,然后从JSP中调用它们。即便如此,也不是特别推荐(见How to avoid Java code in JSP files),但更好,更好。
如果您有权访问文件系统,则无需将类放入EAR / WAR中。只需将它们放在webapps/{theApp}/WEB-INF/classes/...
您甚至可以完全免除IDE,只需将所有.java文件保存在webapps/{theApp}/WEB-INF/classes/...
下打开控制台,cd到该目录,然后javac
。当然不需要将类文件放在罐子里。
当然,您必须在之后重新启动应用程序。