gpt4 book ai didi

java - 如何从 servlet 设置或访问 Tomcat 中的 JspCompilationContext?

转载 作者:行者123 更新时间:2023-11-30 09:03:00 26 4
gpt4 key购买 nike

我有一个在 Tomcat 7 中实现的插件系统,它动态加载这些插件的类(可通过自定义类加载器重新加载)。不幸的是,如果一个插件有一个使用属于这个插件的类的 JSP,它就找不到这个类。这似乎是正确的行为,因为我们有 Tomcat 类加载器层次结构,而我的自定义类加载器位于底部。

尽管如此,我可以通过这个 hacky 的东西让这些类对 JSP 可用:

        URLClassLoader webappClassloader = (URLClassLoader)Thread.currentThread().getContextClassLoader();
Method addURLMethod = webappClassloader.getClass().getDeclaredMethod("addURL", URL.class);
addURLMethod.setAccessible(true);
for(String url : pluginFolders)
addURLMethod.invoke(webappClassloader, new URL("file://" + url));

请注意,插件不在 WEB-INF/classes 目录中。

一切都很好,但现在一个类只能加载一次(另请参见 this)。为了使插件可更新(无需重新启动整个 webapp),我使用了自定义类加载器。但是我无法将这个类加载器设置为由 Jasper 使用(我尝试了 Thread.currentThread().setContextClassLoader() 但没有效果)。我深入研究了 Jasper 的源代码,似乎应该可以设置自定义类加载器。但我不知道如何从 servlet 实现这一点。

也许你可以给我一个以下问题的答案?

  • 是否有可能获得例如servlet 中的 JspCompilationContext?
  • 我读过一些关于自定义 JSPServlet 的文章。这将如何完成?
  • 您对如何设置类加载器有更好的想法吗?

提前致谢!

最佳答案

需要自己设置ClassLoader使用 <Context>META-INF/context.xml .这将允许您指定将用于您的 Web 应用程序的类加载器。

关于java - 如何从 servlet 设置或访问 Tomcat 中的 JspCompilationContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25818119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com