我在一些遗留代码中有一个JSP,它声明了一些函数:
<%!
String func1(String A) {
}
String func2(String B) {
}
%>
其他代码包括这些JSP,只直接调用func1
和func2
。
我想在不修改的情况下将这些函数移到java中,这样Intellij就可以在不升级Intellij以使用JSP的情况下合理地对它们进行操作(显示警告、重构等(。
我想直接移动它们(即剪切和粘贴(,而不必重写它们,因为有数千行代码。我还希望所有其他JSP中的函数调用保持有效,这样我就不必重写它们。
我该怎么做?
我看到了servlet介绍页面,它提示我可以用servlet替换JSP,但具体如何替换还不太清楚。此外,我有数百个文件,其中包括现有的JSP,所以我不想删除页面,只想在Java中定义它的所有功能。
我还看到了一些示例问题,展示了如何声明函数,但并没有真正看到如何在Java中声明其中的一些函数。
编辑:
根据这个答案,我正在使用
- 服务器版本:Apache Tomcat/7.0.108
- Servlet版本:3.0
- JSP版本:2.2
是的,它很旧。这是一个遗留应用程序。
如果您使用的是Servlet容器的最新版本,那么您可以将对象设置到应用程序范围并访问其方法。下面是一些演示代码。编译这个文件并将其放在类路径中(例如,放在web应用程序的classes文件夹中(。
package rick;
public class MyFunctions {
public String func1(String a) {
return " hello " + a;
}
public String func2(String b) {
return " Hello " + b;
}
}
在您的JSP中,您可以使用类似的东西
<%@ page import="rick.MyFunctions"%>
<%
application.setAttribute("my", new MyFunctions());
%>
${my.func1("John")}
${my.func2("Jane")}
输出为你好约翰你好简
另一种解决方案可以用于访问scriptlet中的对象及其方法。编译此文件并将其放入web应用程序的类文件夹中。
package rick;
public class MyFunctions2 {
public String func12(String a) {
return " hello2 " + a;
}
public String func22(String b) {
return " Hello2 " + b;
}
}
在您的JSP中,您可以使用类似的东西
<jsp:useBean id = "my2" class = "rick.MyFunctions2"></jsp:useBean>
<%
out.print(my2.func12("Joe"));
out.print(my2.func22("Mary"));
%>
输出为你好2乔你好2玛丽