雨翔河
首页
列表
关于
解析 el 表达式出错
2019-01-23 06:22
部分功能页面没有进行前后端分离,使用的还是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内,找到依赖关系,这才破案。
类型:工作
标签:el,jsp,java
Copyright © 雨翔河
我与我周旋久
独孤影
开源实验室