解析el表达式出错

部分功能页面没有进行前后端分离,使用的还是jsp技术。

容器本身是有包进行解析el的,如果在项目里引入了 javax.el 包会导致解析el表达式出错,具体报错如下:

2019-01-23 13:32:35,134 ERROR [org.apache.catalina.core.ContainerBase] Servlet.service() for servlet jsp threw exception
java.lang.LinkageError: javax/el/ExpressionFactory
        at org.apache.jsp.xxx

在jsp中使用了类似于这种el表达式的时候就会出现上面的报错 cxxxx.jsp

<c:forEach var="act" items="${listAct}">

jsp编译之后生产的java文件大致是在

work/xxx/localhost/_/org/apache/jsp/xxx

容器不一样目录也会有差异。

jsp编译成的java为 cxxxx_jsp.java

_jspx_th_c_005fforEach_005f0.setItems(new org.apache.jasper.el.JspValueExpression("/WEB-INF/mxxxx/xxx/cxxxx.jsp(55,5) '${listAct}'",_el_expressionfactory.createValueExpression(_jspx_page_context.getELContext(),"${listAct}",java.lang.Object.class)).getValue(_jspx_page_context.getELContext()));

出现的原因: 项目A引用了项目B,项目B引用了项目C,项目C引用了项目D 项目D引入了 javax.el这个包,导致这一层依赖传导到了A项目,A项目有一些非常老的功能还存在jsp页面,就发生了这个报错。 而因为是jsp报错,在应用本身的日志文件是没有报错日志的,还只能在容器本身的日志去找。 起先是以为表达式或者传到jsp的对象存在问题,因为报错日志不明显,只能大致知道是el表达式有问题,jsp只在大学的书本上用过,工作之后从velocity到freemarker和thymeleaf等等,就是没有用过jsp。。。

最后对比了前后的war包发现多了一个javax.el的包在应用的lib内,找到依赖关系,这才破案。

转载于:https://my.oschina.net/110NotFound/blog/3005003

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值