如何将函数从JSP移动到java文件



我在一些遗留代码中有一个JSP,它声明了一些函数:

<%!
String func1(String A) {
}
String func2(String B) {
}
%>

其他代码包括这些JSP,只直接调用func1func2

我想在不修改的情况下将这些函数移到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玛丽

最新更新