Java JSP访问非jdk提供的静态字段/方法(JSP EL 3.0)
在a中,我学习了如何使用如下代码为JSP(运行在Tomcat 8.0.9上)提供对java.lang类的静态字段和方法的访问,甚至可以访问Java JSP访问非jdk提供的静态字段/方法(JSP EL 3.0),java,jsp,jakarta-ee,el,tomcat8,Java,Jsp,Jakarta Ee,El,Tomcat8,在a中,我学习了如何使用如下代码为JSP(运行在Tomcat 8.0.9上)提供对java.lang类的静态字段和方法的访问,甚至可以访问java.time包中的类: package test; import javax.el.ELContextEvent; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.
java.time
包中的类:
package test;
import javax.el.ELContextEvent;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.jsp.JspFactory;
@WebListener
public class Config implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
JspFactory.getDefaultFactory().getJspApplicationContext(event.getServletContext()).addELContextListener((ELContextEvent e) -> {
e.getELContext().getImportHandler().importPackage("java.time");
});
}
@Override
public void contextDestroyed(ServletContextEvent event) {}
}
现在我可以在JSP中执行:${LocalDate.now{}}
。但是,当我尝试将自己的类导入el上下文时:
@Override
public void contextInitialized(ServletContextEvent event) {
JspFactory.getDefaultFactory().getJspApplicationContext(event.getServletContext()).addELContextListener((ELContextEvent e) -> {
e.getELContext().getImportHandler().importPackage("java.time");
e.getELContext().getImportHandler().importClass("test.LocalDateUtils");
});
}
给定test.LocalDateUtils类:
package test;
import java.time.LocalDate;
public final class LocalDateUtils {
public static boolean isToday(LocalDate date) {
return LocalDate.now().equals(date);
}
}
使用以下命令从JSP调用时:
${LocalDateUtils.isToday(LocalDate.now())}
我遇到了一个例外:
javax.el.ELException: The class [test.LocalDateUtils] could not be imported as it could not be found
javax.el.ImportHandler.importClass(ImportHandler.java:114)
如何将自定义类添加到ImportHandler的类路径中,以便找到并解析它们