Tomcat 6、7在EL表达式解析时存在的一个Bug
今天在做数据分页显示的时候遇到了一个问题,经过测试,证实是Tomcat 6的一个bug,我所用的版本为:apache-tomcat-6.0.36,和7.0.30均能复现。下面详细描述一下这个bug:
<c:forEach var="looper" items="${pageHelper.pageList}"><c:choose><c:when test="${looper eq pageHelper.pageDot}"><p>分页游标的 点点点</p></c:when><c:when test="${looper eq pageHelper.pageNo}"><p>当前页为第${looper}页面</p></c:when><c:otherwise><p>分页游标:${looper}</p></c:otherwise></c:choose>
</c:forEach>
javax.el.ELException: Cannot convert ... of type class java.lang.String to class java.lang.Long
为什么会出现“类型转换错误”呢?通过分析代码走向,当进入循环后,list中的第一条数据是“1”,而pageHelper.pageNo为long型,此时tomcat的EL表达式解析器会把looper类型转换为Long型而不是把pageHelper.pageNo类型转换为String进行比较,当遍历到下一元素时,looper="...",这时looper的类型已经确定,比较的时候tomcat还要试图将looper转换为Long类型,于是就出错了。
为此我专门写了一个实例代码:
<c:forEach var="looper" items="${pageHelper.pageList}"><c:choose><c:when test="${looper eq fn:trim(pageHelper.pageDot)}"><p>分页游标的 点点点</p></c:when><c:when test="${looper eq fn:trim(pageHelper.pageNo)}"><p>当前页为第${looper}页面</p></c:when><c:otherwise><p>分页游标:${looper}</p></c:otherwise></c:choose>
</c:forEach>
很简单,每次比较的时候都把后者用fn:trim方法进行去除左右非可见字符。相当于强制转换为String类型,此时tomcat又可以正常解析代码,并未报错。
同样的一套代码,我将其部署到resin中发现无论是修改前还是修改后都能正常运行,可见,应该是tomcat的bug。
示例代码下载地址:http://download.csdn.net/detail/chaijunkun/5581883,
让tomcat报错的演示地址:/bug/show.do
避免此bug的方法演示地址:/bug/avoid.do
以上地址前可能需要加上项目名称(具体取决于你如何部署该项目)
Tomcat 6、7在EL表达式解析时存在的一个Bug相关推荐
- spring el表达式解析_Spring之旅第一篇-初识Spring
目录 一.概述 二.模块 三.动手创建 一.概述 只要用框架开发java,一定躲不过spring,Spring是一个轻量级的Java开源框架,存在的目的是用于构建轻量级的J2EE应用.Spring的核 ...
- jsp中EL表达式显示时中文乱码
我是通过url请求将一个jsp的值传到另一个jsp,结果在另一个jsp显示时出现中文乱码. 分析问题:由于URL请求没有设置编码格式所以解析响应时会出现中文乱码 解决方法:在Tomcat的conf文件 ...
- 在使用.Net Reflector时发现了一个Bug:)
在写"深入Atlas系列"文章时,估计最常用的工具就是Lutz Roeder's .Net Reflector了.自从遇见了它,它就成为了我最喜欢的.NET相关工具,是绝对的第一. ...
- EL表达式和JSTL标签库使用
EL表达式 介绍: EL(Expression Language) 目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP ...
- JSP中的EL表达式详细介绍
2019独角兽企业重金招聘Python工程师标准>>> 一.JSP EL语言定义 EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能.脚本编制元素是指页面中能够用于在 ...
- Spring EL 表达式的简单介绍和使用
文章目录 1. 简单介绍 1.1. 什么是 Spring EL 1.2. 为什么要使用 Spring EL 1.3. 如何使用 Spring EL 2. 简单使用 3. EL 表达式解析引擎 3.1. ...
- 【JSP教科书】JSP知识在线指南(记录知识JSP体系、EL表达式、JSTL标签库、JSP开发模型和分页查询)
文章目录 @[toc] 一.JSP简介 1.1 什么是JSP? 1.2 JSP的特点 1.3 JSP为什么也是Servlet 1.4 tomact服务器中的资源分析 1.4.1 tomact服务器中的 ...
- 『Java安全』EL表达式注入
文章目录 前言 EL表达式解析启用/禁用 EL表达式注入 绕过方式 1. 反射 2. js引擎rce 3.String类动态生成命令字符串(ASCII) 参考引用 完 前言 EL表达式全称Expres ...
- JSP复习(二):EL表达式
2019独角兽企业重金招聘Python工程师标准>>> EL表达式:从JSP2.0开始成为规范,是的原来用scriptlet和表达式完成的事情,EL都能完成 1.配置相关 ${app ...
最新文章
- AutoHotkey 使用笔记
- 【HIMI转载推荐之三】新手教程之如何向APP STORE提交应用
- python找出第二大值,Python程序在Dictionary中查找第二个最大值
- hive查看数据库里库的信息_hive 查看当前数据库
- linux 关中断 调度,关中断是否禁止任务调度?关中断能作为互斥吗?
- .NET Task揭秘(一)
- Python数据类型与运算符号
- CSS单位 px pt em和rem 之间的区别
- ASP.NET那点不为人知的事(二)
- Hue添加Spark notebook
- 写论文的一点经验小记
- MapXtreme 2005 学习心得 了解新建MapXtreme项目结构(二)
- CMC5601-微芯智能科技6轴运动控制器
- 单片机课设中期报告_毕业设计中期报告
- 精简win服务器系统,My Server之管理Win Server 2012精简版
- Labelme对图像标注、json转化png格式
- 【SDCC讲师专访】Swoole开源项目创始人韩天峰:PHP是最好的编程语言
- Python中文文本分句
- ios You app information could not be saved. Try again. If the problem persists, contact us
- 2020中科大计算机分数线,2020中国科技大学录取分数线