当我混合 JSTL 1.0 和 JSTL 1.1 taglib 声明时,它会在我的某些服务器上导致 ParseException,但不是全部。为什么?

2023-12-26

当我混合 JSTL 1.0 和 JSTL 1.1 taglib 声明时,它会在我的某些服务器上导致 ParseException,但不是全部。

这是给我带来麻烦的代码块:

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

<c:set var="TEXTVARIABLE">|STRINGOFTEXT|</c:set>
<c:set var="OTHERTEXTVARIABLE">${fn:contains(TEXTVARIABLE, '|STRINGOFTEXT|')}</c:set>

这是一个例外:

javax.servlet.jsp.JspException:com.caucho.jsp.JspLineParseException:/WEB-INF/jsp/online/system/modules/com.MYCOMPANY.marketing/templates/common/MY_JSP_PAGE.jsp:1:标签='out' / attribute = 'value': 解析值为“${fn:contains(TEXTVARIABLE, '|STRINGOFTEXT|')}”的自定义操作属性“value”时发生错误:org.apache.taglibs.standard.lang.jstl。 parser.ParseException:不支持 EL 函数。

但是,如果我将核心声明的 URI 更改为,一切都会正常工作http://java.sun.com/jsp/jstl/core

所以这里是真正奇怪的部分:出于某种原因,混合 1.0 和 1.1 taglib 声明只会导致我的两台服务器(我的登台服务器和我的生产服务器)出现异常。它在我的本地计算机或开发服务器上根本不会造成任何问题。为什么是这样?是什么可能导致这种行为差异?这三台服务器的设置和配置非常相似。

JSP 页面由 OpenCMS 提供,我正在使用 Caucho 的 Resin Web 服务器。我知道您不知道我的服务器或 CMS 是如何设置的,但实际上,我正在寻找的是想法。任何想法都会有帮助,这个问题一直让我抓狂。即使您不知道导致问题的原因,如果您对我如何解决有任何建议approach问题,这将非常有帮助。我只是不明白是什么导致了我的服务器之间的行为差​​异。

作为参考,这里是完整的堆栈跟踪:

javax.servlet.jsp.JspException: com.caucho.jsp.JspLineParseException: /WEB-INF/jsp/online/system/modules/com.MYCOMPANY.marketing/templates/common/MY_JSP_PAGE.jsp:1: tag = 'out' / attribute = 'value': An error occurred while parsing custom action attribute "value" with value "${fn:contains(TEXTVARIABLE, '|STRINGOFTEXT|')}": org.apache.taglibs.standard.lang.jstl.parser.ParseException: EL functions are not supported.
    at org.opencms.jsp.CmsJspTagInclude.includeActionWithCache(CmsJspTagInclude.java:369)
    at org.opencms.jsp.CmsJspTagInclude.includeTagAction(CmsJspTagInclude.java:241)
    at org.opencms.jsp.CmsJspTagInclude.doEndTag(CmsJspTagInclude.java:472)
    at _jsp._WEB_22dINF._jsp._online._system._modules._com__MYCOMPANY__marketing._templates._MAIN_0PAGE__jsp._jspService(_MAIN_0PAGE__jsp.java:153)
    at com.caucho.jsp.JavaPage.service(JavaPage.java:60)
    at com.caucho.jsp.Page.pageservice(Page.java:579)
    at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:179)
    at shared.filter.RemoteAddrFilterBase.doFilter(RemoteAddrFilterBase.java:57)
    at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
    at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115)
    at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:175)
    at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
    at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:485)
    at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:350)
    at org.opencms.flex.CmsFlexRequestDispatcher.includeExternal(CmsFlexRequestDispatcher.java:194)
    at org.opencms.flex.CmsFlexRequestDispatcher.include(CmsFlexRequestDispatcher.java:169)
    at org.opencms.loader.CmsJspLoader.service(CmsJspLoader.java:1193)
    at org.opencms.flex.CmsFlexRequestDispatcher.includeInternalWithCache(CmsFlexRequestDispatcher.java:423)
    at org.opencms.flex.CmsFlexRequestDispatcher.include(CmsFlexRequestDispatcher.java:173)
    at org.opencms.loader.CmsJspLoader.dispatchJsp(CmsJspLoader.java:1227)
    at org.opencms.loader.CmsJspLoader.load(CmsJspLoader.java:1171)
    at org.opencms.loader.A_CmsXmlDocumentLoader.load(A_CmsXmlDocumentLoader.java:232)
    at org.opencms.loader.CmsXmlContentLoader.load(CmsXmlContentLoader.java:52)
    at org.opencms.loader.CmsResourceManager.loadResource(CmsResourceManager.java:964)
    at org.opencms.main.OpenCmsCore.showResource(OpenCmsCore.java:1498)
    at org.opencms.main.OpenCmsServlet.doGet(OpenCmsServlet.java:152)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:115)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:92)
    at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:106)
    at com.caucho.filters.CmsGzipFilter.doFilter(CmsGzipFilter.java:177)
    at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
    at shared.filter.RemoteAddrFilterBase.doFilter(RemoteAddrFilterBase.java:57)
    at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
    at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115)
    at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
    at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:277)
    at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:106)
    at com.caucho.server.dispatch.ForwardFilterChain.doFilter(ForwardFilterChain.java:80)
    at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:207)
    at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:173)
    at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
    at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:274)
    at com.caucho.server.port.TcpConnection.run(TcpConnection.java:514)
    at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:520)
    at com.caucho.util.ThreadPool.run(ThreadPool.java:442)
    at java.lang.Thread.run(Thread.java:595)     
Caused by: com.caucho.jsp.JspLineParseException: /WEB-INF/jsp/online/system/modules/com.MYCOMPANY.marketing/templates/common/MY_JSP_PAGE.jsp:1: tag = 'out' / attribute = 'value': An error occurred while parsing custom action attribute "value" with value "${fn:contains(TEXTVARIABLE, '|STRINGOFTEXT|')}": org.apache.taglibs.standard.lang.jstl.parser.ParseException: EL functions are not supported.
    at com.caucho.jsp.java.JspNode.error(JspNode.java:1489)
    at com.caucho.jsp.java.JspNode.error(JspNode.java:1480)
    at com.caucho.jsp.java.JavaJspGenerator.validate(JavaJspGenerator.java:466)
    at com.caucho.jsp.JspCompilerInstance.generate(JspCompilerInstance.java:475)
    at com.caucho.jsp.JspCompilerInstance.compile(JspCompilerInstance.java:373)
    at com.caucho.jsp.JspManager.compile(JspManager.java:233)
    at com.caucho.jsp.JspManager.createPage(JspManager.java:177)
    at com.caucho.jsp.JspManager.createPage(JspManager.java:157)
    at com.caucho.jsp.PageManager.getPage(PageManager.java:248)
    at com.caucho.jsp.PageManager.getPage(PageManager.java:166)
    at com.caucho.jsp.QServlet.getSubPage(QServlet.java:292)
    at com.caucho.jsp.QServlet.getPage(QServlet.java:210)
    at com.caucho.server.dispatch.PageFilterChain.compilePage(PageFilterChain.java:206)
    at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:133)
    at shared.filter.RemoteAddrFilterBase.doFilter(RemoteAddrFilterBase.java:57)
    at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
    at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115)
    at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:175)
    at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
    at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:485)
    at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:350)
    at org.opencms.flex.CmsFlexRequestDispatcher.includeExternal(CmsFlexRequestDispatcher.java:194)
    at org.opencms.flex.CmsFlexRequestDispatcher.include(CmsFlexRequestDispatcher.java:169)
    at org.opencms.loader.CmsJspLoader.service(CmsJspLoader.java:1193)
    at org.opencms.flex.CmsFlexRequestDispatcher.includeInternalWithCache(CmsFlexRequestDispatcher.java:423)
    at org.opencms.flex.CmsFlexRequestDispatcher.include(CmsFlexRequestDispatcher.java:173)
    at org.opencms.jsp.CmsJspTagInclude.includeActionWithCache(CmsJspTagInclude.java:364)
    ... 45 more

这可能是由于类路径中存在不同的 JSTL 版本造成的。换句话说,类路径被污染了。摆脱所有 JSTL 1.0 实现,以便类路径中只有 JSTL 1.1。 webapp 的默认类路径所覆盖的路径位于每个路径下Appserver/lib, Webapp/WEB-INF/lib, JRE/lib, JRE/lib/ext等。要确定确切的 JSTL 版本,请提取jstl.jar使用一些 ZIP 或 RAR 工具并阅读MANIFEST.MF file.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我混合 JSTL 1.0 和 JSTL 1.1 taglib 声明时,它会在我的某些服务器上导致 ParseException,但不是全部。为什么? 的相关文章

随机推荐

  • git浅克隆到特定标签

    我想克隆 Linux 内核存储库 但只能从 3 0 版本开始 因为内核存储库太大了 如果我可以进行浅克隆 它会使我的版本控制工具运行得更快 我的问题的核心是 我如何告诉 git depth 参数的 n 值是什么 我希望这会起作用 克隆htt
  • 如何使用Python从最高到最低设置k-Means聚类标签?

    我有一个包含 38 个公寓的数据集以及它们早上 下午和晚上的用电量 我尝试使用 scikit learn 的 k Means 实现对该数据集进行聚类 并得到了一些有趣的结果 First clustering results 这一切都很好 对
  • 显示在合并中丢失的观察结果

    假设我想通过两列的键合并两个不同的数据帧 Dataframe One 有 70000 个 obs 共 10 个变量 Dataframe Two 有 4500 个 obs 共 5 个变量 现在 我使用此代码检查了新数据框中的观察结果是如何留下
  • View.inflate 与 LayoutInflater

    使用上主要区别是什么LayoutInflater和静态方法View inflate 使用它们中的任何一个是否有任何缺点 或者它们可能有不同的用途 如果看源码的话View inflate 我们看到这个 public static View i
  • 在我的活动过程中保持屏幕处于唤醒状态

    我的应用程序中有三项活动 我想在第二个活动时保持屏幕唤醒 除非手动按下 锁定 键 否则屏幕在我的第二个活动中不应关闭 我浏览了很多链接 但它们对我来说似乎不清楚 正如 Android 教程中所讨论的保持屏幕开启 https develope
  • 加载活动选项卡页面源的 Chrome 扩展

    我希望你可以帮助我 我正在尝试在 Chrome 中创建一个扩展 它将活动选项卡的源加载到变量中 到目前为止我有 清单 json name My Extension manifest version 2 version 0 1 descrip
  • 如何调整文本字体大小以适合文本视图

    android 有没有办法调整文本视图中的文本大小以适应其占用的空间 例如 我正在使用一个TableLayout并添加几个TextViews 到每一行 因为我不想要TextView我宁愿看到它降低了内容的字体大小 有任何想法吗 我努力了me
  • 使用 gradle-experimental:0.2.0 签署 android apk

    我已经成功修改了我的 build gradle 以与 gradle experimental 一起使用 但是当尝试添加签名配置块时它失败了 我按照以下指示进行操作http tools android com tech docs new bu
  • Objective-C 标头中的冒号对齐

    我想使用 uncrustify 来对齐冒号上的参数 但取得了一些有限的成功 使用中的信息Uncrustify 可以在 Objective C 方法调用中对齐冒号吗 https stackoverflow com questions 9387
  • 更改 vuetify 网格中的列宽

    我在行下有三列 每列的 cols 值为 4 我想减小 col1 的宽度 我尝试将 cols 值从 4 更改为 3 但列变得比我预期的要小 所以我想要一个介于 3 到 4 之间的 cols 值 考虑 cols 值为 3 5 我有办法实现这个目
  • tycho 插件 + maven-dependency-plugin:从本地项目而不是存储库复制依赖项

    主要目标 将项目部署为 jarandeclipse 插件 当前状态 项目构建良好 作为 jar 包 现在我想创建第二个项目 将 jar 项目包装为 eclipse 插件 使用 tycho maven plugin 创建 eclipse pl
  • 将 generated-sources 作为源文件夹添加到 Eclipse

    我正在使用 maven jaxb plugin 基于 xsd 文件生成类文件源
  • PHP 重定向相同地址不同端口

    现在我有这个 header Refresh 0 url http 192 168 100 100 10500 redirect2 php 我怎样才能做同样的重定向但不写地址 只写端口 这两个文件位于同一服务器上的同一文件夹中 问题是我不知道
  • 获取 cURL 以跟踪重定向

    我在 Laravel 中有一个应用程序 可以抓取网站并检索特定信息 最近我看到越来越多的网站出现 403 禁止访问 所以我决定第一次尝试 cURL 我现在遇到的唯一问题是 对于具有 301 或 302 重定向的网站 cURL 不遵循它们 这
  • 允许 UIImagePickerController 编辑视频但不能编辑图像

    上传图像或视频Whatsapp 似乎使用UIImagePicker 可以在该视图中编辑视频 但无法编辑图像 貌似在SDK中 allowsEditing属性决定是否允许对图像和视频进行编辑 我怎样才能获得像Whatsapp一样的行为 其中视频
  • CSS表格,反转显示内容的顺序

    我知道这有点前沿 但无论如何 这就是问题 Given div First Div div div Second Div div one two display table cell 这给了我一个可爱的并排排列的div one 在左边 two
  • 如何从 ASP.NET 代码隐藏中获取当前 URL

    我的应用程序托管在不同的服务器上 我想获取当前服务器上页面的 URL 如何在代码后面获得这个属性 string url HttpContext Current Request Url AbsoluteUri http thehost com
  • 在 R 中获取图的二次方程项

    我需要找到我在 R 中绘制的图的二次方程项 当我在 Excel 中执行此操作时 该术语出现在图表上的文本框中 但我不确定如何将其移动到单元格以供后续使用 以应用于需要校准的值 或者实际上如何在 R 中请求它 如果它在 R 中是可召唤的 它是
  • 存储不带日期的时间,但不作为类字符

    我的类字符数据框中有一个 local time 列 其中包含如下元素 gt a local time 1 1 30 AM 6 29 AM 6 59 AM 9 54 AM 10 14 AM 10 34 AM 12 54 PM 1 15 PM
  • 当我混合 JSTL 1.0 和 JSTL 1.1 taglib 声明时,它会在我的某些服务器上导致 ParseException,但不是全部。为什么?

    当我混合 JSTL 1 0 和 JSTL 1 1 taglib 声明时 它会在我的某些服务器上导致 ParseException 但不是全部 这是给我带来麻烦的代码块