在previous question中,我学习了如何提供我的JSP(在Tomcat 8.0.9上运行)访问java.lang类的静态字段和方法,甚至是{{1}中的类。使用这样的代码打包:
java.time
现在我可以在我的JSP中执行: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) {}
}
。但是,当我尝试将自己的类导入el上下文时:
${LocalDate.now{}}
给出test.LocalDateUtils类:
@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");
});
}
使用以下命令从JSP调用时
package test;
import java.time.LocalDate;
public final class LocalDateUtils {
public static boolean isToday(LocalDate date) {
return LocalDate.now().equals(date);
}
}
我遇到了异常:
${LocalDateUtils.isToday(LocalDate.now())}
如何将自定义类添加到ImportHandler的类路径中,以便找到并解析它们?