问题:如何在运行时获取服务器加载为给定JSP文件生成的servlet类的文件路径?例如,我有一个可以在某个URL访问的JSP文件research_form_manage.jsp,我想记录正在处理我的请求的生成的__research_form_manage.java的文件路径(它可能在服务器的缓存中)。 / p>
上下文:我在WebLogic 12c上部署了一个Web应用程序(我使用IntelliJ中的JRebel自动部署)。有时候我会收到错误,因为JSP是从某个缓存加载的并且已经过时了。我手动清除了我知道的缓存位置(来自my_domain \ server下的tmp \和cache \,然后重新启动服务器),但文件仍然从缓存中加载。
我找到this idea关于如何定位缓存类的加载位置,我想用类似的东西记录jsp翻译的servlet的位置
...class.getProtectionDomain().getCodeSource().getLocation();
答案 0 :(得分:0)
通过在JSP文件中添加以下行,我找到了一种似乎有效的方法:
<%= getClass().getProtectionDomain().getCodeSource().getLocation() %>
该类位于我删除的domain \ servers ... \ tmp文件夹中,因此我不知道旧版本的jsp来自何处。
这段代码完成了我的需要,但它并不是那么好,因为这意味着我必须修改JSP,然后记得在推送之前清理它。我最初想在某处放置断点并添加一个带有表达式的监视,该表达式将根据jsp文件名提供此文件路径。
所以,如果有人有更好的方法,请分享。